Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi JvItemsPanel1 OnMouseMove + OnMouseLeave (https://www.delphipraxis.net/133841-jvitemspanel1-onmousemove-onmouseleave.html)

youuu 10. Mai 2009 14:54


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.

youuu 10. Mai 2009 15:16

Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
 
Ich habe es sehr unelegant lösen können, aber das muss es doch etwas besseres geben?

Delphi-Quellcode:
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;
Das viele Visible kommt daher, dass ansonsten das Image hinter dem Panel liegt, da das Image später sichtbar gemacht wird als der Panel.

lbccaleb 10. Mai 2009 15:29

Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
 
Leite die Komponente ab, und reagiere auf die folgenden Windows Messages:

MSDN-Library durchsuchenWM_MOUSELEAVE
MSDN-Library durchsuchenWM_MOUSEMOVE

Damit solltest du den gewünschten Effekt ausführen können!

youuu 10. Mai 2009 15:40

Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
 
Habe dazu dieses Beipsiel gefunden

Delphi-Quellcode:
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.
Allerdings verstehe ich nicht wie Delphi weiß für welchen Panel dies gültig ist.
Kann mir jemand das erklären?

Habe bislang noch nie soetwas machen müssen.

lbccaleb 10. Mai 2009 15:48

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!

youuu 10. Mai 2009 16:50

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:
TJvItemsPanel.CMMouseLeave(var Message: TMessage);
Ist schon nicht korrekt

DeddyH 10. Mai 2009 17:00

Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
 
Du sollst ja auch von TJvItemsPanel ableiten:
Delphi-Quellcode:
type
  tMousepanel = class(TJvItemsPanel)

quendolineDD 10. Mai 2009 17:01

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.

youuu 10. Mai 2009 17:06

Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
 
Zitat:

Zitat von DeddyH
Du sollst ja auch von TJvItemsPanel ableiten:
Delphi-Quellcode:
type
  tMousepanel = class(TJvItemsPanel)

Achso.
Ich habe es so verstanden, das tmouspanel der neue panel ist und von TPanel abgeleitet wird.
Da ich tMousepanel nicht kenne.

lbccaleb 10. Mai 2009 17:07

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!


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz