Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern (https://www.delphipraxis.net/118553-problem-mit-buttons-onmouseenter-alle-buttons-glaentzern.html)

Praxist 10. Aug 2008 17:53

Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
 
Es geht mit dem Vorschlag. Sollen aber alle BitBtns den selben Effekt haben ?
Wenn ich den Effekt für ein bestimtes Button zuweise, bekomme ich Fehler:
Undeclared BitBtn1 !
Delphi-Quellcode:
Bitbtn1.Font.Style := Bitbtn1.Font.Style + [fsBold];

DeddyH 10. Aug 2008 18:02

Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
 
Da muss man etwas weiter ausholen:
Delphi-Quellcode:
unit bla;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type

  TBitBtn = class(Buttons.TBitBtn)
  private
    FOnMouseEnter: TNotifyEvent;
    FOnMouseLeave: TNotifyEvent;
    procedure CMMOUSEENTER(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMOUSELEAVE(var Msg: TMessage); message CM_MOUSELEAVE;
  public
    constructor Create(aOwner: TComponent); override;
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;

  TForm1 = class(TForm)
    btn1: TBitBtn;
    btn2: TBitBtn;
    btn3: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure DoOnEnter(Sender: TObject);
    procedure DoOnLeave(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TBitBtn }

procedure TBitBtn.CMMOUSEENTER(var Msg: TMessage);
begin
  inherited;
  if Assigned(FOnMouseEnter) then
    FOnMouseEnter(Self);
end;

procedure TBitBtn.CMMOUSELEAVE(var Msg: TMessage);
begin
  inherited;
  if Assigned(FOnMouseLeave) then
    FOnMouseLeave(Self);
end;

constructor TBitBtn.Create(aOwner: TComponent);
begin
  inherited;
  FOnMouseEnter := nil;
  FOnMouseLeave := nil;
end;

procedure TForm1.DoOnEnter(Sender: TObject);
begin
  (Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style + [fsBold];
end;

procedure TForm1.DoOnLeave(Sender: TObject);
begin
  (Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style - [fsBold];
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  btn2.OnMouseEnter := DoOnEnter;
  btn2.OnMouseLeave := DoOnLeave;
end;

end.
Hier werden die beiden definierten Events nur für btn2 zugewiesen.

Praxist 10. Aug 2008 18:28

Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
 
Wie konnte ich für ein bestimmtes Btn ein bestimmtes Bild zuweisen ?
Delphi-Quellcode:
ImageList1.GetBitmap(2, Btn2.Glyph);

DeddyH 10. Aug 2008 18:31

Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
 
Schau Dir in meinem Beispiel mal DoOnEnter und DoOnLeave an. Statt die Schriftart zu ändern, kannst Du dort auch andere Bilder zuweisen.

Praxist 10. Aug 2008 19:15

Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
 
dort habe folgendes eingegeben
Delphi-Quellcode:
procedure TForm1.DoOnEnter(Sender: TObject);
begin
  //(Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style + [fsBold];
  ImageList1.GetBitmap(1, Btn1.Glyph);
  ImageList1.GetBitmap(2, Btn2.Glyph);
end;
Aber die Bilder werden in alle Buttons angezeigt, wenn der Cursor auf ein Button kommt
Das Bild soll aber nur angezeigt, wenn der der Cursor auf sein Button kommt
Wie kann ich das machen ?
Vorteil mit diesem Code die Buttons glitzern nicht : )

DeddyH 10. Aug 2008 19:18

Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
 
Es kommt mir ein wenig so vor, als hättest Du das Prinzip nicht verstanden :gruebel:, oder wieso stehen da benannte Instanzen (Btn2 und Btn2)?

Praxist 10. Aug 2008 19:26

Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
 
Nicht ganz

TonyR 10. Aug 2008 21:04

Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
 
Also Praxist,

schau noch einmal in Beitrag #12 (hier nur ein Auszug mit Erläuterungen):
Delphi-Quellcode:
...
procedure TForm1.DoOnEnter(Sender: TObject);
begin
  //(Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style + [fsBold];
  //das brauchst du nicht, vielmehr folgendes:
  ImageList1.GetBitmap(1, (Sender as TBitBtn).Glyph);
end;

procedure TForm1.DoOnLeave(Sender: TObject);
begin
  //(Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style - [fsBold];
  //hier genau dasselbe nur eben das andere Bildchen
  //ich weiß ja jetzt nicht welches, aber ungefähr so eben:
  ImageList1.GetBitmap(2, (Sender as TBitBtn).Glyph);  
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //und hier ist es ganz wichtig, dass du für alle
  //Bitbtns Enter und Leave zuweist!

  //also nicht nur
  btn2.OnMouseEnter := DoOnEnter;
  btn2.OnMouseLeave := DoOnLeave;

  //sondern auch:
  btn1.OnMouseEnter := DoOnEnter;
  btn1.OnMouseLeave := DoOnLeave;

  //wenn das zu viele Komponenten sind dann
  //verwende eine Schleife die alle Komponenten durchläuft
  //und es den Bitbtns zuweist,
  //das gehört dann aber nicht in diesen Thread
end;

end.
Ich hoffe das hilft, sieh es dir genau an.

Praxist 10. Aug 2008 21:59

Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
 
Du hast auch das Button nicht hingeschrieben !
Delphi-Quellcode:
  //das brauchst du nicht, vielmehr folgendes:
  ImageList1.GetBitmap(1, (Sender as TBitBtn).Glyph); // für welches Button ?

TonyR 10. Aug 2008 22:02

Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
 
Zitat:

Zitat von Praxist
Du hast auch das Button nicht hingeschrieben !
Delphi-Quellcode:
  //das brauchst du nicht, vielmehr folgendes:
  ImageList1.GetBitmap(1, (Sender as TBitBtn).Glyph); // für welches Button ?

Das bestimmt der Sender, welcher Button das ist,
hast du den Code mal so probiert?
Vielleicht funktioniert es!?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr.
Seite 2 von 4     12 34      

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