Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Hä? Warum ist das Ändern von Checked ein Click? (https://www.delphipraxis.net/213272-hae-warum-ist-das-aendern-von-checked-ein-click.html)

Uwe Raabe 2. Jul 2023 11:38

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

Zitat von klaus schaaff (Beitrag 1524066)
Besonders bei älteren Delphi-Versionen.

Damit meinst du älter als Delphi 5?

himitsu 2. Jul 2023 11:40

AW: Hä? Warum ist das Ändern von Checked ein Click?
 
Delphi-Quellcode:
if ... = True then
gehört sowieso in garkeine Delphiversion rein.

klaus schaaff 2. Jul 2023 21:14

AW: Hä? Warum ist das Ändern von Checked ein Click?
 
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

himitsu 2. Jul 2023 21:22

AW: Hä? Warum ist das Ändern von Checked ein Click?
 
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
Delphi-Quellcode:
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');

Uwe Raabe 2. Jul 2023 21:24

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

Zitat von klaus schaaff (Beitrag 1524092)
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.

himitsu 2. Jul 2023 22:04

AW: Hä? Warum ist das Ändern von Checked ein Click?
 
Nja, bissl blöd lief wohl, dass es normal "unsichtbar" ist und es somit auch kaum jemand sah.

Gerade bei der CheckBox spräche ja nichts dagegen, dass endlich mal published zu machen.

https://quality.embarcadero.com/brow...ClicksDisabled
Uwe :stupid:

jaenicke 3. Jul 2023 06:22

AW: Hä? Warum ist das Ändern von Checked ein Click?
 
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.

Zitat:

Zitat von Uwe Raabe (Beitrag 1524095)
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.

Zitat:

Zitat von klaus schaaff (Beitrag 1524092)
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;

himitsu 3. Jul 2023 09:06

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

Zitat von jaenicke (Beitrag 1524106)
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.

Es muß ja nicht gleich global sein.
Ein sichtbares, bzw. wirklich nutzbares Property an den CheckBoxen wäre schon nett. :-D

Aber joar, vielleicht eine Einstellung in den IDE-Settings und Projekt-Settings, wo man das Default festlegen kann, für neue CheckBoxen.

klaus schaaff 3. Jul 2023 14:11

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

@Uwe Raabe
@jaenicke

ich habe StdCtrls.pas in allen Versionen von Delphi 5 bis Delphi 10 duchsuchen lassen nach 'ClicksDisabled' und 'FClicksDisabled'. Keine der Versionen von TCustomCheckBox enthält diese property. Eine Frage bleibt offen, die ich nicht exakt beantworten kann. Hatten Updates dieser Delphi Versionen vielleicht doch TCustomCheckBox property ClicksDisabled eingebunden?
Ich finde es schade, dass es kein offizielles Tool gibt, um diese Fragen korrekt zu bentworten.

Dagegen haben TButtonControl und TRadioButton ClicksDisabled.

Ein Kuriosum gibt es dennoch:

Delphi-Quellcode:
procedure TCustomCheckBox.SetState(Value: TCheckBoxState);
begin
  if FState <> Value then
  begin
    FState := Value;
    if HandleAllocated then
      SendMessage(Handle, BM_SETCHECK, Integer(FState), 0);
    if not ClicksDisabled then Click; // <- Hier
  end;
end;
Das ist die einzige Stelle.

In Delphi wurden schon immer Quelltext-Dateien *.pas mit leicht verändertem Code ausgeliefert, als die complierten *.dcu. Das scheint ein solcher Fall zu sein.

Alle Versuche mit Casts TButtonControl(CheckBox1).ClicksDisabled führten zu nichts, auch Debug dcu's dazu zuschalten brachten keinen Erfolg. Vielleicht hat jemand eine Idee, wie man doch zu CheckBox1.ClicksDisabled kommt.


Liebe Grüße
Klaus Schaaff

jaenicke 3. Jul 2023 14:32

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

Zitat von klaus schaaff (Beitrag 1524146)
Dagegen haben TButtonControl und TRadioButton ClicksDisabled.

Und TCustomCheckBox ist von TButtonControl abgeleitet...

Wie schon geschrieben, die TCheckBox funktioniert mit ClicksDisabled seit Delphi 4 so.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.
Seite 2 von 3     12 3      

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