24. januar 2000 - 09:44Der er
11 kommentarer og 1 løsning
Problemer med ComponentCount
var fLabel : TLabel; I : Integer;
// Opretter en Label procedure TForm1.Button1Click(Sender: TObject); begin fLabel := Tlabel.Create(Form1); fLabel.Parent := Form1; fLabel.Top := Form1.Shape1.Top+20 ; fLabel.left := Form1.Shape1.Left+50; fLabel.Caption := 'Dette er en test'; end; // Tæller antal Label procedure TForm1.Button2Click(Sender: TObject); begin For I := 0 To Shape1.ComponentCount -1 Do //Uanset hvormange label der er If (Components[I] is TLabel) Then //så bliver Shape1.ComponentCount Begin //ved med at være 0 Label2.Caption := IntToStr(I); end; end; // Sletter Label procedure TForm1.Button3Click(Sender: TObject); begin For I := 0 To Shape1.ComponentCount -1 Do If (Components[I] is TLabel) Then Begin If Assigned(FLabel) then begin FLabel.Free; FLabel:=nil; end; end; end; end.
// Hvis jeg laver det samme med et Image så vil Shape1.ComponentCount // godt tælle op
Det jeg gerne vil vide er, hvorfor vil ComponentCount ikke tælle, hvor mange Label jeg opretter når den godt vil tælle hvor mange Image der er oprettet.
med hensyn til mit problem med ComponentCount så vælger jeg at bruge løsning nr.2 da jeg har mange andre componenter på form1. (det som du ser her er kun et meget lille udsnit af mit program). Jeg har lige prøvet programmet med de nye ændringer og det virker fint,men kan du forklare mig hvorfor jeg ikke kan slette mere end en label i min procedure TForm1.Button3Click selv om at der er oprettet mange Label's på Shape1.
Ang.'Gemme Images dynamisk' Jeg har ikke haft tid til at prøve dit løsnings-forslag men jeg har kigget lidt på det.
Kan jeg ikke få dig til, at lave et program ,hvor du under runtime opretter to Image og To Label på en Shape, og så gemmer dem i EN fil med en SaveDialogBox for derefter at henter dem ind på shap'en igen med en OpenDialogBox
Det ville være en stor hjælp for mig
Hvis du vil og har brug for det kan du få min E-mail adresse
Umiddelbart vil jeg sige at det er fordi du kun opretter en label du kaldet FLabel i button1click. Denne fjerner du igen i med flabel.free i button3click. Husk at der kan kun være en label ad gangen der hedder FLabel.
Hvis du vil fjerne alle labels på shape1 så skal du bruge:
For I := 0 To Shape1.ComponentCount -1 Do If (Components[I] is TLabel) Then Begin If Assigned((Components[I] as TLabel)) then begin (Components[I] as TLabel).Free; (Components[I] as TLabel):=nil; end; end; end;
I øvrigt burde det jo være nok at skrive "if assigned(component[i]) then component[i].free;", da du jo med testen "if (component[i] is TLabel)" har sikret at det pågældende component ER en label, men Delphi vil desværre have at man typecaster med AS.
Med hensyn til det lille program: Jo, hvis jeg får tid i løbet af dagen. Er der ok hvis det er D4 ?
Kaldet til Free vil automatisk sætte komponenten til Free. Sætter man manuelt komponenten til nil inden Free kaldes, vil Free ikke virke idet free egentligt bare gør følgende:
If Assigned(x) Then // Dvs: x <> Nil Begin x.Destroy; x := Nil; End;
Du skal derfor glemme alt om at sætte din label til nil - Delphi gør det for dig.
jeg er igang med det lille program og opdager først nu at en Shape ikke er en container for f.eks. Images. Selvom man sagtens kan placere en image på en shape, er det formen der ejer den og ikke shapen. Prøv engang selv at oprette en shape og smid en image på den. Når du så flytter shapen et andet sted hen, bliver imagen hvor den er i forhold til formen og ikke i forhold til shapen. Årsagen er at en shape ikke er en TWinControl og derfor kan den ikke være Parent.
anold, det med at gemme det hele i en fil driller lidt.
Pt. kan jeg gemme en fil med teksterne samt navnet på hvert image, samt en fil for hvert image.
Men det er jo ikke lige det du vil, vel ?
Jeg arbejder videre med det men det bliver desværre ikke idag jeg bliver færdig.
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.