Delphi-PRAXiS

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!

youuu 10. Mai 2009 17:14

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?

lbccaleb 10. Mai 2009 17:40

Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
 
Ja ist es, schau dir mal die Funktion
Delphi-Quellcode:
function GetItemAt(X, Y: Integer): Integer;
an!

youuu 10. Mai 2009 17:51

Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
 
Zitat:

Zitat von lbccaleb
Ja ist es, schau dir mal die Funktion
Delphi-Quellcode:
function GetItemAt(X, Y: Integer): Integer;
an!

Super danke.

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;

lbccaleb 10. Mai 2009 17:56

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

youuu 10. Mai 2009 18:04

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

lbccaleb 10. Mai 2009 18:07

Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
 
Hast du die Suchpfade gesetzt??

youuu 10. Mai 2009 18:10

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 :(

lbccaleb 10. Mai 2009 18:17

Re: JvItemsPanel1 OnMouseMove + OnMouseLeave
 
Zitat:

Zitat von youuu
Nein, ich habe angenommen, das Delphi die selber sucht.

Musste sowas noch nie tun, daher stell ich mich auch so extrem doof an :(

Ist ja nicht so wild :lol:

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!

DeddyH 10. Mai 2009 18:19

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 :)

youuu 10. Mai 2009 18:31

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 11:38 Uhr.

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