TColorButton sendet OnClick zweimal?

Rund um die LCL und andere Komponenten

TColorButton sendet OnClick zweimal?

Beitragvon Timm Thaler » 2. Jan 2019, 23:28 TColorButton sendet OnClick zweimal?

Ich habe einen Button auf einem Formular. Auf Click soll diese Routine ausgeführt werden:

Code: Alles auswählen
  try
    wHNDcolor := TColorDialog.Create(nil)// Farbdialog öffnen
    wHNDcolor.Title := 'Farbe Vordergrund';
    wHNDcolor.Color := fgrgb;
    if wHNDcolor.Execute then begin
      fgrgb := wHNDcolor.Color// neue Farbe übernehmen
      gIDfcol.ButtonColor := fgrgb;
    end;
  finally
    wHNDcolor.Free();
  end;
 


Funktioniert soweit, klicke ich auf den Button wird der ColorDialog ausgeführt und mit Ok oder Abbruch komme ich da wieder raus.

Nun habe ich den aufrufenden Button durch einen ColorButton ausgetauscht. Ansonsten alles gleich. Allerdings wird der ColorDialog nach dem Beenden nochmals aufgerufen. ColorButton sendet anscheinend das OnClick-Ereignis zweimal.

Rufe ich stattdessen die Routine nicht mit OnClick, sondern OnDblClick auf, wird der ColorDialog wie gewünscht nur einmal ausgeführt. Allerdings fällt auf, dass ein einzelner Klick auf den ColorButton genügt, um ein OnDblClick Ereignis auszulösen.

Ist das ein Bug im OnClick von ColorButton? Oder ist das normal? Kann ich das zweite Ereignis bei OnClick irgendwie abfangen?
Timm Thaler
 
Beiträge: 893
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon wp_xyz » 2. Jan 2019, 23:45 Re: TColorButton sendet OnClick zweimal?

Das zweimalige Auslösen von OnClick erscheint mir falsch. Aber so würde ich den TColorButton auch gar nicht anwenden. Nimm stattdessen das Ereignis OnColorChanged; den ColorDialog musst du auch nicht erzeugen, das macht der TColorButton selber. Um z.B ein TShape mit Hilfe eines ColorButtons einzufärben, ist nur folgender Code erforderlich:
Code: Alles auswählen
procedure TForm1.ColorButton1ColorChanged(Sender: TObject);
begin
  Shape1.Brush.Color := ColorButton1.ButtonColor;
end;
wp_xyz
 
Beiträge: 2889
Registriert: 8. Apr 2011, 08:01

Beitragvon Timm Thaler » 2. Jan 2019, 23:52 Re: TColorButton sendet OnClick zweimal?

Wie, das macht der selber?

Dann muss ich mich ja nicht wundern, dass der Dialog zweimal kommt. Ich dachte, der ColorButton heisst so, weil man den halt einfach eine Farbe geben kann... Peinlich.
Timm Thaler
 
Beiträge: 893
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Warf » 3. Jan 2019, 01:23 Re: TColorButton sendet OnClick zweimal?

Timm Thaler hat geschrieben:Ich dachte, der ColorButton heisst so, weil man den halt einfach eine Farbe geben kann... Peinlich.


Ne dafür gibts den SpeedButton oder BitBtn (weiß nicht welcher/ob beide Hintergrundfarben können)
Warf
 
Beiträge: 1101
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon hubblec4 » 5. Jan 2019, 14:46 Re: TColorButton sendet OnClick zweimal?

Warf hat geschrieben:
Timm Thaler hat geschrieben:Ne dafür gibts den SpeedButton oder BitBtn (weiß nicht welcher/ob beide Hintergrundfarben können)


Unter Windows mit deaktivierten Themes (WinClassic Ansicht) werden die Button Farben nicht verändert.
Ich nutze dazu immer ein Panel auf das ein Speed-Button kommt mit der Eigenschaft "Flat:=true" und dann kann man die Panel-farbe ändern.
hubblec4
 
Beiträge: 223
Registriert: 25. Jan 2014, 17:50

Beitragvon Timm Thaler » 5. Jan 2019, 17:14 Re: TColorButton sendet OnClick zweimal?

Passt schon, ich hatte echt nicht auf dem Schirm, dass der ColorButton selbst einen ColorDialog aufmacht. Ich mach das jetzt so wie von wp_xyz angegeben.

Einzig den Titeltext des Dialogs kann ich so nicht ändern. Aber witzigerweise interessiert das Windows sowieso nicht, da steht immer "Farbe" egal was man als .Title angibt.
Timm Thaler
 
Beiträge: 893
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: Google [Bot], TraumTaenzerDieter und 2 Gäste

porpoises-institution
accuracy-worried