Autor Beitrag
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Sa 05.04.03 21:12 
Hi,
wie kann man möglichst elegant bei einem TSpeedbutton ein Mouseenter Event realisieren?

Ich wollte zuerst auf CM_MOUSEENTER reagieren, bloß ist das Dumme dadran, dass ich, um herauszufinden, um welches Objekt es sich handelt, dass die CM_MOUSEENTER abgefeuert hat, ich den Handle dieses Objektes brauche:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TFormMain.CMMouseEnter(var Message: TMessage);
var
  ptWork : TPoint;
  i: integer;
begin
  GetCursorPos(ptWork);
  for i := 1 to 9 do
    if WindowFromPoint(ptWork) = (FindComponent('b'+inttostr(i)) as TSpeedButton).Handle then begin
      if SoundOn then
        PlaySound(PChar(6),HInstance, snd_ASync or snd_Memory or snd_Resource);
      break;
    end;
end;

Und TSpeedbutton hat keinen Handle, warum eigentlich nicht?

Natürlich ohne zusätzliche Komponente.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 05.04.03 21:23 
Es hat kein Handle weil es von TGraficControl abgeleitet ist und nicht von TWinControl.
Alibi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Sa 05.04.03 21:29 
Jo, mach sein. :)
Und wie sieht es hiermit aus, warum funktioniert das nicht?
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
.
.
procedure WndProc(var Message : TMessage); override;
.
.
procedure TFormMain.WndProc(var Message : TMessage);
var
  i: integer;
begin
  if (Message.Msg = CM_MOUSEENTER) and SoundOn then
    for i := 1 to 9 do
      if Message.LParam = Longint(FindComponent('b'+inttostr(i)) as TSpeedButton) then
        PlaySound(PChar(6),HInstance, snd_ASync or snd_Memory or snd_Resource);
 inherited WndProc(Message);
end;

Es wird einfach kein Sound abgespielt.

Und wenn es funktionieren würde, wie schaff ich diese Warnung aus der Welt?
Zitat:

[Hinweis] UnitMain.pas(58): Durch das Überschreiben erhält die virtuelle Methode 'TFormMain.WndProc' eine geringere Sichtbarkeit (private) als die Basisklasse 'TForm' (protected)