Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TImage --> OnMouseLeave (https://www.delphipraxis.net/98021-timage-onmouseleave.html)

Störtebeker 20. Aug 2007 23:13


TImage --> OnMouseLeave
 
Hallo,

ich hatte mir zufällig irgendwo die WINDOWS Vista Caption Button runtergeladen - einmal "Active" & "Inactive" - und dachte mir, die zusammen mit bsNone in mein Projekt mit einzubinden.

:arrow: ABER:

TImage bietet mir leider ledeglich ein OnMouseMove und kein OnMouseLeave Ereignis an. Folgendes hatte ich eigentlich vor:

Ich setzt auf die Form das "Inactive" Bild und gebe dem OnMouseMove Ereignis den Befehl das Bild in das "Active"-Bild zu wechseln. Aber es muss natürlich auch rückwürkend funktinieren, da ja der Button bei WINDOWS auch nicht immer aktiv is, wenn man einmal mit der Maus drüberfährt. Kennt Ihr ne kostenlose Image-Komponente, die PNG unterstützt und ein "vorgefertigtes" OnMouseLeave Ereignis hat?

Wenn nicht, vielleicht könnt Ihr mir helfen, dem normalen TImage das Ereignis schmackhaft zu machen.

Ach ja ... hätte ich fast vergessen:

Was muss ich denn für einen Imagewechsel dem Ereignis zuweisen:

Delphi-Quellcode:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
TImage1.load=("....PNG");
end;

end.
Der Quellcode ist bestimmt falsch in seiner Art, oder? :oops: :oops:

Thx.

mfG
Störtebeker

P.S.: Hoffe, der Text ist nicht allzukompliziert.

Luckie 20. Aug 2007 23:18

Re: TImage --> OnMouseLeave
 
Und wieder schlägt ganz unerwartet und überraschend die Suche zu: http://www.delphipraxis.net/internal...ghlight=timage
Den Bug habe ich mittlerweile behoben. Der Code ist allerdings in der Firma. Da komme ich frühstens am Donnerstag dran.

Störtebeker 20. Aug 2007 23:29

Re: TImage --> OnMouseLeave
 
Also, irgendwie lässt sich das Teil nicht installieren.

Delphi kommt dann immer mit:

Zitat:

Error in module Unit1: Declaration of class TForm1 is missing or incorrect.
Muss sagen, dass ich den Quelltext einfach kopiert habe. Gibt es einen bestimmten Punkt, wo ich das Ding einsetzen muss?

Störtebeker 21. Aug 2007 10:55

Re: TImage --> OnMouseLeave
 
Habe mal in der Suche weiter gesucht und einen code von den Schweizern gefunden:

Delphi-Quellcode:
{
 Folgende unit ist eine visuelle Komponente abgeleitet von TImage, welche
 zusätzlich die 2 Ereignisse OnMouseEnter und OnMouseLeave beinhaltet.
}

{
 The following unit is a visual component inherited of TImage, which has the
 2 additional events OnMouseEnter and OnMouseLeave.
}

unit ImageEx;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TImageEx = class (TImage)
  private
    { Private declarations }
    FOnMouseLeave: TNotifyEvent;
    FOnMouseEnter: TNotifyEvent;
    procedure CMMouseEnter(var msg: TMessage);
      message CM_MOUSEENTER;
    procedure CMMouseLeave(var msg: TMessage);
      message CM_MOUSELEAVE;
  protected
    { Protected declarations }
    procedure DoMouseEnter; dynamic;
    procedure DoMouseLeave; dynamic;
  public
    { Public declarations }
  published
    { Published declarations }
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Additional', [TImageEx]);
end;

{ TImageEx }

procedure TImageEx.CMMouseEnter(var msg: TMessage);
begin
  DoMouseEnter;
end;

procedure TImageEx.CMMouseLeave(var msg: TMessage);
begin
  DoMouseLeave;
end;

procedure TImageEx.DoMouseEnter;
begin
  if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;

procedure TImageEx.DoMouseLeave;
begin
  if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;

end.
Copyright © by SwissDelphiCenter.ch


kommt Delphi auch mit:
Zitat:

Error in module Unit1: Declaration of class TForm1 is missing or incorrect.
Ändere ich den Quelltext folgendermaßen: Füge unter Types: Form1 = class (TForm) hinzu:

Delphi-Quellcode:
{
 Folgende unit ist eine visuelle Komponente abgeleitet von TImage, welche
 zusätzlich die 2 Ereignisse OnMouseEnter und OnMouseLeave beinhaltet.
}

{
 The following unit is a visual component inherited of TImage, which has the
 2 additional events OnMouseEnter and OnMouseLeave.
}

unit ImageEx;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  Form1 = class (TForm)
  TImageEx = class (TImage)
  private
    { Private declarations }
    FOnMouseLeave: TNotifyEvent;
    FOnMouseEnter: TNotifyEvent;
    procedure CMMouseEnter(var msg: TMessage);
      message CM_MOUSEENTER;
    procedure CMMouseLeave(var msg: TMessage);
      message CM_MOUSELEAVE;
  protected
    { Protected declarations }
    procedure DoMouseEnter; dynamic;
    procedure DoMouseLeave; dynamic;
  public
    { Public declarations }
  published
    { Published declarations }
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Additional', [TImageEx]);
end;

{ TImageEx }

procedure TImageEx.CMMouseEnter(var msg: TMessage);
begin
  DoMouseEnter;
end;

procedure TImageEx.CMMouseLeave(var msg: TMessage);
begin
  DoMouseLeave;
end;

procedure TImageEx.DoMouseEnter;
begin
  if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;

procedure TImageEx.DoMouseLeave;
begin
  if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;

end.
meckert Delphi im Bereich "TImageEx = class (TImage)" mit:
Zitat:

Expected ':' but '=' found
und ich weiß zum einen nicht, was Delphi jetzt von mir will, weil ein = ist ja da und wo das : hin muss sagt Delphi mir ja auch nicht und des weiteren bin ich mir auch nicht ganz sicher, ob ich jetzt einfach ein neues Dokument öffnen kann und dahin den Code einfach kopieren kann. Weil ich habe nicht ganz so viel Ahnung, vom Einbinden von aus dem Internet stammenden Units, ging bisher alles über Komponente installieren, aber da es sich ja nicht um eine neue Komponente handelt, sondern ledeglich um eine Erweiterung.

mfG
Störtebeker

DeddyH 21. Aug 2007 11:14

Re: TImage --> OnMouseLeave
 
Zitat:

Error in module Unit1
Wieso änderst Du dann die Unit ImageEx?

Störtebeker 21. Aug 2007 11:26

Re: TImage --> OnMouseLeave
 
Naja, ich muss doch den Queeltext irgendwie in mein Delphi integrieren. Und ich dachte halt ich öffne ne neue Unit --> Unit1 und kopiere dahin den Text. Wie gesagt, ich habe noch nicht soviel Erfahrung mit dem Einfügen von "fremden" Units.

Wie muss ich das denn machen?

stahli 21. Aug 2007 11:44

Re: TImage --> OnMouseLeave
 
Hallo Störtebecker,

die unit Forms kannst Du möglicherweise entfernen (wenn nicht eine benutzte Eigenschaft diese benötigt). Dann müsstest Du vermutlich den Ordner der Unit Forms sicher noch in die zu durchsuchenden Ordner aufnehmen, damit der Compiler diese Unit auch findet...

Nach Deiner Deklaration von Form1 fehlt ein Semikolon. Diese Deklaration ist aber ohnehin unnötig.

Die Komponente kannst Du dann in Deinem Projekt zur Laufzeit erzeugen. Um sie in die IDE einzufügen musst Du sie installieren. In der Prozedur "Register" steht, wo sie dann aufzufinden ist.


Stahli

Nachtrag:
Hab in der Eile übersehen:
"Error in module Unit1: Declaration of class TForm1 is missing or incorrect."
Muß wohl aus Deiner eigenen Unit stammen - nicht aus der ImageEx...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 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