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