Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Procedure während gedrückthalten eines Buttons (https://www.delphipraxis.net/204226-procedure-waehrend-gedrueckthalten-eines-buttons.html)

Hobbycoder 8. Mai 2020 12:49

AW: Procedure während gedrückthalten eines Buttons
 
Zitat:

Zitat von F1nal (Beitrag 1464018)
Delphi-Quellcode:
procedure TF_TagNacht.Bt_BlitzMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  B := true;
  if B = true then
    begin
     Im_Wolke1.Picture.LoadFromFile('Regen.ico');
    end;
end;

procedure TF_TagNacht.Bt_BlitzMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 B := false;
  if B = false then
    begin
     Im_Wolke1.Picture.LoadFromFile('Wolke.ico');
    end;
end;
Wir haben es jetzt nach ein bisschen rumprobieren so gelöst. Danke für den Tipp mit der Maus. Wir waren davon ausgegangen dass diese Ereignisse nur für bewegungen mit der Maus sind.

2 Sachen sind mir dabei gleich aufgefallen.

1) Wenn du in einer Zeile B auf True oder False setzt, dann brauchst du nicht in der darauffolgenden Zeile genau das wieder per If abfragen. Logischerweise kann B dann gar keinen anderen Zustand haben.

2) NIEMALS
Delphi-Quellcode:
IF B = True then
. If erwartet in der Bedingung ein boolsches Ergebnis. B ist abet schon eine Boolsche Variable. Einzig richtig wäre hier
Delphi-Quellcode:
IF B then...
oder
Delphi-Quellcode:
IF not B then ...
So sieht das besser aus:
Delphi-Quellcode:
procedure TF_TagNacht.Bt_BlitzMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  B := true;
  Im_Wolke1.Picture.LoadFromFile('Regen.ico');
end;

procedure TF_TagNacht.Bt_BlitzMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 B := false;
 Im_Wolke1.Picture.LoadFromFile('Wolke.ico');
end;

Sherlock 8. Mai 2020 12:49

AW: Procedure während gedrückthalten eines Buttons
 
Zitat:

Zitat von F1nal (Beitrag 1464021)
Zitat:

Zitat von DieDolly (Beitrag 1464020)
Nicht auf True und False vergleichen :warn:

Ok und warum nicht?

Hauptgrund für mich:
Es liest sich einfach besser. Delphi bzw. ObjectPascal ist eine Sprache. Was würdest Du eher sagen: "Wenn es regnet wahr ist, dann mache ich meinen Regenschirm auf" oder "Wenn es regnet, dann mache ich meinen Regenschirm auf"?

Sherlock

DieDolly 8. Mai 2020 12:52

AW: Procedure während gedrückthalten eines Buttons
 
Wenn du den Status der einzelnen Bilder brauchst, wären vielleicht Enums nicht verkehrt. Eher sogar ein Set. Aber das geht zu weit. Würde deinen Lehrer aber vielleicht staunen lassen.

F1nal 8. Mai 2020 12:53

AW: Procedure während gedrückthalten eines Buttons
 
Zitat:

Zitat von Sherlock (Beitrag 1464027)
Zitat:

Zitat von F1nal (Beitrag 1464021)
Zitat:

Zitat von DieDolly (Beitrag 1464020)
Nicht auf True und False vergleichen :warn:

Ok und warum nicht?

Hauptgrund für mich:
Es liest sich einfach besser. Delphi bzw. ObjectPascal ist eine Sprache. Was würdest Du eher sagen: "Wenn es regnet wahr ist, dann mache ich meinen Regenschirm auf" oder "Wenn es regnet, dann mache ich meinen Regenschirm auf"?

Sherlock

Ja das ist wohl war, der erste Satz klingt recht komisch.

Hobbycoder 8. Mai 2020 12:54

AW: Procedure während gedrückthalten eines Buttons
 
Zitat:

Zitat von F1nal (Beitrag 1464021)
Zitat:

Zitat von DieDolly (Beitrag 1464020)
Nicht auf True und False vergleichen :warn:
Und wenn dann vereinfachen

Delphi-Quellcode:
procedure TF_TagNacht.Bt_BlitzMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Im_Wolke1.Picture.LoadFromFile('Regen.ico');
end;

procedure TF_TagNacht.Bt_BlitzMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Im_Wolke1.Picture.LoadFromFile('Wolke.ico');
end;

Ok und warum nicht?

Sieht hier Ist nicht immer nur eine Frage der "Schönheit"

F1nal 8. Mai 2020 12:57

AW: Procedure während gedrückthalten eines Buttons
 
Zitat:

Zitat von Hobbycoder (Beitrag 1464025)

2 Sachen sind mir dabei gleich aufgefallen.

1) Wenn du in einer Zeile B auf True oder False setzt, dann brauchst du nicht in der darauffolgenden Zeile genau das wieder per If abfragen. Logischerweise kann B dann gar keinen anderen Zustand haben.

2) NIEMALS
Delphi-Quellcode:
IF B = True then
. If erwartet in der Bedingung ein boolsches Ergebnis. B ist abet schon eine Boolsche Variable. Einzig richtig wäre hier
Delphi-Quellcode:
IF B then...
oder
Delphi-Quellcode:
IF not B then ...

Ja, ist uns dann auch aufgefallen das ja eigentlich gar kein Sinn macht dass dann noch abzufragen. Zu 2. ok danke, dass wussten wir bisher noch nicht dass es so wie wir es gamacht haben falsch wäre.

Sherlock 8. Mai 2020 12:58

AW: Procedure während gedrückthalten eines Buttons
 
@Hobbycoder, das wollte ich auch verlinken, mußte mir nur grad nen Kaffee holen.
:dp:

Sherlock

Hobbycoder 8. Mai 2020 13:01

AW: Procedure während gedrückthalten eines Buttons
 
Zitat:

Zitat von Sherlock (Beitrag 1464035)
@Hobbycoder, das wollte ich auch verlinken, mußte mir nur grad nen Kaffee holen.
:dp:

Sherlock

Endlich war ich mal schneller :-D:-D:-D:-D

Ich verstehe sowieso nicht, wie ihr das immer schafft, dass wenn ich auf Anworten klicke, bis ich meine Text dann fertig geschrieben habe, sind immer schon x neue Antworten da, die oft das gleiche aussagen wir meine.

Ihr habt bestimmt irgendwo im Ausland mehrere Leute sitzen, die für euch die Antworten schon mal vorschreiben, so dass ihr nur noch abschicken müsst. Anders kann ich mir das nicht erklären :-D:-D:-D

Sherlock 8. Mai 2020 13:06

AW: Procedure während gedrückthalten eines Buttons
 
Ich hatte eine ganz tolle und lesenswerte Abhandlung darüber geschrieben, wie man zum korrekten Event kommt, wollte posten und da informierte mich der rote Kasten, daß nicht nur die Lösung gefunden sondern auch schon kritisch begutachtet wurde... *seufz*

Aber ich finde jetzt ist F1nal auf einem guten Weg. Weiter so.

Sherlock

Alallart 9. Mai 2020 01:13

AW: Procedure während gedrückthalten eines Buttons
 
Zitat:

Zitat von F1nal (Beitrag 1464021)
Ok und warum nicht?

Weil Boolean theoretisch ein Bitwert ist (True/False, Wahr/Falsch), also eigentlich 1 und 0, in der Praxis aber dafür ein Bytewert genommen wird. Warum? Weil der Bit zwar die kleinste Informationseinheit in der EDV ist, man einen Bit aber nicht speichern kann. Nicht alleine. Die kleinste Einheit man speichern kann ist das Byte. Man braucht eigentlich nur das 0 und 1, hat aber wegen des Bytes 0 und 1 bis 255.

Nochmal zum mitschreiben: FALSE ist 0, TRUE ist 1. Weil für das Boolean aber ein Byte verbraucht wird, könnte TRUE auch 2 oder 255 oder sonst was sein. Einfach alle Zahlen zwischen 1 und 255. Theoretisch.

In der Delphipraxis ist es so: FALSE ist 0, TRUE ist 1. Vergleiche ich z. B. eine Funktion in einer IF-Abfrage:
Delphi-Quellcode:
if Funktion_ABC = True then ...
muss der Boolean-Wert (der theoretisch ein Bitwert ist, aber praktisch ein Bytewert), der Funktion gleich 1 sein und von TRUE gleich 1 sein. Sind sie i.d.R. bei Delphi auch. Sind sie beide gleich 1, ist die Bedingung erfüllt.

Wo liegt also das Problem? Ganz selten kann es vorkommen, das der Boolean-Wert einer Funktion <> 1 ist. Kommt extrem selten vor, es kann aber vorkommen. Problematisch wird das eher dann, wenn man mit fremden Funktionen arbeitet, anderen Systemen, usw. Sieht die IF-Abfrage dagegen so aus:
Delphi-Quellcode:
if Funktion_ABC then ...
dann übergeht man das Problem, denn hier interpretiert Delphi alles was nicht FALSE ist als TRUE. Somit ist es egal was die Funktion liefert. Ist es nicht FALSE ist es TRUE. Bei direkten Vergleich dagegen kann es vorkommen, dass TRUE ungleich 1 ist.


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

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz