Entwickler-Ecke

Sonstiges (Delphi) - Maus-Click Prozedur zur Laufzeit zuordnen und ändern


M. Raab - Sa 22.02.03 16:54
Titel: Maus-Click Prozedur zur Laufzeit zuordnen und ändern
Hallo NG,


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

Beispiel:


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:


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:


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:


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. - 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


M. Raab - So 23.02.03 13:43

Hallo Peter,


vielen Dank - das funzt.

Gruss


Markus