Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zugriff auf generische Objekte
masteroffinalfantasy - Mi 02.07.08 11:31
Titel: Zugriff auf generische Objekte
Servus,
ich habe derzeit ein paar Probleme mit zur Laufzeit erzeugten Objekten.
Ich erzeuge in meinem Programm ein Array mit TImages:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| bilder[length(bilder)-1]:=TImage.Create(Form1); with bilder[length(bilder)-1] do begin parent:=Form1; Visible:=true; Width:=11; Height:=11; Transparent:=true; Left:=0; Top:=0; OnMouseDown:=form1.bilderMouseDown; OnMouseUp:=form1.bilderMouseUp; Name:='bild'+inttostr(length(bilder)-1); end; |
Keine Probleme soweit. Jetzt würde ich gerne in den Prozeduren bilderMouseDown und bilderMouseUp die Namen wieder bekommen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure tform1.bilderMouseDown(Sender: Tobject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var a, b : integer;c:string; begin c:=TComponent(Sender).Name; a := strtoint(Copy(c,5,length(c))); [..] end; |
Da erwarte ich eigentlich, dass in a die Nummer des Bildes steht.. leider war das anscheinden bisschen naiv.
Wenn jemand einen Ausweg aus der Misere weiß, wäre ich dankbar, wenn er hier postet ;)
Narses - Mi 02.07.08 12:00
Titel: Re: Zugriff auf generische Objekte
Moin!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| bilder[length(bilder)-1]:=TImage.Create(Form1); with bilder[length(bilder)-1] do begin Name:='bild'+inttostr(length(bilder)-1); Tag := Length(bilder)-1; end;
procedure tform1.bilderMouseDown(Sender: Tobject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ShowMessage(IntToStr(TComponent(Sender).Tag)); end; |
cu
Narses
Hidden - Mi 02.07.08 12:28
Titel: Re: Zugriff auf generische Objekte
Hi,
masteroffinalfantasy hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| parent:=Form1; Visible:=true; Width:=11; Height:=11; Transparent:=true; Left:=0; Top:=0; OnMouseDown:=form1.bilderMouseDown; OnMouseUp:=form1.bilderMouseUp; Name:='bild'+inttostr(length(bilder)-1); | |
Je nachdem, wo du deinen Code platzierst, kann es dir auch passieren, dass die einzelnen Eigenschaften auf das falsche Objekt bezogen werden:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.DoSomething; begin end; |
TForm1 hat nämlich auch eine Eigenschaft namens 'Left'. Durch das with-Statement ist nun nichtmehr klar, auf welches Objekt sich alles bezieht. Bei Klassenmethoden wird nämlich praktisch der gesammte Prozedurtext in ein with-Statement gesetzt(du kannst ja auch z.B. außerhalb deines with-Statements 'Left' setzen :arrow: alles steht in einem 'with self do').
Somit hast du hier praktisch zwei with-Statements ineinander.
Das with-Statement kann zwar viel Tipparbeit ersparen, gilt jedoch aus gutem Grund als unsauber: Es kann zu nur sehr schwer auffindbaren Fehlern und damit nächtelangen Debugging-Sitzungen führen.
mfG,
masteroffinalfantasy - Mi 02.07.08 12:35
@Narzes Dickes Dankeschön an dich für die schnelle Antwort! Es klappt :)
@Hidden Danke für den Hinweis, ich werde das umschreiben :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!