AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Procedure während gedrückthalten eines Buttons
Thema durchsuchen
Ansicht
Themen-Optionen

Procedure während gedrückthalten eines Buttons

Ein Thema von F1nal · begonnen am 8. Mai 2020 · letzter Beitrag vom 11. Mai 2020
Antwort Antwort
Seite 2 von 3     12 3      
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#11

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:49
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 IF B = True then . If erwartet in der Bedingung ein boolsches Ergebnis. B ist abet schon eine Boolsche Variable. Einzig richtig wäre hier IF B then... oder 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;
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder ( 8. Mai 2020 um 12:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:49
Nicht auf True und False vergleichen
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#13

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:52
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.
  Mit Zitat antworten Zitat
F1nal

Registriert seit: 8. Mai 2020
Ort: Brandenburg
10 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:53
Nicht auf True und False vergleichen
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.
Leon
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#15

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:54
Nicht auf True und False vergleichen
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"
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
F1nal

Registriert seit: 8. Mai 2020
Ort: Brandenburg
10 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:57

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 IF B = True then . If erwartet in der Bedingung ein boolsches Ergebnis. B ist abet schon eine Boolsche Variable. Einzig richtig wäre hier IF B then... oder 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.
Leon
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:58
@Hobbycoder, das wollte ich auch verlinken, mußte mir nur grad nen Kaffee holen.


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

Registriert seit: 22. Feb 2017
930 Beiträge
 
#18

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 13:01
@Hobbycoder, das wollte ich auch verlinken, mußte mir nur grad nen Kaffee holen.


Sherlock
Endlich war ich mal schneller

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
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 13:06
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Alallart

Registriert seit: 8. Dez 2015
153 Beiträge
 
#20

AW: Procedure während gedrückthalten eines Buttons

  Alt 9. Mai 2020, 01:13
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: 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: 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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      

 

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 11:36 Uhr.
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