![]() |
Delphi-Version: 10.3 Rio
Procedure während gedrückthalten eines Buttons
Liste der Anhänge anzeigen (Anzahl: 1)
Anhang 52469 <- Bild der Aufgabe
Wir haben als Schulaufgabe, diese Aufgabe bekommen. Ich und meine Freunde verzweifeln nun aber schon seit heute morgen und wissen nicht wie wir dass mit dem gedrückthalten machen sollen. Ich hoffe uns kann hier wer helfen. Ein nachfragen beim Lehre ist aktuell leider nicht möglich weshalb ich hier nachfrage. Vielen Dank! Leon |
AW: Procedure während gedrückthalten eines Buttons
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo-
Die "Befehlsschaltfläche" ist wohl ein ganz normaler
Delphi-Quellcode:
, richtig?
TButton
Ihr habt gesehen dass es für den Button nicht nur
Delphi-Quellcode:
gibt, oder? Protipp: Es hat was mit der Maus zu tun.
OnClick
|
AW: Procedure während gedrückthalten eines Buttons
Ja es handelt sich um einen normalen Button, wir haben auch die anderen Ereignisse gesehen wissen jedoch nicht welche dass tut, was wir möchten.
|
AW: Procedure während gedrückthalten eines Buttons
Zitat:
|
AW: Procedure während gedrückthalten eines Buttons
Delphi-Quellcode:
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.
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; |
AW: Procedure während gedrückthalten eines Buttons
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; Zitat:
|
AW: Procedure während gedrückthalten eines Buttons
Zitat:
|
AW: Procedure während gedrückthalten eines Buttons
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
Delphi-Quellcode:
und
if B then
Delphi-Quellcode:
. Aber das ganze Boolean-Zeug brauchst du da nicht.
if not B then
|
AW: Procedure während gedrückthalten eines Buttons
Klasse! :thumb:
In der Tat ist es auf den ersten Blick verwirrend, MouseDown/MouseUp zu sagen, aber angesichts von MouseMove (das sich um alle Bewegungen der Mouse im Bereich des Buttons kümmert) und dem Drang von Entwicklern doch irgendwie kurze Namen haben zu wollen, hat man eben statt OnMouseButtonDown nur OnMouseDown. Sherlock |
AW: Procedure während gedrückthalten eines Buttons
Zitat:
Zitat:
Weißt du ob das B nicht irgendeinen Sinn hatte? Der Vergleich auf B war überflüssig, ja, aber ob es das Setzen von B auch war kann niemand außer ihm selbst beurteilen. |
AW: Procedure während gedrückthalten eines Buttons
Zitat:
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 erwartet in der Bedingung ein boolsches Ergebnis. B ist abet schon eine Boolsche Variable. Einzig richtig wäre hier
IF B = True then
Delphi-Quellcode:
oder
IF B then...
Delphi-Quellcode:
So sieht das besser aus:
IF not B then ...
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; |
AW: Procedure während gedrückthalten eines Buttons
Zitat:
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 |
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.
|
AW: Procedure während gedrückthalten eines Buttons
Zitat:
|
AW: Procedure während gedrückthalten eines Buttons
Zitat:
![]() |
AW: Procedure während gedrückthalten eines Buttons
Zitat:
|
AW: Procedure während gedrückthalten eines Buttons
@Hobbycoder, das wollte ich auch verlinken, mußte mir nur grad nen Kaffee holen.
:dp: Sherlock |
AW: Procedure während gedrückthalten eines Buttons
Zitat:
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 |
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 |
AW: Procedure während gedrückthalten eines Buttons
Zitat:
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:
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.
if Funktion_ABC = True then ...
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:
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.
if Funktion_ABC then ...
|
AW: Procedure während gedrückthalten eines Buttons
Delphi-Quellcode:
Konstanten: 0 und 1 (bzw. -1, also ein oder alle Bits)
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 ... ])); Auswertung: =0 und <>0 (aber niemals =1) |
AW: Procedure während gedrückthalten eines Buttons
Es gibt APIs die einen Integer und die boolsche Repräsentation liefern. False=0 True=1,2... (Aufgabe wurde ausgeführt) True=-1,-2.... (Aufgabe wurde erledigt,Fehler ist aufgetreten)
Da kann es passieren das True<>True ist. Gruß K-H |
AW: Procedure während gedrückthalten eines Buttons
Zitat:
|
AW: Procedure während gedrückthalten eines Buttons
OK noch ne Variante
Gruß K.H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz