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

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 1 von 2  1 2   
F1nal

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

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:44
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.
Leon
  Mit Zitat antworten Zitat
DieDolly

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

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:45
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;
Zitat:
Wir waren davon ausgegangen dass diese Ereignisse nur für bewegungen mit der Maus sind.
Dafür gibt es MouseMove.
  Mit Zitat antworten Zitat
F1nal

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

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:46
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?
Leon
  Mit Zitat antworten Zitat
DieDolly

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

AW: Procedure während gedrückthalten eines Buttons

  Alt 8. Mai 2020, 12:46
Das können andere besser erklären als ich. Man macht es einfach nicht, da es nicht korrekt ist und zu Fehlern führen kann. Man vergleicht mit if B then und if not B then . Aber das ganze Boolean-Zeug brauchst du da nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

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

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
 
#6

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
 
#7

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
1.001 Beiträge
 
#8

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
Alallart

Registriert seit: 8. Dez 2015
156 Beiträge
 
#9

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
Benutzerbild von himitsu
himitsu

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

AW: Procedure während gedrückthalten eines Buttons

  Alt 9. Mai 2020, 01:58
Delphi-Quellcode:
var
  A, X: Boolean; // Pascal bzw. Delphi
  B: ByteBool;
  C: LongBool; // C++ bzw. WinAPI
begin
  A := True;
  B := True;
  C := True;
  X := Boolean(9);
  ShowMessage(Format('%d %d %d %d'#10'%.2x %.2x %.8x %.2x '#10'%s',
    [Ord(A), Ord(B), Ord(C), Ord(X),
    Byte(A), Byte(B), LongWord(C), Byte(X),
    BoolToStr(X = True, True) // if X = True then ...
  ]));
Konstanten: 0 und 1 (bzw. -1, also ein oder alle Bits)
Auswertung: =0 und <>0 (aber niemals =1)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 9. Mai 2020 um 02:02 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:51 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