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 Neue TImage Komponente entwickeln (https://www.delphipraxis.net/8837-neue-timage-komponente-entwickeln.html)

pmc 12. Sep 2003 21:21


Neue TImage Komponente entwickeln
 
Ich möchte gerne ein Image so ändern das ich insgesamt drei bilder angeben kann und das je nach MOuse_Event eines der drei bilder angezeigt wird.

Wenn Die MAus über dem image feld ist soll bild 1 gezeigt werden
wenn die Linke maustaste gedrückt wird soll bild 2 gezeigt werden
und wenn die maus nicht über dem feld ist soll bild 3 gezeigt werden.

Kann mir da jdm weiterhelfen????

wäre nett!!

MFG PMC

Ronny Grabo 12. Sep 2003 22:54

Re: Neue TImage Komponente entwickeln
 
Das könnte man auch mit THarmFade realisieren, glaub ich.

Kannst es Dir ja mal angucken (harmfade.zip) :

Delphimania

Gruß Ronny.

Ronny Grabo 12. Sep 2003 23:25

Re: Neue TImage Komponente entwickeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habs getestet und es funktioniert mit HarmFade. Habs mal kurz zusammen gepackt und als Datei angefügt :

pmc 12. Sep 2003 23:30

Re: Neue TImage Komponente entwickeln
 
Harmfade kann ich nicht sogut gebrauchen!!!!

Ich müsste eigentlich nur wissen wie ich der property "Picture" von
TImage eine Bitmap zuweisen kann(Inerhalb einer procedure der Komponente, als nicht im späteren programm)

Also angenommen ich nenne meine neue komponente
TNewImage
dann muss ich doch irgendwie auf die vererbten properties zugreifen können.

man kann ja TImage.Picture.loadfromfile('datei.bmp');

ICh möchte das selbe machen nur eben inerhalb der komponente.

pmc 12. Sep 2003 23:36

Re: Neue TImage Komponente entwickeln
 
Hier mal mein Code :
Delphi-Quellcode:
 TBBox = class(timage)
  private
    FBBoxState : TBBoxState;
    FBitmapNormal : String;
    FBitmapOver : String;
    FBitmapClick : String;
    { Private declarations }
  protected
    procedure MouseMove(shift: TShiftState; x,y:Integer); override;
    { Protected declarations }
  public
    property BBoxState : TBBoxState read FBBoxState write FBBoxState;
    { Public declarations }
  published
    property Width;
    property BmpNormal : String read FBitmapNormal write FBitmapNormal;
    property BmpOver : String read FBitmapOver write FBitmapOver;
    property BmpClick : String read FBitmapClick write FBitmapClick;
    { Published declarations }
  end;

procedure Register;

implementation

procedure TBBox.MouseMove(shift: TShiftState; x,y:Integer);
begin
TBBox.picture.loadfromfile(FBitmapOver); (aber das funzt ja so nicht)
inherited MouseMove(shift,x,y);
end;

Ronny Grabo 13. Sep 2003 11:49

Re: Neue TImage Komponente entwickeln
 
Hallo,

Zitat:

Ich müsste eigentlich nur wissen wie ich der property "Picture" von
TImage eine Bitmap zuweisen kann(Inerhalb einer procedure der Komponente, als nicht im späteren programm)
Hier mal ein bischen Code :
Delphi-Quellcode:
    TBBox = class(timage)
    private
//    FBBoxState : TBBoxState;
    FBitmapNormal : String;
    FBitmapOver : String;
    FBitmapClick : String;
    MyPicture:TPicture;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    { Private declarations }
  protected
    procedure SetzeBild(Bild: TPicture);
    procedure MouseMove(shift: TShiftState; x,y:Integer); override;
    { Protected declarations }
  public
//    property BBoxState : TBBoxState read FBBoxState write FBBoxState;
    { Public declarations }
  published
    property Width;
    property BmpNormal : String read FBitmapNormal write FBitmapNormal;
    property BmpOver : String read FBitmapOver write FBitmapOver;
    property BmpClick : String read FBitmapClick write FBitmapClick;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TBBox]);
end;

constructor TBBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
MyPicture:=TPicture.Create;
end;

destructor TBBox.Destroy;
begin
MyPicture.Free;
inherited Destroy;
end;
procedure TBBox.SetzeBild(Bild: TPicture);
begin
MyPicture:=Bild;
Self.picture:=Bild;
end;

procedure TBBox.MouseMove(shift: TShiftState; x,y:Integer);
begin
MyPicture.LoadFromFile(FBitmapOver); //aber das funzt jetzt
SetzeBild(MyPicture);
inherited MouseMove(shift,x,y);
end;
Gruß Ronny.

pmc 13. Sep 2003 12:59

Re: Neue TImage Komponente entwickeln
 
Wie kann ich denn eine Liste machen wo ich im design modus
dann eingeben kann.
ICh will das so ähnlich machen wie bei einer FileListBox mit dem FIlter.

Z.B. Bezeichnung - Wert1 - Wert2 (als property-praktisch wie eine Stringliste)

Beispiel :
Die property soll z.b. "Koordinaten" heisen
und die liste sähe dann z.B. so aus :

BEzeichnung - X - Y
Punkt1 10 5
Punkt2 205 55
:
:
Punktn xx yy

Ronny Grabo 13. Sep 2003 14:49

Re: Neue TImage Komponente entwickeln
 
Das war die Vorgabe :
Zitat:

Ich möchte gerne ein Image so ändern das ich insgesamt drei bilder angeben kann und das je nach MOuse_Event eines der drei bilder angezeigt wird.
Jetzt hätte ich doch ganz gern gewußt in welche Richtung gegangen werden soll.

Meiner Meinung nach müssten ersteinmal MouseOver, MouseLeave und MouseEnter eingebunden werden, oder ?

Gruß Ronny.

PS: Oder ich hab´s nicht ganz geschnallt. :oops:

pmc 13. Sep 2003 15:00

Re: Neue TImage Komponente entwickeln
 
Zitat:

Zitat von Ronny Grabo
Meiner Meinung nach müssten ersteinmal MouseOver, MouseLeave und MouseEnter eingebunden werden, oder ?

Kann ich MouseLeave auch bei einer TImage Komponente Überschreiben und wenn ja wie???
Auf jeden fall müsste das BmpNormal geladen werden sobald die maus nicht mehr auf dem objekt ist.

Jetzt zum eigentlichen :
Ich brauche eine Property der ich insgesamt 7 werte zuweisen kann
(das würde ich ja eigentlich mit einem Record machen)
Delphi-Quellcode:
Eigenschft = Record
  BmpNormal : TPicture;
  BmpOver : TPicture;
  BmpClick : TPicture;
  x : Integer;
  y : Integer;
  xx : Integer;
  yy : Integer;
end;
Aber das möchte ich wie in so eine tabelle eingeben können
aber dann noch als eine Art Array.

So das bei MouseMove nach den coordinaten(x,y,xx,yy) das BmpOver geladen wird usw.

Ronny Grabo 13. Sep 2003 21:47

Re: Neue TImage Komponente entwickeln
 
Hallo,

hier die Komponente, laut Vorgabe, ohne Fehlerbehandlungen :
Delphi-Quellcode:
type
    TBBox = class(timage)
    private
    FBitmapOver : String;
    FBitmapLeave: String;
    FBitmapClick : String;
    MyPicture:TPicture;
    procedure MausRaus(var WinNachricht:TMessage);message CM_MOUSELEAVE;
    procedure MausRein(var WinNachricht:TMessage);message CM_MOUSEENTER;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    { Private declarations }
  protected
    FOnMouseEnter: TNotifyEvent;
    FOnMouseLeave:TNotifyEvent;
    FOnMouseClick: TNotifyEvent;
    procedure Click; override;
    procedure SetzeBild(Bild: TPicture);
    { Protected declarations }
  public
    { Public declarations }
  published
    property BmpOver : String read FBitmapOver write FBitmapOver;
    property BmpLeave : String read FBitmapLeave write FBitmapLeave;
    property BmpClick : String read FBitmapClick write FBitmapClick;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave
        write FOnMouseLeave;
    { Published declarations }
  end;

procedure Register;
implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TBBox]);
end;

constructor TBBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
MyPicture:=TPicture.Create;
end;

destructor TBBox.Destroy;
begin
MyPicture.Free;
inherited Destroy;
end;

procedure TBBox.SetzeBild(Bild: TPicture);
begin
MyPicture:=Bild;
Self.picture:=Bild;
end;

procedure TBBox.Click();
begin
inherited Click;
   MyPicture.LoadFromFile(FBitmapClick);
   SetzeBild(MyPicture);
end;

procedure TBBox.MausRaus(var WinNachricht:TMessage);
begin
  inherited;
  if WinNachricht.Msg=CM_MOUSELEAVE then
  MyPicture.LoadFromFile(FBitmapLeave);
  SetzeBild(MyPicture);
end;

procedure TBBox.MausRein(var WinNachricht:TMessage);
begin
  inherited;
  if WinNachricht.Msg=CM_MOUSEENTER then
  MyPicture.LoadFromFile(FBitmapOver);
  SetzeBild(MyPicture);
end;
Gruß Ronny.

Ronny Grabo 13. Sep 2003 21:56

Re: Neue TImage Komponente entwickeln
 
Zitat:

Kann ich MouseLeave auch bei einer TImage Komponente Überschreiben und wenn ja wie???
Das geht leider nicht, da diese Funktionalität weder von TImage noch von dessen Vorfahren vererbt wurden, folglich kann MouseLeave nicht überschrieben werden.

Jedoch kann man Windows Botschaften abfangen und die Funktion der TImage - Komponente dementsprechend erweitern.

Gruß Ronny.


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