AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Hä? Warum ist das Ändern von Checked ein Click?
Thema durchsuchen
Ansicht
Themen-Optionen

Hä? Warum ist das Ändern von Checked ein Click?

Ein Thema von Alallart · begonnen am 29. Jun 2023 · letzter Beitrag vom 5. Jul 2023
Antwort Antwort
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.813 Beiträge
 
Delphi 12 Athens
 
#1

AW: Hä? Warum ist das Ändern von Checked ein Click?

  Alt 29. Jun 2023, 15:07
So isses. Und das ist gemäß Doku sogar so gewollt
Zitat:
Hinweis: Wenn Sie den Wert der Eigenschaft Checked programmseitig ändern, wird das Ereignis OnClick des Kontrollkästchen-Steuerelements ausgelöst. Ändern Sie den Wert der Eigenschaft Checked nicht in der Ereignisbehandlungsroutine des Ereignisses OnClick, weil dies zu einem Deadlock führt.
Hat mich damals auch mal ein paar Tage näher an die Rente gebracht.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann

Geändert von Sherlock (29. Jun 2023 um 15:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.698 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Hä? Warum ist das Ändern von Checked ein Click?

  Alt 29. Jun 2023, 16:11
So isses. Und das ist gemäß Doku sogar so gewollt
Zitat:
Hinweis: Wenn Sie den Wert der Eigenschaft Checked programmseitig ändern, wird das Ereignis OnClick des Kontrollkästchen-Steuerelements ausgelöst. Ändern Sie den Wert der Eigenschaft Checked nicht in der Ereignisbehandlungsroutine des Ereignisses OnClick, weil dies zu einem Deadlock führt.
Naja "gewollt" ist übertrieben, eigentlich kann das keiner wirklich wollen - zumindest fällt mir kein Fall ein, wo das einen Vorteil hätte -, aber immerhin ist es dokumentiert.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#3

AW: Hä? Warum ist das Ändern von Checked ein Click?

  Alt 29. Jun 2023, 16:22
Es fing ja schon damit an, dass auch die nutzerseitige Änderung im OnClick ankommt, und es kein OnChange gab/gibt. (DevExpress hat bei seiner TcxCheckBox zusätzlich ein OnChange)
und da das "Click" somit eigenlich "Change" bedeutet, ist es "richtig", dass es beim Change auch klickt
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
klaus schaaff

Registriert seit: 25. Jul 2009
24 Beiträge
 
#4

AW: Hä? Warum ist das Ändern von Checked ein Click?

  Alt 2. Jul 2023, 11:29
Hallo Delphi-PRAXiS,

vielleicht etwas OldSchool, aber das sollte auch noch funktionieren.

Delphi-Quellcode:

var
  DontChange: Boolean = False;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if DontChange = True then Exit;
  DontChange := True;
  try
    CheckBox2.Checked := False;
  finally
    DontChange := False;
  end;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
  if DontChange = True then Exit;
  DontChange := True;
  try
    CheckBox1.Checked := False;
  finally
    DontChange := False;
  end;
end;
Besonders bei älteren Delphi-Versionen.


Liebe Grüße
Klaus Schaaff
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.687 Beiträge
 
Delphi 12 Athens
 
#5

AW: Hä? Warum ist das Ändern von Checked ein Click?

  Alt 2. Jul 2023, 11:38
Besonders bei älteren Delphi-Versionen.
Damit meinst du älter als Delphi 5?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#6

AW: Hä? Warum ist das Ändern von Checked ein Click?

  Alt 2. Jul 2023, 11:40
if ... = True then gehört sowieso in garkeine Delphiversion rein.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
klaus schaaff

Registriert seit: 25. Jul 2009
24 Beiträge
 
#7

AW: Hä? Warum ist das Ändern von Checked ein Click?

  Alt 2. Jul 2023, 21:14
Hallo,

@Uwe Rabe:
Zitat:
Damit meinst du älter als Delphi 5?
Alles was <= Delphi 7 ist.

@himitsu
Zitat:
if ... = True then gehört sowieso in garkeine Delphiversion rein.
Ja, ich habe hier schon öfter Diskurse dazu hier gelesen. Die Beispiele dazu habe ich nachkompiliert und konnte bei <= Delphi 7 keine Fehler nach produzieren. Einzig die unterschiedlichen Boolean-Größen, da muss man aufpassen. Aber was du schreibst, sollte in neueren Delphi-Versionen der Sicherheit wegen beachtet werden, sicher.

Liebe Grüße
Klaus Schaaff
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#8

AW: Hä? Warum ist das Ändern von Checked ein Click?

  Alt 2. Jul 2023, 21:22
Minimierte Beispiele, sind eben nicht immer naturgeträu.
z.B. BOOL aus WinAPIs ist 32 Bit / 4 Byte groß und wird dann auf das 1 Byte (Boolean) umgebrochen, was aber eben im Delphi auch nicht ganz genau dem ByteBool entspricht.
Unter Windows ist die Konstante "True" z.B. -1, aber im Pascal bzw. Delphi ist es +1.

Boolean ist nunmal eben nicht 1 Bit, was wirklich ausschließlich 0 und 1 kennen würde.

Außerdem kann ein Boolean eben aus anderen Werten gekastet generiert sein
in C-Sprachen und z.B. Javascript geht auch ein
if (i) , wobei I = Integer ... alles <> 0 ist nunmal "True".

Delphi-Quellcode:
var B: Boolean;

//B := Boolean(0); // immer False (aber geht auch nicht anders)
B := Boolean(2); // eigentlich "True", aber eben nicht genau das "eine" True

if B = True then
  ShowMessage('True')
else if B = False then
  ShowMessage('False')
else
  ShowMessage('auch True');

if B then
  ShowMessage('True')
else if not B then
  ShowMessage('False')
else
  ShowMessage('nie');
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 2. Jul 2023 um 21:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.687 Beiträge
 
Delphi 12 Athens
 
#9

AW: Hä? Warum ist das Ändern von Checked ein Click?

  Alt 2. Jul 2023, 21:24
Alles was <= Delphi 7 ist.
Ich meinte nur, weil es das ClicksDisabled auch schon in Delphi 5 gab. Ältere Versionen habe ich aktuell nicht mehr greifbar. Daher kann ich nicht sagen, in welcher Version das eingeführt wurde.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#10

AW: Hä? Warum ist das Ändern von Checked ein Click?

  Alt 3. Jul 2023, 06:22
Ich fände es auch gut, wenn es eine passende globale Einstellung gäbe. Allerdings könnte die natürlich auch zu Irritationen führen.

Ich meinte nur, weil es das ClicksDisabled auch schon in Delphi 5 gab. Ältere Versionen habe ich aktuell nicht mehr greifbar. Daher kann ich nicht sagen, in welcher Version das eingeführt wurde.
Das gibt es seit Delphi 4.

Ja, ich habe hier schon öfter Diskurse dazu hier gelesen. Die Beispiele dazu habe ich nachkompiliert und konnte bei <= Delphi 7 keine Fehler nach produzieren.
Weil es nicht zum Thema gehört nur kurz:
Sagst du denn dann auch im echten Leben: Wenn "das Wetter ist schön" wahr ist, gehe ich zum Fußballspielen.
Wenn nicht, was macht es dann für einen Sinn, das im Quelltext so verklausuliert zu schreiben, unabhängig von den möglichen Fehlern?

Beispiel getestet mit Delphi 1 (mit zusätzlich BoolToStr, das es dort noch nicht gibt) bis 7:
Delphi-Quellcode:
function Example(const AValue: string): Boolean;
begin
  Result := Boolean(CompareStr(AValue, 'Test'));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Echter Wert: ' + BoolToStr(Example('TestNix'), True)
    + sLineBreak + 'Manuelle Auswertung: ' + BoolToStr(Example('TestNix') = True, True));
end;
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 3. Jul 2023 um 06:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 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