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 Images nutzen eine mouseover-proz.! Geht das? (https://www.delphipraxis.net/15179-images-nutzen-eine-mouseover-proz-geht-das.html)

maximi 23. Jan 2004 12:45


Images nutzen eine mouseover-proz.! Geht das?
 
Hallo!

Delphi-Quellcode:
   for i := 0 to 20 do
   begin
     Image[i] := TImage.Create(self);
     Image[i].Parent := parent;
     Image[i].onmousemove := menuskinmousenter(msg(?????))
   end;
Delphi-Quellcode:
procedure Tmenuskin.menuskinonmousenter(var msg : tmessage;;sender:TObject); message cm_mouseenter;
var i:Integer;
begin
  //Quellcode

    inherited;
end;
Also ich hab da einige Fehler im Quellcode. Vielleicht kann mir ja jemand helfen??

Danke

scp 23. Jan 2004 13:33

Re: Images nutzen eine mouseover-proz.! Geht das?
 
Du musst eine neue Klasse von TImage ableiten:

Delphi-Quellcode:
interface

// ...

type
  TMyImage = class(TImage)
  private
    procedure menuskinonmousenter(var msg : tmessage); message cm_mouseenter;
  end;

// ...

implementation

// ...

procedure TMyImage.menuskinonmousenter(var msg : tmessage);
begin
  //Quellcode

  inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   for i := 0 to 20 do
   begin
     Image[i] := TMyImage.Create(self);
     Image[i].Parent := parent; // Hier müsste eigentlich auch self stehen,
                                // Aber ich weis ja nicht wie der Rest deines Codes aussieht
   end;
end;

maximi 23. Jan 2004 13:58

Re: Images nutzen eine mouseover-proz.! Geht das?
 
Zitat:

Du musst eine neue Klasse von TImage ableiten:
Das ist mir schon klar. Das hab ich auch.
Jedem Image weise ich eine imagemousemove ereignis zu, aber
1. weiß ich nicht welchen parameter ich bei msg und
2. siehe punkt 1.
:-D

Danke

Phoenix 23. Jan 2004 14:01

Re: Images nutzen eine mouseover-proz.! Geht das?
 
Keinen. Onmousemove ist ein event und gibt daher den parameter vor. Die Methode lässt sich nur auf andere Methoden umbiegen, die sowieso die gleichen Parameter haben.

scp 23. Jan 2004 14:45

Re: Images nutzen eine mouseover-proz.! Geht das?
 
Zitat:

Zitat von maximi
Das ist mir schon klar. Das hab ich auch.
Jedem Image weise ich eine imagemousemove ereignis zu, aber
1. weiß ich nicht welchen parameter ich bei msg und
2. siehe punkt 1.
:-D

Danke

Um weitere Verständnis-Probleme aus dem Weg zu schaffen:
1. Welches Eregnis willst du jetzt behandeln? OnMouseMove oder cm_mouseenter??
2. Welchen Code möchtest du dann während der Behandlung des Eregnisses ausführen?

DataCool 23. Jan 2004 18:10

Re: Images nutzen eine mouseover-proz.! Geht das?
 
Hi,

wo ist das Problem ?

Warum wollt Ihr erst eine neue Klasse erstellen ?

Ich würde das so machen :

Code:
  // innnerhalb der Mainform folgende Procedure Deklarieren(nicht in Private)
  procedure MouseMoveOnImages(Sender: TObject; Shift: TShiftState; X, Y: Integer);
und bei erzeugen der Images folgendes :

Code:
 for i := 0 to 20 do
   begin
     Image[i] := TImage.Create(self);
     Image[i].Parent := parent;
     Image[i].onmousemove := MouseMoveOnImages;
   end;
die Procedure könnte dann so aussehen :

Code:
procedure MouseMoveOnImages(Sender: TObject; Shift: TShiftState; X, Y: Integer);
Var aktImg : TImage;
begin
  if Sender is not TImage then exit;
  aktImage := TImage(SEnder);
  / so und jetzt was Du mit dem Image machen willst
end;
Oder habe ich euch falsch verstanden ?

Gruß Data

SirThornberry 23. Jan 2004 18:18

Re: Images nutzen eine mouseover-proz.! Geht das?
 
unit mit mouseenter und mouseleave ergeignis für timage und tbutton. Hätte die zwar lieber als anhang dran gepackt aber da kommt immer ne accessviolation
Delphi-Quellcode:
unit ELButton;

interface

uses StdCtrls, classes, Messages, controls, ExtCtrls;

type
  TELButton = class(TButton)
  private
    FOnMouseEnter: TNotifyEvent;
    FOnMouseLeave: TNotifyEvent;
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  published
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;

  TELImage = class(TImage)
  private
    FOnMouseEnter: TNotifyEvent;
    FOnMouseLeave: TNotifyEvent;
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  published
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;

  procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('ESFEB', [TELButton, TELImage]);
end;

procedure TELButton.CMMouseEnter(var Msg: TMessage);
begin
  if Enabled and Assigned(fOnMouseEnter) then fOnMouseEnter(Self);
end;

procedure TELButton.CMMouseLeave(var Msg: TMessage);
begin
  if Enabled and Assigned(fOnMouseLeave) then fOnMouseLeave(Self);
end;

procedure TELImage.CMMouseEnter(var Msg: TMessage);
begin
  if Enabled and Assigned(fOnMouseEnter) then fOnMouseEnter(Self);
end;

procedure TELImage.CMMouseLeave(var Msg: TMessage);
begin
  if Enabled and Assigned(fOnMouseLeave) then fOnMouseLeave(Self);
end;


end.

Jens Schumann 23. Jan 2004 20:12

Re: Images nutzen eine mouseover-proz.! Geht das?
 
Hallo SirThornberry,
ist Dir schon aufgefallen das Deine Komponenten die Ereignisse auch feuern wenn Enabled auf False steht ?

SirThornberry 23. Jan 2004 22:36

Re: Images nutzen eine mouseover-proz.! Geht das?
 
ist mir noch nicht aufgefallen. Danke für den Hinweis, werdsch mal mit abändern.


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