Avatar billede beerh Nybegynder
15. maj 2002 - 12:23 Der er 14 kommentarer og
1 løsning

Kopi af form runtime?

Er der nogen måde hvorpå jeg kan kopiere en form runtime? Jeg kan jo ikke erklærer en variabel af formens type i runtime og kender den ikke i designtime? Tænkte på at lave noget i retning af at erklærer en Tform og så typecaste min orginalforms classtype på den i en create, men jeg kan ikke få det til at spille? Nogen ideer?
Avatar billede angelod Novice
15. maj 2002 - 12:31 #1
Hvad mener du? Du kender da navnet på formen i designtime, og kan sagtens oprette den nye form i runtime.
Avatar billede beerh Nybegynder
15. maj 2002 - 12:34 #2
Jeg har en base form som alle mine forms arver fra, den form har en function som skal kunne lave en kopi af en form. Kunne da godt erklærer alle mine forms i kopi proceduren, men nu er der nok et par 100 forms i projektet, så det er ikke helt optimalt!
Avatar billede martinlind Nybegynder
15. maj 2002 - 12:34 #3
VAR
  Tmp : TMyForm1;

begin
  Tmp := TMyForm1.Create(NIL);
  Tmp.ShowModal;
  Tmp.Free;
end;

/Martin
Avatar billede angelod Novice
15. maj 2002 - 12:36 #4
Du kan jo benytte dynamiske arrays, hvis jeg forstår spørgsmålet ret?
Avatar billede martinlind Nybegynder
15. maj 2002 - 12:37 #5
Hvis du har et project med et par hundrede form's i, så har du lavet noget galt, for det er et fuldstændigt vanvidigt stort antal, der med garenti er unødvendigt og resurce krævende.

/Martin
Avatar billede beerh Nybegynder
15. maj 2002 - 12:39 #6
Det er et meget stort program, tror udviklingen startede for 10 år siden!
Avatar billede martinlind Nybegynder
15. maj 2002 - 12:56 #7
Men alligevel, jeg har også kodet siden D1 ( 1995 ), og også store programmer, så for mig lyder det stadig vildt !!!!
Avatar billede stoney Nybegynder
15. maj 2002 - 12:58 #8
procedure TForm1.Button2Click(Sender: TObject);
begin
with TForm1.Create (Application) do
Show;
end;


Stoney
Avatar billede beerh Nybegynder
15. maj 2002 - 13:12 #9
Stoney den har jeg prøvet, får at vide at der allerde eksistere en komponent med formens navn?
Avatar billede stoney Nybegynder
15. maj 2002 - 16:12 #10
Det forstår jeg ikke.
Under hvliken event bruger du koden ?
Prøv lige med button.click som i mit eks.
Det virker hos mig.

Stoney
Avatar billede beerh Nybegynder
15. maj 2002 - 16:19 #11
Der er i et buttonclick, men ikke på den form som jeg vil kopiere! Den er kommet med over i den anden form i en anden procedure, og så sat til en lokal variabel på nr2 form.

Har muligvis fundet noget jeg kan bruge har ikke lige haft tid til at teste det endnu, sidder lige med noget andet der skal være færdig først!

procedure TForm1.CreateComponent(const AClassName: string; Parent:
TWinControl);
var
    w: TWinControl;
begin
    w := TWinControlClass(GetClass(AClassName)).Create(Self);
  if Parent <> nil then
    w.Parent := TCustomControl(Parent)
  else
    w.Parent := Self;

Skal nok lige smide en besked hvis det virker ellers er jeg stadig åben for foreslag?
Avatar billede tormork Nybegynder
16. maj 2002 - 06:40 #12
Du kan godt declarere formen som x:TForm i designtid og sætte den lig med din nye for: x := TMinForm.Create; og siden bruge TMinForm(x).Whatever. Du kan ikke create den vha. x := TForm.Create() og siden bruge TMinForm(x).Whatever (Uden så at du ikke indfører nye variable i TMinForm).
Det som jeg ikke rigtigt forstår er hvorfor du ikke kender formens type i designtime. En forklaring af det ville nok gøre det nemmere at løse problemet.
Avatar billede beerh Nybegynder
16. maj 2002 - 10:11 #13
Skal lave en funktionalitet, så brugerne kan vælge hvilke felter de vil se på de forskellige forme i programmet. Ideen er at hive formen frem, lave de felter som de kan se grønne og de felter som er usynlige røde og når en bruger så klikker på et felt skal det selvfølgelig skifte farve. For at fjerne alle events som evt. måtte være på formen blev vi enige om at den bedste løsning ville være at lave en kopi af formen. Selvfølgelig kender jeg formenes type ved designtime, men da det drejer sig om mange forme denne funktionaltitet skal virke på er det ikke smart at skulle erklærer en variabel af hver form type!
Avatar billede tormork Nybegynder
18. maj 2002 - 00:45 #14
phua du får det ikke nemt :)
Jeg er ikke sikker på at det er det nemmeste. Jeg gætter på at det er langt nemmere at instantiere formen med alt i og siden destruere alt overflødigt. Event-procedurene vil stadig være der, men vil ikke blive kaldt, med det vil også ske hvis du laver en kopi af formen(ok ikke hvis du genererer kode og kompilere i runtime, men det er væl ikke en mulighed).
Avatar billede beerh Nybegynder
27. maj 2002 - 09:38 #15
Har foreløbigt løst problemet ved at smide paneler over på alle felter!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester