Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Button einfärben
Hannoi - Mo 08.11.10 11:37
Titel: Button einfärben
Hallo Leute,
mein Taschenrechner (geschrieben in Delphi) kann alle 4 Grundrechenarten. Ich würde nun sehr gerne den Button ( Operator ) einfärben wenn ich ihn verwendet habe. Also wenn ich Plus gedrückt habe soll der Plus Button z.B. rot sein. Wenn ich dann aber z.B auf Minus drücke soll der Minus Button Rot eingefärbt werden und der Plus Button wieder normal sein.
Lg Hannoi
Gausi - Mo 08.11.10 11:42
Mit dem normalen TButton geht das nicht. Du könntest aber andere Button-Komponenten verwenden, z.B. den SpeedButton (evtl. heißt der leicht anders). Der hat iirc eine Down-Eigenschaft, die für solche Sachen gedacht ist.
Gerd Kayser - Mo 08.11.10 11:51
Hannoi hat folgendes geschrieben : |
| Ich würde nun sehr gerne den Button ( Operator ) einfärben wenn ich ihn verwendet habe. |
Falls Du SpeedButtons verwendest:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TMainform.SpeedButton1Click(Sender: TObject); begin if SpeedButton1.Font.Color = clBlack then SpeedButton1.Font.Color := clRed else SpeedButton1.Font.Color := clBlack; ... end; |
Alternativ könntest Du auch mit verschiedenen Images (Glyphs) arbeiten.
bummi - Mo 08.11.10 11:59
und die anderen zurücksetzen, PSEUDOCODE:
Delphi-Quelltext
1: 2: 3: 4: 5:
| for i := ?? to ?? do begin s := TSpeedbutton(FindComponent('AktionsButton' + IntToStr(i))); if s <> Sender then Farbe zurücksetzen end; |
Hannoi - Mo 08.11.10 12:03
Das ist auch alles ok so, aber ich möchte nicht die Schriftfarbe ändern! Ich möchte den Button einfärben, die schriftfarbe soll schwarz bleiben. Das graue feld darum soll eine andere Farbe kriegen.
Gerd Kayser - Mo 08.11.10 12:16
Hannoi hat folgendes geschrieben : |
| ich möchte nicht die Schriftfarbe ändern! Ich möchte den Button einfärben, die schriftfarbe soll schwarz bleiben. Das graue feld darum soll eine andere Farbe kriegen. |
Daß ein TButton das nicht kann, wurde Dir bereits gesagt. Und ich hatte geschrieben, daß man bei SpeedButtons alternativ mit Images arbeiten kann.
Hannoi - Mo 08.11.10 12:18
Ok, aber wie genau verwende ich ein Image bzw. hat dies dann auch die Funktion immer nur wenn der Button verwendet wird die farbe zu ändern?
bummi - Mo 08.11.10 12:27
wenn Du TSpeedbutton verwendest und Dich reinwurstel und basteln willst hier eine kleine Vorlage (muß ausgebaut werden)
Tag beim OnClick zwischen 0 und 1 toggeln...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| type TSpeedbutton=Class(Buttons.TSpeedbutton) public Procedure paint;override; End; TForm1 = class(TForm) Button1: TButton; SpeedButton1: TSpeedButton; procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} procedure TSpeedbutton.paint; var PaintRect:Trect; s : String; begin if Tag=1 then begin PaintRect := Rect(0, 0, Width, Height); Canvas.Brush.Style := bsSolid; Canvas.Brush.Color := clLime; Canvas.FillRect(PaintRect); s := caption; Inflaterect(PaintRect,-10,-10); canvas.TextRect(PaintRect,s,[tfCenter,tfVerticalCenter]); end else begin inherited; end; end; |
Gerd Kayser - Mo 08.11.10 12:51
Hannoi hat folgendes geschrieben : |
| Ok, aber wie genau verwende ich ein Image bzw. hat dies dann auch die Funktion immer nur wenn der Button verwendet wird die farbe zu ändern? |
Wenn Du die Bildchen in eine RES-Datei gepackt hast, z. B. so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TMainform.SpeedButton1Click(Sender: TObject); begin if BildNr = 1 then begin SpeedButton1.Glyph.LoadFromResourceName(HInstance, 'BMP2'); BildNr := 2; end else begin SpeedButton1.Glyph.LoadFromResourceName(HInstance, 'BMP1'); BildNr := 1; end; end; |
BildNr ist hier eine globale Integer-Variable.
Ich habe vorhin gesehen, daß die TLMDSpeedButtons der LMD-Tools auch ohne Bildchen ihre Farbe ändern können. Dazu muß bei diesen SpeedButtons die Eigenschaft CtlXP im Objektinspektor auf false gesetzt sein.
Die LMD-Tools (Freeware-Edition) kannst Du hier laden (falls sie nicht bei Deiner Delphi-Version dabei waren):
http://www.lmdinnovative.com/download/index.php#LMD
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!