Autor Beitrag
masteroffinalfantasy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Win XP
Delphi 2005 Architect
BeitragVerfasst: Mi 02.07.08 12:31 
Servus,

ich habe derzeit ein paar Probleme mit zur Laufzeit erzeugten Objekten.

Ich erzeuge in meinem Programm ein Array mit TImages:

ausblenden 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 02.07.08 13:00 
Moin!

ausblenden 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; // High(bilder) = Length(bilder)-1 :idea: ;)
end;

procedure tform1.bilderMouseDown(Sender: Tobject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage(IntToStr(TComponent(Sender).Tag));
end;
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 02.07.08 13:28 
Hi,

user profile iconmasteroffinalfantasy hat folgendes geschrieben:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.DoSomething;
begin
  //hier könnte der Code z.B. stehen
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,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
masteroffinalfantasy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Win XP
Delphi 2005 Architect
BeitragVerfasst: Mi 02.07.08 13:35 
@Narzes Dickes Dankeschön an dich für die schnelle Antwort! Es klappt :)
@Hidden Danke für den Hinweis, ich werde das umschreiben :)