Autor Beitrag
M. Raab
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Sa 22.02.03 16:54 
Hallo NG,


ich erzeuge zur Laufzeit mehrere Formblätter mit mehreren Prozeduren.

Beispiel:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 TProfil = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    ....
    procedure MsDown(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y: Integer);
    ...


Darin befindet sich auch ein MausDown Ereignis, dass wie folgt definiert ist:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
       for l:=1 to lochnummer do
       ....
       Application.CreateForm(TForm,Profil[lochnummer]);
       with profil[lochnummer] do
         begin
          ....
           tag:=lochnummer;
           Bild[lochnummer]:=TImage.Create(Profil[lochnummer]);
           bild[lochnummer].parent:=profil[lochnummer];
           bild[lochnummer].OnMouseDown:=MsDown;
          ...


Die Prozedur MSDown ist wie folgt definiert:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
Procedure TProfil.MsDown(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y: Integer);
Var ort   : integer;
  begin
    application.messagebox(Pchar('Ort: '+inttostr(ort)+' x: '+inttostr(x)+'   y:'+inttostr(y)),'TEST',MB_OK);
  end;
//*******************************************************************


So, das alles funktioniert recht gut und das Ereignis MSDown wird auch sauber ausgeführt. Das Image BILD und PROFIL sind arrays und die Variable "Lochnummer" wird über das PROFIL[..].tag zugewiesen. Nun möchte ich wissen, auf welchen Formblatt der Benutzer gerade geklickt hat. Jedes Formblatt (also PROFIL[..]) hat im TAG einen bestimmten Wert zugewiesen. Aus diesem Grund dachte ich, ich könnte das Mausereignis einfach erweitern und den TAG des PROFIL mitgeben. Also gewissermassen so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
Procedure TProfil.MsDown(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y, ORT: Integer);
Var ort   : integer;  -- > gibt den TAG des Profil[..] an.
  begin
    application.messagebox(Pchar('Ort: '+inttostr(ort)+' x: '+inttostr(x)+'   y:'+inttostr(y)),'TEST',MB_OK);
  end;
//*******************************************************************


Das ganze funzt aber nicht bzw. ich weiss nicht, wie ich das machen kann. Ich möchte also eigentlich nur wissen, auf welches Formblatt (also PROFIL[..]) der Benutzer geklickt hat. Ich dachte, ich könnte das mit focused machen. Da aber auf dem Form ein Image ist und dieses nicht die Eigenschaft focused besitz, funzt das nicht.


Kann mir da jemand helfen ?


Gruss

Markus
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 22.02.03 17:07 
Müsste nicht TImage(Sender).Parent Dir die entsprechende Form zurückgeben? (Solltest natürlich vorher prüfen, ob Sender wirklich ein TImage ist, bevor Du das benutzt. Über TProfil(TImage(Sender).Parent).Tag müsstest Du dann die Nummer bekommen.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: So 23.02.03 13:43 
Hallo Peter,


vielen Dank - das funzt.

Gruss


Markus