MouseWheelUp/Down
-
- Beiträge: 27
- Registriert: Mo 11. Jun 2007, 10:12
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
MouseWheelUp/Down
Hallo
Ich benötige das MouseWheelUp/Down Ereignis in einer Komponente. Nun habe ich dieses Ereignis nur auf dem Form gefunden. Dort funktioniert es auch, aber wenn ich mich mit dem Mauszeiger auf einer Komponente z.B. Label befinde, geht es nicht mehr, da diese Komponente kein MouseWheelUp/Down Ereignis kennt. Gibt es einen Weg, es überall z.B. auf pagecontrol und tabsheet zubenutzen.
Gruß Bernd
Lazarus 0.9.26
Ich benötige das MouseWheelUp/Down Ereignis in einer Komponente. Nun habe ich dieses Ereignis nur auf dem Form gefunden. Dort funktioniert es auch, aber wenn ich mich mit dem Mauszeiger auf einer Komponente z.B. Label befinde, geht es nicht mehr, da diese Komponente kein MouseWheelUp/Down Ereignis kennt. Gibt es einen Weg, es überall z.B. auf pagecontrol und tabsheet zubenutzen.
Gruß Bernd
Lazarus 0.9.26
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: MouseWheelUp/Down
Wenns nicht anders geht...wieso nicht Mausposition auswerten, ob sie sich über der Komponente befindet und ansonsten unterdrücken?
Johannes
Re: MouseWheelUp/Down
Kommt halt drauf an was du machen willst.
Prinzipiell ist das MouseWheel Zeug bereits in TControl drin und zum überschreiben bereit.
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; dynamic;
function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; dynamic;
function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; dynamic;
Es kann aber gut sein, dass bei gewissen Controls das Widgetset das Event "schluckt". Müsste man halt mit abgeleiteten Klassen ausprobieren.
Prinzipiell ist das MouseWheel Zeug bereits in TControl drin und zum überschreiben bereit.
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; dynamic;
function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; dynamic;
function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; dynamic;
Es kann aber gut sein, dass bei gewissen Controls das Widgetset das Event "schluckt". Müsste man halt mit abgeleiteten Klassen ausprobieren.
-
- Beiträge: 27
- Registriert: Mo 11. Jun 2007, 10:12
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: MouseWheelUp/Down
Danke für die Bestätigung, dass es nicht so einfach geht. Ich möchte mehre Zahlenfelder mit dem Mausscrollrad erhöhen/vermindern, wenn ich mit dem Mauszeiger auf dem Feld stehe. Ist mehr eine technische Bedienhilfe in einem Programm, welches ein Messgerät steuert.
Ich hatte das Mousewheel Ereignis vom Form benutzt, aber wenn der Mauszeiger auf einer anderen Komponente steht passiert eben gar nichts, nur wenn er ins Form selbst zeigt wird es angesprungen. Ich dachte erst an so eine Art "Durchreiche", kann mir aber nicht vorstellen wie das gehen soll
Ich versuche mal eine Komponete zu bauen, die von TControl abgeleitet ist und so etwas kann. Danke theo für den Hinweis, bin nur Hobbyprogrammierer in dieser Sache und überblicke nicht alle Zusammenhänge.
Stelle meine Lösung dann hier rein.
Bernd
Ich hatte das Mousewheel Ereignis vom Form benutzt, aber wenn der Mauszeiger auf einer anderen Komponente steht passiert eben gar nichts, nur wenn er ins Form selbst zeigt wird es angesprungen. Ich dachte erst an so eine Art "Durchreiche", kann mir aber nicht vorstellen wie das gehen soll

Ich versuche mal eine Komponete zu bauen, die von TControl abgeleitet ist und so etwas kann. Danke theo für den Hinweis, bin nur Hobbyprogrammierer in dieser Sache und überblicke nicht alle Zusammenhänge.
Stelle meine Lösung dann hier rein.
Bernd
Re: MouseWheelUp/Down
Du brauchst nicht bei Adam und Eva anfangen. Das reicht z.B. völlig um ein Label mit MW Events zu kriegen:Bernd hat geschrieben: Ich versuche mal eine Komponete zu bauen, die von TControl abgeleitet ist und so etwas kann.
Code: Alles auswählen
TWheelLabel=class(TLabel)
protected
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override;
function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
end;
implementation
...
-
- Beiträge: 27
- Registriert: Mo 11. Jun 2007, 10:12
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: MouseWheelUp/Down
Hallo,
Entschuldigung, war ein paar Tage nicht da und kann das Thema heute erst wieder aufgreifen.
Ich hatte gerade meine Nase in die Bücher/Internet gesteckt und wollte dem Hinweis von theo nachgehen und bei "Adam und Eva" anfangen. Nun habe ich den letzten Eintrag von theo gelesen. Das sieht natürlich viel einfacher aus, ich will aber nicht nur mein Problem lösen sondern auch was lernen.
Nun habe ich aber ein großes Verständnisproblem bei der ganzen Vererbungsgeschichte.
Meine bisherige Annahme war, dass eine Klasse, die von einer anderen Klasse abgeleitet wird auch alle Eigenschaften erbt. Die Klasse TLabel wird aber auch von TControl ( über TGraphicControl -> TCustomLabel -> TLabel ) abgeleitet. Eigentlich müsste Sie die Eigenschaft OnMouseWheelUp usw. doch auch besitzen? Oder ist die "Erbschaft" irgentwo verloren gegangen. Sichtbar sind sie aber nicht mehr, können aber durch Funktionen aus den letzten Beitrag "überschrieben" werden. Da bin ich im Moment etwas durcheinander
Nun habe ich, wie theo vorschlägt, die neue Klasse TWheelLabel erzeugt und dem Form mitgegeben. Der Compiler hat nichts dagegen und übersetzt es auch ordentlich aber das Label wird beim Programmlauf nicht sichtbar. Da habe ich wohl noch etwas übersehen.
Gruß Bernd
Entschuldigung, war ein paar Tage nicht da und kann das Thema heute erst wieder aufgreifen.
Ich hatte gerade meine Nase in die Bücher/Internet gesteckt und wollte dem Hinweis von theo nachgehen und bei "Adam und Eva" anfangen. Nun habe ich den letzten Eintrag von theo gelesen. Das sieht natürlich viel einfacher aus, ich will aber nicht nur mein Problem lösen sondern auch was lernen.
Nun habe ich aber ein großes Verständnisproblem bei der ganzen Vererbungsgeschichte.
Meine bisherige Annahme war, dass eine Klasse, die von einer anderen Klasse abgeleitet wird auch alle Eigenschaften erbt. Die Klasse TLabel wird aber auch von TControl ( über TGraphicControl -> TCustomLabel -> TLabel ) abgeleitet. Eigentlich müsste Sie die Eigenschaft OnMouseWheelUp usw. doch auch besitzen? Oder ist die "Erbschaft" irgentwo verloren gegangen. Sichtbar sind sie aber nicht mehr, können aber durch Funktionen aus den letzten Beitrag "überschrieben" werden. Da bin ich im Moment etwas durcheinander

Nun habe ich, wie theo vorschlägt, die neue Klasse TWheelLabel erzeugt und dem Form mitgegeben. Der Compiler hat nichts dagegen und übersetzt es auch ordentlich aber das Label wird beim Programmlauf nicht sichtbar. Da habe ich wohl noch etwas übersehen.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
TWheelLabel=class(TLabel)
protected
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override;
function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
end;
var
Form1 : TForm1;
wl : TWheelLabel;
implementation
{ TForm1 }
function TWheelLabel.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean;
begin
end;
function TWheelLabel.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
end;
function TWheelLabel.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
wl := TWheelLabel.Create(form1);
wl.Top:= 10;
wl.Left:= 10;
wl.Caption:= 'Wheeltest';
wl.Visible:=true;
end;
initialization
{$I unit1.lrs}
end.
Gruß Bernd
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: MouseWheelUp/Down
Die kindklasse erbt auch alle Eigenschaften sie müssen nur nicht sichtbar sein was Theo in seinem beispiel macht ist ja nir sie wieder sichtbar zu machen...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 27
- Registriert: Mo 11. Jun 2007, 10:12
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: MouseWheelUp/Down
OK, da muss ich noch mal nachlesen. Habe jetzt so eine ungefähre Ahnung.
Etwas ist mir noch unklar. Wenn ich eine neue Klasse wie z.B. diese TE erzeuge, bekomme ich sie im Form1 nicht zu sehen.
Es fehlt also noch was Wichtiges
Bernd
Etwas ist mir noch unklar. Wenn ich eine neue Klasse wie z.B. diese TE erzeuge, bekomme ich sie im Form1 nicht zu sehen.
Code: Alles auswählen
TE = class(TEdit);
var
Form1 : TForm1;
nE : TE;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
nE := TE.Create(Form1);
nE.Top:= 30;
nE.Left:=10;
nE.Visible:=true;
nE.AutoSize:=true;
end;
Bernd
Re: MouseWheelUp/Down
Parent setzen.Bernd hat geschrieben: Es fehlt also noch was Wichtiges
ne.Parent:=Form1;
Sonst weiss es nicht wohin es gehört.
Create(Form1) sagt nur, wer für die Speicherfreigabe zuständig ist.
Zuletzt geändert von theo am Mo 26. Jan 2009, 11:43, insgesamt 1-mal geändert.
Re: MouseWheelUp/Down
Christian hat geschrieben:Die kindklasse erbt auch alle Eigenschaften sie müssen nur nicht sichtbar sein was Theo in seinem beispiel macht ist ja nir sie wieder sichtbar zu machen...
Durch die Ableitung erhalte ich Zugriff auf die Proteced Methoden welche von TControl geerbt wurden.
Ein Event (welches ich im OI sehe) ist das aber immer noch nicht. Dieses müsste man erst zur Verfügung stellen.
http://www.delphi-treff.de/tutorials/ob ... rs/page/8/" onclick="window.open(this.href);return false;
Ich sehe grad: Es geht auch anders: Es sind sogar die Properties in TControl schon da, nur halt protected:
Code: Alles auswählen
property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel;
property OnMouseWheelDown: TMouseWheelUpDownEvent read FOnMouseWheelDown write FOnMouseWheelDown;
property OnMouseWheelUp: TMouseWheelUpDownEvent read FOnMouseWheelUp write FOnMouseWheelUp;
Code: Alles auswählen
TWheelLabel=class(TLabel)
published
property OnMouseWheel;
property OnMouseWheelDown;
property OnMouseWheelUp:
end;
Wenn du die Komponente aber nicht installieren willst, ist die erste Variante praktischer.