Avatar billede diz Nybegynder
16. oktober 2002 - 18:17 Der er 14 kommentarer og
1 løsning

Fang museklik

Hej.

Er der en måde hvorpå jeg kan fange et museklik på min form, uanset om der er trykket på formen eller et på f.eks et panel eller lign på formen.
Hvis jeg gør følgende fanger den nemlig ikke museklikket hvis der trykkes på et panel på formen

procedure TfrmProduktionsplan.FormClick(Sender: TObject);
begin
    showmessage(sender.ClassName);
end;

Jeg har forsøgt med KeyPreview := true;

men det virker kun med tastetryk, desværre.
Avatar billede dkn Nybegynder
16. oktober 2002 - 19:06 #1
prøv med mousedown og keypreview til true
Avatar billede dkn Nybegynder
16. oktober 2002 - 19:07 #2
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
  showmessage('Click');
end;


og
keypreview := true;
Avatar billede dkn Nybegynder
16. oktober 2002 - 19:11 #3
ok det virker ikke. Prøv at gå til component pallete -> Additional-> ApplicationEvents

vælg OnMessage event.

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
if Msg.message = WM_LBUTTONUP then
  showmessage('Click');
end;

men den fanger ALLE click. Det giver et problem med den message box som er kommet frem....
Avatar billede dkn Nybegynder
16. oktober 2002 - 19:14 #4
men det kunne simpelt fixes med

if getactivewindow = handle then
  if Msg.message = WM_LBUTTONUP then
      showmessage('Click');
Avatar billede diz Nybegynder
16. oktober 2002 - 20:53 #5
mange tak dkn...det virker perfekt, næste prblem er dog at jeg skal vide hvilken component der er trykket på...er det noget du har en god ide til.
Avatar billede diz Nybegynder
16. oktober 2002 - 21:15 #6
Det er fordi jeg skal finde ud af præscis hvilken knap af mange der er trykket på og kunne trække nogle opæysniger ud fra den og der skal være uden at knappen "finder ud af" at den bliver "overvåget", så jeg kan ikke sætte knappernes onclick event til noget. Håber du forstår.
Avatar billede stoney Nybegynder
16. oktober 2002 - 21:40 #7
ShowMessage( TComponent(Sender).Name );

Stoney
Avatar billede diz Nybegynder
16. oktober 2002 - 21:43 #8
stoney--> Men problemet er jo at jeg ikke har en sender.
Avatar billede stoney Nybegynder
16. oktober 2002 - 21:59 #9
...næste prblem er dog at jeg skal vide hvilken component der er trykket på...er det noget du har en god ide til.

Er du helt sikker på du ikke har en sender ?

Stoney
Avatar billede diz Nybegynder
16. oktober 2002 - 22:10 #10
jeg fanger jo klikket med :

procedure TfrmProduktionsplan.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
if getactivewindow = handle then
  if Msg.message = WM_LBUTTONUP then
  begin
    showmessage('kost');
  end;
end;
Avatar billede diz Nybegynder
16. oktober 2002 - 22:13 #11
men kan man ud fra msg.hwnd finde ud af hvilken knap der er trykket på og behandle den som en TButton og kalde nogle properties på den måde..
Avatar billede dkn Nybegynder
16. oktober 2002 - 23:03 #12
du kan få dens handle vedhjælp af:

      GetCursorPos(Point);
      handle := WindowFromPoint(Point);

men ved sku ikke lige hvordan du vil sammenligne den handle med dine components.
Avatar billede dkn Nybegynder
16. oktober 2002 - 23:21 #13
det her er bæ kode!! Hvis du har et sart hjerte skal du stoppe med at læse nu!!

Men hvis der er en nemmere løsning som jeg ikke kan se ligenu så kom endelig med den :)

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  Point: TPoint;
  i: integer;
  whandle :Thandle;
  buf      : array[0..255] of Char;
begin
  if getactivewindow = handle then
    if Msg.message = WM_LBUTTONUP then
    begin
      GetCursorPos(Point);
      whandle := WindowFromPoint(Point);

      GetClassName(whandle,@buf[0],sizeof(buf));

      for I := 0 to ComponentCount - 1 do
        if strpas(buf) = Components[I].ClassName then
          if Components[I].ClassType = TButton then
            if TButton(Components[I]).Caption = 'Test' then
                        TButton(Components[I]).Caption := 'Lort';
    end;
end;
Avatar billede diz Nybegynder
16. oktober 2002 - 23:24 #14
tusind tak for hjælpen...
Avatar billede dkn Nybegynder
16. oktober 2002 - 23:26 #15
:) selvtak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester