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 BitBtn Button effekt (https://www.delphipraxis.net/114346-bitbtn-button-effekt.html)

Delphiturbo 23. Mai 2008 18:33


BitBtn Button effekt
 
Hallo

ich möchte mein BitBtn ein Bild bei Mousemove zuweisen
d.h. wenn ich den Cursor auf das Button lege ohne zu klicken, soll das Button sein Bild (Icon) ändern

Das BitBtn Button hat in moment 4 Bilder
1 bei normal
2. wenn deaktiviert
3. wenn angeklickt
4. bei UP

wie kann ich das Bilder (Icon) von BitBtn ändern, wenn der Cursor drauf ?

Delphi-Quellcode:
procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

end;

mkinzler 23. Mai 2008 18:37

Re: BitBtn Button effekt
 
MousEnter und MouseLeave wäre wohl geeigneter

himitsu 23. Mai 2008 18:37

Re: BitBtn Button effekt
 
am Einfachsten indem du dem Button ein anderes Bild/Bilderset zuweist.



aber die Erkennung ob die Maus wieder vom Button runter ist wird über BitBtn1MouseMove schwer zu erkennen sein.

[edit] war wohl wer schneller -.-''

Delphiturbo 23. Mai 2008 19:54

Re: BitBtn Button effekt
 
Zitat:

Zitat von mkinzler
MousEnter und MouseLeave wäre wohl geeigneter

es ist egal welche, Mouseenter oder wie ich wollte On mousemove, ..
Ich möchte wissen wie man ein Bild zuweißt
Ich habe so versucht

Delphi-Quellcode:
procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
BitBtn1.Glyph.Data:='...' // funktioniert leider nicht !

mkinzler 23. Mai 2008 19:58

Re: BitBtn Button effekt
 
In welcher Form leigen die Bilder vor?
Schau dir mal
BitBtn.Glyph.Assign();
an

Matze 23. Mai 2008 20:03

Re: BitBtn Button effekt
 
Oder nimm eine TImageList. Damit geht's auch einwandfrei:

Delphi-Quellcode:
procedure TForm1.BitBtn1MouseEnter(Sender: TObject);
begin
  BitBtn1.Glyph := nil;
  ImageList1.GetBitmap(0, BitBtn1.Glyph);
end;

procedure TForm1.BitBtn1MouseLeave(Sender: TObject);
begin
  BitBtn1.Glyph := nil;
  ImageList1.GetBitmap(1, BitBtn1.Glyph);
end;

Larsi 23. Mai 2008 20:22

Re: BitBtn Button effekt
 
Über Glyph sollte es eigentlich aber doch auch gehen?


Edit: Oh, da steht die Lösung ja :)

Delphiturbo 23. Mai 2008 23:23

Re: BitBtn Button effekt
 
Zitat:

Zitat von Larsi
Über Glyph sollte es eigentlich aber doch auch gehen?

Edit: Oh, da steht die Lösung ja :)

Aber nur in 4 Fällen
Up, Disabled,Clicked,Down mehr nicht. Wie Onmouseenter, Onmouseleave, ... nicht oder ?

Allerding
so habe ich verscuht ohne Erfolg :
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    ImageList1: TImageList;
  private
  procedure BitBtn1MouseEnter(Sender: TObject);
  procedure BitBtn1MouseLeave(Sender: TObject);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1MouseEnter(Sender: TObject);
begin
  BitBtn1.Glyph := nil;
  ImageList1.GetBitmap(0, BitBtn1.Glyph);
end;

procedure TForm1.BitBtn1MouseLeave(Sender: TObject);
begin
  BitBtn1.Glyph := nil;
  ImageList1.GetBitmap(1, BitBtn1.Glyph);
end;

end.
auch so nicht geklappt :
Delphi-Quellcode:
procedure TForm1.CMMouseEnter(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if WindowFromPoint(ptWork) = BitBtn1.Handle then
    BitBtn1.Glyph := nil;
    ImageList1.GetBitmap(2, BitBtn1.Glyph);

end;

Fussball-Robby 23. Mai 2008 23:25

Re: BitBtn Button effekt
 
Gibts nen Fehler, wird was falsches angezeigt oder passiert garnichts? Das man danach immer fragen muss :roll: Sind in der ImageList überhaupt Bilder drin?

Delphiturbo 23. Mai 2008 23:51

Re: BitBtn Button effekt
 
Es passiert nichts
kein Fehler
ListImage1 enthält natürlich Icons (mehrere)

Phoenix 23. Mai 2008 23:54

Re: BitBtn Button effekt
 
Vielleicht muss man das Neuzeichnen noch anstossen?
Ein Invalidate oder ein Repaint könnten da helfen.

Delphiturbo 24. Mai 2008 00:03

Re: BitBtn Button effekt
 
Zitat:

Zitat von Phoenix
Vielleicht muss man das Neuzeichnen noch anstossen?
Ein Invalidate oder ein Repaint könnten da helfen.

Nein. Es stimmt was mit meinem Code nicht
ich so getestet
Delphi-Quellcode:
procedure TForm1.BitBtn1MouseEnter(Sender: TObject);
begin
  //BitBtn1.Glyph := nil;
  //ImageList1.GetBitmap(0, BitBtn1.Glyph);
  Form2.Show; // es erscheint Form2 auch nicht !
end;

Die Muhkuh 24. Mai 2008 00:06

Re: BitBtn Button effekt
 
Das Ereignis ist dem BitBtn schon zugewiesen oder?

Phoenix 24. Mai 2008 00:06

Re: BitBtn Button effekt
 
Dann setz doch mal nen Breakpoint und debugge was das Programm macht. Himmel..

Das ist kein 'Testen' was Du machst, das ist 'Try & Error', und diese Vorgehensweise ist a) Unpofessionell und b) führt sie zu nichts.

Nimm Dir endlich mal zu Herzen was die Leute hier schreiben und lerne die absoluten Grundlagen wie z.B. Debuggen.

Ich würde jede Wette eingehen, der Button ist mit dem Eventcode gar nicht verdrahtet.. Du hast unter Garantie wieder nur den Code kopiert und nicht im Objektinspektor die Events verdrahtet :wall:

Delphiturbo 24. Mai 2008 00:32

Re: BitBtn Button effekt
 
Zitat:

Zitat von Die Muhkuh
Das Ereignis ist dem BitBtn schon zugewiesen oder?

Das Button hat kein Event OnMouseleave und OnmouseEnter
sondern onMove, ...
Das habe ich vorher bereit getestet und funktioniert
Es Fehlt OnMouseleave

Die Muhkuh 24. Mai 2008 00:34

Re: BitBtn Button effekt
 
Und dann wunderst Du Dich, dass es nicht funktioniert, wenn der BitBtn diese Events nicht hat? Gib mal im Profil Deine Delphi-Version an, das wäre sehr hilfreich. Weil hier in Turbo Delphi hat der die Events. Du kannst aber die Messages selbst abfangen (CM_MOUSEENTER und CM_MOUSELEAVE)

Delphiturbo 24. Mai 2008 00:55

Re: BitBtn Button effekt
 
Delphi-Quellcode:
  private
  procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}


procedure TForm1.CMMouseEnter(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if WindowFromPoint(ptWork) = BitBtn1.Handle then
    BitBtn1.Glyph := nil;
    ImageList1.GetBitmap(0, BitBtn1.Glyph);
end;

procedure TForm1.CMMouseLeave(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if WindowFromPoint(ptWork) = BitBtn1.Handle then
    BitBtn1.Glyph := nil;
    ImageList1.GetBitmap(1, BitBtn1.Glyph);
end;



end.
Das Button bekommt ein Bild wenn der Cursor auf Form kommt und nicht wenn der Cursor auf Button
Das Bild bleibt für immer das selbe, auch wenn ich den Cursor entferne !

mkinzler 24. Mai 2008 07:16

Re: BitBtn Button effekt
 
Warum zeigst du immer nur ein derart kleinen Auschnitt deines Codes? Den kannst du dann auch gleich weglassen. Regierst du auch auf den Event der richtigen Komponente?

turboPASCAL 24. Mai 2008 07:54

Re: BitBtn Button effekt
 
Mit ein wenig Geschick und der Hilfe der Delphipraxis eigenen Suchfunktion kann Man([n] / und oder Frau) durchaus fertige komponenten, fasst nach Wunsch finden.

Im Anhang ist solch eine Kompo. Diese nutzt 3 Bilder, Mouseover, Mousedown und Mouseup.

Matze 24. Mai 2008 09:55

Re: BitBtn Button effekt
 
Zitat:

Zitat von Delphiturbo
Das Button hat kein Event OnMouseleave und OnmouseEnter

Also mein TBitBtn hat diese Events. Den Code habe ich in TurboDelphi erstellt und dort funktioniert er einwandfrei.

Die Muhkuh 24. Mai 2008 10:06

Re: BitBtn Button effekt
 
Zitat:

Zitat von Matze
Zitat:

Zitat von Delphiturbo
Das Button hat kein Event OnMouseleave und OnmouseEnter

Also mein TBitBtn hat diese Events. Den Code habe ich in TurboDelphi erstellt und dort funktioniert er einwandfrei.

Delphiturbo nutzt Delphi 7. Dort gibt es diese Events noch nicht. Aber da er ja seine Version nicht im Profil angegeben hat, können wir es auch nicht wissen :roll:

Delphiturbo 24. Mai 2008 10:07

Re: BitBtn Button effekt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mkinzler
Warum zeigst du immer nur ein derart kleinen Auschnitt deines Codes? Den kannst du dann auch gleich weglassen. Regierst du auch auf den Event der richtigen Komponente?

BitBtn1 habe ich einfach mit vorhandere Delphi7 Event (OnMove und OnExit) verwendet
BitBtn2 mit Function OnMouseEnter und OnMouseLeave

Keiner funktioniert gut !

Phoenix 24. Mai 2008 10:13

Re: BitBtn Button effekt
 
Oh man.. wenn Du schon Dateien anhängst, dann bitte in einem Standard-Format. .rar kann so gut wie keiner aufmachen. .zip schon. Also das nächste mal bitten Zippen und ned raren. Viele werden ganz sicher ned nur wegen Dir ein Programm installieren nur um die Archive aufzumachen :roll:

Edit Nachtrag: Und Manuel hat es schon zweimal gesagt: Geb endlich Deine Delphi-Version im Profil an.

Matze 24. Mai 2008 10:25

Re: BitBtn Button effekt
 
Ja, die Angabe der Delphi-Version wäre wirklich sinnvoll.

Schau die den Artikel auf delphi3000.com einmal an. Dort wird beschrieben, wie man eine Komponente ableiten und die beiden Events hinzufügen kann. Bei mir funktioniert dies auch mit dem TBitBtn.

Garfield 24. Mai 2008 10:42

Re: BitBtn Button effekt
 
Zitat:

Zitat von Phoenix
Ich würde jede Wette eingehen, der Button ist mit dem Eventcode gar nicht verdrahtet.. Du hast unter Garantie wieder nur den Code kopiert und nicht im Objektinspektor die Events verdrahtet :wall:

Sehr gut möglich, denn die Deklarationen erfolgen als Private:
Zitat:

Zitat von Delphiturbo
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    ImageList1: TImageList;
  private
  procedure BitBtn1MouseEnter(Sender: TObject);
  procedure BitBtn1MouseLeave(Sender: TObject);
    { Private declarations }
  public
    { Public declarations }
  end;

Normal sieht es so aus:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1MouseEnter(Sender: TObject);
    procedure BitBtn1MouseLeave(Sender: TObject);
  private

Die Muhkuh 24. Mai 2008 10:44

Re: BitBtn Button effekt
 
Das ist egal. Solange es eine Methode ist ;)

Apollonius 24. Mai 2008 10:46

Re: BitBtn Button effekt
 
Eine Klassenmethode darf es nicht sein.

Jelly 24. Mai 2008 10:54

Re: BitBtn Button effekt
 
Zitat:

Zitat von Die Muhkuh
Das ist egal. Solange es eine Methode ist ;)

Die Methoden müssen aber auch dem Event zugeordnet sein, und nicht einfach nur deklariert/implementiert sein. Das macht Delphi automatisch, sofern man über den OI geht. Definiert wird es dann letztenendes automatisch in der .dfm Datei der Form.

Die Muhkuh 24. Mai 2008 10:57

Re: BitBtn Button effekt
 
Das ist klar. Ich bezog mich nur auf Garfield, der die Methoden verschoben hat.

Garfield 24. Mai 2008 10:59

Re: BitBtn Button effekt
 
Zitat:

Zitat von Matze
Ja, die Angabe der Delphi-Version wäre wirklich sinnvoll.

Vielleicht reicht das Lesen des ganzes Beitrages?
Zitat:

Zitat von Delphiturbo
BitBtn1 habe ich einfach mit vorhandere Delphi7 Event (OnMove und OnExit) verwendet

Zitat:

Zitat von Delphiturbo
BitBtn2 mit Function OnMouseEnter und OnMouseLeave

:gruebel: Im Source ist davon nichts zu finden:
Delphi-Quellcode:
    procedure BitBtn2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure BitBtn2Exit(Sender: TObject);
Bei D7 gibt es kein OnMouseLeave. OnMouseMove und OnExit funktionieren. Das OnExit eben nur auftritt, wenn der BitBtn den Eingabefokus verliert.
___

Nachtrag:

Zitat:

Zitat von Die Muhkuh
Das ist klar. Ich bezog mich nur auf Garfield, der die Methoden verschoben hat.

Ich habe nichts verschoben, nur Delphi 7 PE zitiert.

Garfield 24. Mai 2008 11:20

Re: BitBtn Button effekt
 
Liste der Anhänge anzeigen (Anzahl: 2)
Vielleicht so:
Delphi-Quellcode:
procedure TForm1.CMMouseLeave(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if WindowFromPoint(ptWork) <> BitBtn2.Handle
  then begin
    BitBtn2.Glyph := nil;
    ImageList1.GetBitmap(1, BitBtn2.Glyph);
  end;
end;
Zumindest ändern sich die Bildchen des BitBtn2.

Delphiturbo 24. Mai 2008 11:59

Re: BitBtn Button effekt
 
Ist das Format .7z nur für dich? Für uns bestimmt nicht!
Ich habe das Format .rar verwendet, dann bewchweren die Leute, obwohl winrar so bekannt wie winzip :mrgreen:
Was hast du gemacht!? Begin und end; hinzugefügt ?

Die Muhkuh 24. Mai 2008 12:00

Re: BitBtn Button effekt
 
Er prüft auf Ungleichheit und nicht auf Gleichheit.

DeddyH 24. Mai 2008 12:01

Re: BitBtn Button effekt
 
Und begin-end sind an der Stelle ja auch nicht verkehrt :zwinker:

Delphiturbo 24. Mai 2008 12:04

Re: BitBtn Button effekt
 
Zitat:

Zitat von Die Muhkuh
Er prüft auf Ungleichheit und nicht auf Gleichheit.

Das Problem: Das Bild ändert sich wenn der Cursor auf die Form kommt !

ich möchte diesen Effekt erreichen :
http://forum.chip.de/windows-alte-ve...irm-64654.html

Phoenix 24. Mai 2008 12:14

Re: BitBtn Button effekt
 
Was hat das eine (Hover-Effekt auf einem Button) mit dem anderen (Maximierte Anwendung auf einem anderen Monitor) zu tun?

Daniel hat Dir schonmal eindringlich klar gemacht, dass Du hier gefälligst ordentliche Fragen zu stellen hast. Solange Du das nicht lernst wird Dir hier nicht geholfen werden.

Und wegen dem Themensprung und Deiner Uneinsichtigkeit wird hier jetzt zugemacht.

Jelly 24. Mai 2008 15:39

Re: BitBtn Button effekt
 
Neben dem, was sowohl Daniel als auch Sebastian dir schon geschrieben haben, hast du IMMMER NOCH NICHT angegeben, welche Delphi Version du verwendest. Mein D2007 hat sehr wohl OnMouseEnter und OnMouseLeave Events für BitButtons. Antworte endlich mal auf konkret gestellte Fragen, wenn du schon selbst nicht in der Lage bist, zu erklären, was du eigentlich willst (siehe dein Link zu Chip).

Also nochmal:
Hast du die Events wirklich registriert
Hast du das mit dem Abfangen der Windows Messages versucht.

Wir reden hier von 2 Zeilen Code, die bei mir einwandfrei funktionieren. Mittlerweilen haben sich hier 30 Antworten gegeben. Meinst du wirlich, das wär dein Problem wert, zumal dir die Lösung schon auf 2 unterschiedliche Weisen auf dem Tablett serviert wurden. Streng dich an Junge. Wenn du mit Delphi nicht klar kommst, dann solltest du dir vielleicht mal überlegen, nicht besser einer anderen Beschäftigung nachzugehen.


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