![]() |
JvItemsPanel1 OnMouseMove + OnMouseLeave
Hi
Ich benutze JvItemsPanel mit dem Event OnMouseMove, allerdings verfügt diese Komponente anscheinend nicht über das Event OnMouseLeave. Kann mir jemand sagen wie ich dies dort einbauen könnte? Die Komponente ist für mich deshalb so wichtig, da sie beim klicken nach innen geht, so das der User auch genau sieht welches Item er angeklickt hat. |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Ich habe es sehr unelegant lösen können, aber das muss es doch etwas besseres geben?
Delphi-Quellcode:
Das viele Visible kommt daher, dass ansonsten das Image hinter dem Panel liegt, da das Image später sichtbar gemacht wird als der Panel.
procedure TFormKunden.JvTimer1Timer(Sender: TObject);
begin if FindDragTarget(Mouse.CursorPos, True)= JvItemsPanel1 then Begin if not Image then Begin JvItemspanel1.Visible := false; JvImage4.Visible := true; JvItemspanel1.Visible := true; Image := true; End; End else Begin if Image then Begin JvItemspanel1.Visible := false; JvImage4.Visible := false; JvItemspanel1.Visible := true; Image := false; End; End; end; |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Leite die Komponente ab, und reagiere auf die folgenden Windows Messages:
![]() ![]() Damit solltest du den gewünschten Effekt ausführen können! |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Habe dazu dieses Beipsiel gefunden
Delphi-Quellcode:
Allerdings verstehe ich nicht wie Delphi weiß für welchen Panel dies gültig ist.
unit Mousepanel;
interface uses Messages, SysUtils, Classes, Controls, ExtCtrls; type tMousepanel = class(TPanel) private { Private-Deklarationen } FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [tMousepanel]); end; procedure tMousepanel.CMMouseEnter(var Message: TMessage); begin if assigned(FOnMouseEnter) then FOnMouseEnter(Self); end; procedure tMousepanel.CMMouseLeave(var Message: TMessage); begin if assigned(FOnMouseLeave) then FOnMouseLeave(Self); end; end. Kann mir jemand das erklären? Habe bislang noch nie soetwas machen müssen. |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
An der stelle wird die Kompo von dem normalen Panel abgeleitet:
Delphi-Quellcode:
tMousepanel = class(TPanel)
Deine Version musst du vom JVItemsPanel ableiten! |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Kriege es einfach nicht hin.
Delphi-Quellcode:
type
TJvItemsPanel = class(TPanel); private { Private-Deklarationen } FOnMouseLeave: TNotifyEvent; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; public { Public-Deklarationen } published { Published-Deklarationen } property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; end;
Delphi-Quellcode:
procedure TFormKunden.JvItemsPanel1.CMMouseLeave(var Message: TMessage);
begin if assigned(FOnMouseLeave) then FOnMouseLeave(Self); end; Wirft er mir nur Fehler raus und kann nicht compelieren.
Delphi-Quellcode:
Ist schon nicht korrekt
TJvItemsPanel.CMMouseLeave(var Message: TMessage);
|
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Du sollst ja auch von TJvItemsPanel ableiten:
Delphi-Quellcode:
type
tMousepanel = class(TJvItemsPanel) |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Das kann auch nicht gehen. Wenn du den Fehler lesen würdest, würdest du sehen, dass die Prozedur nicht gefunden werden kann.
Erstens willst du vom TJvItemsPanel ableiten und nicht vom TPanel selbst. |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Zitat:
Ich habe es so verstanden, das tmouspanel der neue panel ist und von TPanel abgeleitet wird. Da ich tMousepanel nicht kenne. |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Liste der Anhänge anzeigen (Anzahl: 1)
HeHe^^
Ich war mal so frei, obwohl du mit deiner gefundenen Unit ja schon mehr als die halbe Miete hattest ;) Im Bsp. Projekt achte auf die Form "Caption"! Projekt mit allem drumm und drann angehängt! |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
lbccaleb ist es auch möglich noch die einzelnen Items zu unterscheiden, auf welchen die mouse nicht mehr ist und auf welchen sie ist?
|
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Ja ist es, schau dir mal die Funktion
Delphi-Quellcode:
an!
function GetItemAt(X, Y: Integer): Integer;
|
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Zitat:
Ich muss leider sagen irgendwie ist heute der Wurm bei mir drin, ich weiß nicht wieso ich mich so doof anstelle. Ich habe nun den Code in mein Programm übernommen nur es passiert rein gar nichts.
Delphi-Quellcode:
unit JvItemsPanelEvents;
interface uses Messages, SysUtils, Classes, Controls, ExtCtrls, JvExExtCtrls, JvExtComponent, JvItemsPanel; type TJvItemsPanel1 = class(TJvItemsPanel) private { Private-Deklarationen } FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TJVItemsPanel]); end; procedure TJvItemsPanel1.CMMouseEnter(var Message: TMessage); begin if assigned(FOnMouseEnter) then FOnMouseEnter(Self); end; procedure TJvItemsPanel1.CMMouseLeave(var Message: TMessage); begin if assigned(FOnMouseLeave) then FOnMouseLeave(Self); end; end.
Delphi-Quellcode:
Uses
JvItemsPanelEvents
Delphi-Quellcode:
procedure JvItemsPanel1MouseEnter(Sender: TObject);
begin Showmessage('Enter'); end; procedure JvItemsPanel1MouseLeave(Sender: TObject); begin Showmessage('Leave'); end; |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Du weißt schon das es jetzt ne neue Komponente ist, und du Sie zu deinem Delphi-Reiter hinzufügen must? Oder du erstellst Sie einzeln zur Laufzeit!
Edit: Delphi -> Component -> install Component Edit2: Wieso hast du denn die Abgeleitete Komponente umbenannt? Du hättest doch einfach die Unit aus meinem Bsp. Projekt nehmen können... |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Ja nur wie bei Delphi 2009? als ich deine Komponente installieren wollte gab es nur Fehlermeldungen.
vcljpg Package nicht gefunden z.B Das umbenennen habe ich rückgängig gemacht hatte da nur rumgetestet ;) Aber krieg die Installation nicht hin |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Hast du die Suchpfade gesetzt??
|
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Nein, ich habe angenommen, das Delphi die selber sucht.
Musste sowas noch nie tun, daher stell ich mich auch so extrem doof an :( |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Zitat:
Probier mal mit setzen der suchpfade ob er dann die kompo ordentlich erkennt, wenn ja bekommst du ja in dem Reiter "Beispiele" Das TJVOwnItemsPanel! Diese kannst du dann auf der Form plazieren, wie das alte und die Funktionen im OI auswählen! |
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
Man hätte dafür aber nicht unbedingt eine neue Komponente erstellen und installieren müssen. Aber wenn es so geht, lass es so, schließlich wollen wir Dich nicht noch mehr verwirren :)
|
Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
[DCC Fehler] OwnItemsPanelCombo.dpk(34): E2199 Die Packages 'vcljpg' und 'vclimg' enthalten beide die Unit 'jpeg'
edit: ok hat geklappt ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz