15. maj 2002 - 12:23Der 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?
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!
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.
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?
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.
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!
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).
Har foreløbigt løst problemet ved at smide paneler over på alle felter!
Synes godt om
Ny brugerNybegynder
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.