Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - OnMouseOver Problem
Tanrek - Fr 15.07.05 19:53
Titel: OnMouseOver Problem
also... ich habe keinen besseren titel gefunden... desswegen bitte nicht böse sein, wenn mein problem nicht zu 100% zutrifft.
ich habe ein image (image1) mit einem MouseOver-befehl ausgestattet... dies geschieht anhand dieses codes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TMyImg = class(TImage) private procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE; end; TForm1 = class(TForm) Button1: TButton; Image1: TImage; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private MyImg: TMyImg; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TMyImg.CMMouseEnter(var Msg: TMessage); begin inherited; Form1.Top := 0; Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'BMP1.bmp'); end;
procedure TMyImg.CMMouseLeave(var Msg: TMessage); begin inherited; Form1.Top := -150; Picture.LoadFromFile( ExtractFilePath(ParamStr(0)) + 'BMP2.bmp'); end;
procedure TForm1.FormCreate(Sender: TObject); begin MyImg := TMyImg.Create(Self); MyImg.Parent := Self; MyImg.Left := 10; MyImg.Top := 10; end;
procedure TForm1.FormDestroy(Sender: TObject); begin MyImg.Free; end;
end. |
kurze erklärung: wenn ich mit der maus über das bild gehe, ändert sich das bild und die position meiner form
bis dahin ist auch noch alles ok. das prog macht auch alles so, wies soll. ich habe auf meiner Form nun aber einen Button. das problem ist bloß, wenn ich mit der maus über den button geh, verlasse ich "indirekt" das bild (obwohl der button auf dem bild liegt) und somit ändert das programm die position meiner Form... und dann kann man den button ja schlecht drücken :(
hat da jemand vielleicht ne idee, wie ich das übgehen könnte...
ach ja... mit nem Timer währe es auch schlecht :cry:
mfg
retnyg - Fr 15.07.05 20:17
mach halt auch eine onmouseover prozedur für den button
btw. das dauernde laden eines bildes von der festplatte ist ziemlich langsam, lade das lieber aus dem speicher (bild als resource einbinden und mit loadfromresourcestring laden)
Tanrek - Fr 15.07.05 20:40
das mit der prozedur für den button machen ist etwast... na wie soll ich sagen schlecht...
ok, war mein fehler, da ich das net gesagt hab... ich habe 8 buttons, 1 listview und 3 labels... und dafür überall ne prozedur zu schrieben währe zu umständlich :?
maxk - Fr 15.07.05 22:30
Stichwort:
SENDER
Alle Buttons kriegen die gleiche Routine. In der Routine kannst du dann jedoch mit
(Sender as TButton) genau den Button ansprechen, der die Aktion ausgelöst hat (schlecht formuliert). Auf die Art, kannst du dir eine Menge Code sparen ;)
Tanrek - Sa 16.07.05 11:40
hmmm... jo, das währe auch gegangen...
ich hab das jetzt so gelöst:
ich habe um das bild ein nicht sichtbares bild gelegt, dass den mouseenterffekt hat. aber nicht den mouseleave. ändert sich nun die position der form ist es egal.
ich weiß... ist etwas blöde gelöst, aber es funktioniert :wink:
danke nochmal an alle, die mir geholfen haben!
mfg tanrek
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!