Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Mit Message bestimmte Aktionen bei Komponenten ausführen (https://www.delphipraxis.net/119241-mit-message-bestimmte-aktionen-bei-komponenten-ausfuehren.html)

RWarnecke 22. Aug 2008 23:08


Mit Message bestimmte Aktionen bei Komponenten ausführen
 
Hallo zusammen,

ich würde gerne über Messages dementsprechend bei Buttons reagieren. Ich habe schon ein paar Beiträge zu Messages gelesen und schonmal soweit dieses Beispiel erstellt.
Delphi-Quellcode:
type
  TForm3 = class(TForm)
    Memo1: TMemo;
    SpeedButton1: TSpeedButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    procedure MyMessages(var Msg: TMsg; var Handled: Boolean);
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
  Application.OnMessage := MyMessages;
end;

procedure TForm3.MyMessages(var Msg: tagMSG; var Handled: Boolean);
var
  I: Integer;
begin
  case Msg.message of
    WM_LBUTTONDOWN:
      begin
        Memo1.Lines.Add('TestButton');
      end;
  end;
end;
Funktioniert auch alles soweit. Jetzt möchte ich aber zum Beispiel bei bestimmten Buttons das gleiche ausführen. Dazu ändere ich die Procedure MyMessages so ab :
Delphi-Quellcode:
procedure TForm3.MyMessages(var Msg: tagMSG; var Handled: Boolean);
var
  I: Integer;
begin
  case Msg.message of
    WM_LBUTTONDOWN:
      begin
        if TSpeedButton(Sender).Name = 'SpeedButton1' then
          Memo1.Lines.Add('TestButton');
      end;
  end;
end;
Dann kommt immer undefinierter Bezeichner 'Sender'. Hier stellt sich mir die Frage wieso ?

Für eine Erklärung, einen Hinweis oder Links zu passenden Tutorials wäre ich dankbar.

Edit: Titel geändert

sx2008 23. Aug 2008 00:49

Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
 
Zitat:

Zitat von RWarnecke
Delphi-Quellcode:
procedure TForm3.MyMessages(var Msg: tagMSG; var Handled: Boolean);
Dann kommt immer undefinierter Bezeichner 'Sender'. Hier stellt sich mir die Frage wieso ?

Siehst du es jetzt? Die Methode MyMessages hat keinen Übergabeparameter namens Sender.
Bei Windows Messages gibt es nur Handles.

RWarnecke 23. Aug 2008 07:50

Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
 
Zitat:

Zitat von sx2008
Siehst du es jetzt? Die Methode MyMessages hat keinen Übergabeparameter namens Sender.

Ok, das habe ich jetzt kapiert. Ich muss den Sender immer übergeben, um dann damit arbeiten zu können.
Zitat:

Zitat von sx2008
Bei Windows Messages gibt es nur Handles.

Jetzt stellt sich mir nur die Frage, wie mache ich das ganze über Handles ?

Garfield 23. Aug 2008 08:38

Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
 
Zitat:

Zitat von RWarnecke
Jetzt stellt sich mir nur die Frage, wie mache ich das ganze über Handles ?

TSpeedButton haben kein Handle. Kannst Du nicht OnMouseDown verwenden?

Nachtrag:

Anstelle von TSpeedButton(Sender).Name kannst Du auch TSpeedButton(Sender).Tag verwenden.

RWarnecke 23. Aug 2008 12:33

Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
 
Zitat:

Zitat von Garfield
TSpeedButton haben kein Handle. Kannst Du nicht OnMouseDown verwenden?

Dann müsste ich dass aber für jeden Button einzeln machen.

Zitat:

Zitat von Garfield
Anstelle von TSpeedButton(Sender).Name kannst Du auch TSpeedButton(Sender).Tag verwenden.

Geht doch nicht, da er den Sender nicht kennt.

toms 23. Aug 2008 12:51

Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
 
Du kannst ja allen Buttons das gleiche OnMouseDown Ereignis zuweisen.

Sidewinder 23. Aug 2008 13:15

Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
 
ich denke er stellt sich das so vor:
Zitat:

Du kannst ja allen Buttons das gleiche OnMouseDown Ereignis zuweisen
Delphi-Quellcode:
Procedure onmousedown(Sender: TObject; Button: TMouseButton;
                      Shift: TShiftState; X, Y: Integer);
begin
  if (sender is Tspeedbutton) then
  begin
    case (sender as Tspeedbutton).Tag of
      0: {dosomething};
      1: {dosomething};
      2: {dosomething};
    else

    end;
  end;
end;
damit kann man auf die messages verzichten...
aber nicht vergessen... jeder speedbutton braucht
einen anderen tag-wert...

RWarnecke 23. Aug 2008 13:35

Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
 
Ja, so ungefähr stelle ich es mir vor. Nur möchte ich das ganze über die Messages machen, da ich auch eigene Messages verarbeiten will. Wenn mich nicht alles täuscht, hat doch die Komponente TButton ein Handle oder irre ich mich da ?

toms 23. Aug 2008 13:59

Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
 
Zitat:

Zitat von RWarnecke
Wenn mich nicht alles täuscht, hat doch die Komponente TButton ein Handle oder irre ich mich da ?

Ja, hat es.

RWarnecke 23. Aug 2008 14:34

Re: Mit Message bestimmte Aktionen bei Komponenten ausführen
 
Ok, dass mit den Handle's habe ich jetzt hinbekommen. Da sage ich schonmal danke. Jetzt ist nur noch die Frage, ob ich genau in der Procedure MyMessages eine Message abfangen kann und nicht an die Komponente weiterleite. Wenn ja, wie mache ich das ? Ausgangspunkt sind TButtons.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz