Avatar billede athlon-pascal Juniormester
11. september 2003 - 21:26 Der er 12 kommentarer og
1 løsning

Fejl med CM_MOUSELEAVE

Er der nogen der kan finde og løse fejlen(e) i følgende kode:

type
  TForm1 = class(TForm)
...
private
  procedure WndProc(var Message : TMessage); override;

...

procedure TForm1.WndProc(var Message : TMessage);
begin
  if Message.LParam = LongInt(Image1) then
    if (Message.Msg = CM_MOUSELEAVE) then
      ShowMessage('Hest');  //Bliver aldrig vist
  inherited WndProc(Message);
end;



Jeg har også prøvet følgende, bare for testens skyld:

procedure TForm1.WndProc(var Message : TMessage);
begin
  if Message.LParam <> LongInt(Image1) then
    if (Message.Msg = CM_MOUSELEAVE) then
      ShowMessage(IntToStr(Message.LParam) + ' : ' + IntToStr(LongInt(Image1)));
  inherited WndProc(Message);
end;

I overstående kode bliver "Hest" vist hver gang musen forlader en control (mange gange).
Kigger man nærmere på det, vil man se at LongInt(Image1) også er forskellig fra Message.LParam, når musen forlader Image1, så det er nok i den linje fejlen ligger.

Jeg bruger Delphi 7 Personal på WinXP-Prof.-computer.
Avatar billede cms Nybegynder
11. september 2003 - 21:50 #1
Image1.Handle?
Avatar billede athlon-pascal Juniormester
11. september 2003 - 21:56 #2
Kunne jeg også forestille mig, men TImage har ingen handle (i hvert fald ikke i D7 Personal)...
Avatar billede tolderlund Nybegynder
11. september 2003 - 21:56 #3
Det skal ikke være Image1.Handle så vidt jeg kan se.
Desuden virker det godt nok når jeg prøver det.
Hest bliver fint vist adskillige (hundrede eller tusind) gange hos mig.
I øvrigt bør det være:
  protected  // ikke private
    procedure WndProc(var Message : TMessage); override;
På det foreliggende grundlag, på nuværende tidspunkt, kan jeg med sikkerhed sige, at der ikke er information nok til at sige hvorfor det ikke virker hos dig.
Avatar billede tolderlund Nybegynder
11. september 2003 - 21:57 #4
TImage har ikke en handle da det ikke er en TWinControl.
Avatar billede athlon-pascal Juniormester
11. september 2003 - 21:58 #5
Tolderlund -> Det er vel det øverste, og ikke følgende, du prøvede?

procedure TForm1.WndProc(var Message : TMessage);
begin
  if Message.LParam <> LongInt(Image1) then
    if (Message.Msg = CM_MOUSELEAVE) then
      ShowMessage(IntToStr(Message.LParam) + ' : ' + IntToStr(LongInt(Image1)));
  inherited WndProc(Message);
end;

Det er nemlig _ikke_ den kode der ikke virker, det var bare en test...
Avatar billede tolderlund Nybegynder
11. september 2003 - 22:02 #6
Det var den øverste jeg prøvede og den virkede fint.
Kunne du så ikke lige fortælle hvad det er du gerne vil, så vi ikke skal gætte?
Avatar billede athlon-pascal Juniormester
11. september 2003 - 22:07 #7
tolderlund -> Jeg vil bare gerne køre noget kode når min mus forlader Image1.
Avatar billede athlon-pascal Juniormester
11. september 2003 - 22:12 #8
Kan det have betydning at min TImage er på en TTabSheet, der så igen er på en TPageControl?
Avatar billede tolderlund Nybegynder
11. september 2003 - 22:21 #9
Jeg tror ikke at TPageControl/TTabSheet har nogen betydning.
Men det er meget nemt det du vil.
Smid din TForm1.WndProc væk og prøv i stedet følgende:
Nedarvning fra TImage og til en overrided TImage.WndProc procedure og lave din CM_MOUSELEAVE test i den.
Således:
type
  TImage = class(ExtCtrls.TImage)
  protected
    procedure WndProc(var Message : TMessage); override;
  end;

type
  TForm1 = class(TForm)

og i implementation:

procedure TImage.WndProc(var Message: TMessage);
begin
  if (Message.Msg = CM_MOUSELEAVE) then
    GetParentForm(Self).Caption := IntToStr(GetTickCount);  // din kode her
  inherited;
end;
Avatar billede athlon-pascal Juniormester
11. september 2003 - 22:23 #10
Tolderlund -> Problemet er bare at jeg helst vil undgå at lave en ny komponent.
Avatar billede tolderlund Nybegynder
11. september 2003 - 22:25 #11
Hvis du nu bare gør som jeg fortæller dig ...
Du laver ikke en ny komponent.
Det er blot en nedarvning i koden.
Avatar billede athlon-pascal Juniormester
11. september 2003 - 22:36 #12
OK :-
Avatar billede athlon-pascal Juniormester
11. september 2003 - 22:36 #13
Det virker jo faktisk.
Tak for hjælpen :-)
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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging