Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Tastendruck abfrage (https://www.delphipraxis.net/114507-tastendruck-abfrage.html)

DeddyH 26. Mai 2008 19:24

Re: Tastendruck abfrage
 
Kann das sein, dass da diverse begins und ends fehlen?

Die Muhkuh 26. Mai 2008 19:27

Re: Tastendruck abfrage
 
Warum nutzt Du eig. keine bool'schen Variablen bzw. eine Enumration für die Richtung?

DeddyH 26. Mai 2008 19:28

Re: Tastendruck abfrage
 
Das sollte ja eigentlich der Sinn des Typs sein ;)

Fabbe 26. Mai 2008 19:29

Re: Tastendruck abfrage
 
Nein, dass würde mir Delphi sagen.
Man braucht bei einer If-Bedinung kein begin und end zu benutzen; wenn man nur einen Befehl dahinter schreibt falls du dass meinst.
Es fehlt höchstens ein End; durchs kürzen


EDIT:Wenn ich etwas nicht benutze, dann bin ich mir damit unsicher oder kann es nicht =)

Könnts mir ja gerne Versuchen zu erklären

bluesbear 26. Mai 2008 19:38

Re: Tastendruck abfrage
 
Zitat:

Zitat von DeddyH
Kann das sein, dass da diverse begins und ends fehlen?

Ich hatte gehofft, er würde mit dem Debugger selber drauf kommen :cry:

rollstuhlfahrer 26. Mai 2008 19:41

Re: Tastendruck abfrage
 
HI,

Zitat:

Zitat von Fabbe
Und wo wir schon dabei sind: Wie kann ich mit Canvas abfragen was für eine Farbe an einer bestimmten Stelle ist?

Das gebt mit Canvas.Pixels[X, Y] mit dem Rückgabewert TColor.

Zitat:

Zitat von Fabbe
Delphi-Quellcode:
if runter=1 then {nichts, da es in dem ersten durchlauf nichts zu löschen gibt} else rectangle(x,y,x1,y2); {löschen des voherigen Blockes, also der vorherigen Position}
              Brush.color:=clmaroon; {ändern der Farbe}
              rectangle(x,y1,x1,y3);{neue Position}
Ich werd bald wahnsinnig...
wenn diese doofe Tastenerkennung gehen würde wäre der rest schon viel einfacher

Hier feht bei code glaub ich ein begin und end, da der neue Stein ja nur dann gezeichnet werden soll, wenn runter <> 1.
Ich glaub, du weist nicht wirklich viel mit type TTaste = (ttNone,ttLeft,ttRight,ttDown,ttTurn); anzufangen, oder?

Ftaste kannst du im Timer-Event wie eine normale Variable auswerten. Die einzige Einschränkungbesteht lediglich darin, dass du die definierten Werte (ttNone, ttLeft, ...) verwenden musst. Das ganze geht auch mit Case.

Beispiel:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: Tobject);
begin
case FTaste of
  ttNone: ; // nix (lass dir was einfallen oder lass es weg)
  ttLeft: Stein_nach_links;
  ttRight: Stein_nach_rechts;
  ttDown: Stein_nach_unten;
  ttUp: Stein_drehen;
end;
fTaste := ttNone;
end;
Es wäre zu empfehlen, wenn du jede Steinbewegung in eine extra Prozedur auslagerst, um den Code übersichtlich zu halten. Dort kannst du dann auch die Gültigkeitsabfrage deines Zuges machen (und Zeichnen)

rollstuhlfahrer
Hoffe doch mal, dass es verständlich ist.


Nachtrag:
Zitat:

Zitat von Fabbe
Könnts mir ja gerne Versuchen zu erklären

Hab ich versucht

Matze 26. Mai 2008 19:43

Re: Tastendruck abfrage
 
Da ich merke, dass du gerne dazu lernst, lege ich dir den Ungleich-Operator ans Herz ( :mrgreen: ), denn dadurch wird der Code ein klein wenig übersichtlicher.

Zitat:

Zitat von Fabbe
Delphi-Quellcode:
if runter=1 then {nichts...} else rectangle(x,y,x1,y2);

wird zu
Delphi-Quellcode:
if runter <> 1 then
  rectangle(x,y,x1,y2);
Zitat:

Zitat von Fabbe
Nein, dass würde mir Delphi sagen.

Delphi gibt dir bei Syntaxfehlern bescheid, aber nicht, wenn die Logik falsch ist. Deddy meint wohl, ob du evtl. hier mehrere Zeilen beim "else" ausführen möchtest:

Delphi-Quellcode:
if runter <> 1 then
begin
  Rectangle(x, y, x1, y2);
  Brush.Color := clMaroon;
  Rectangle(x, y1, x1, y3);
end;
Da ich den Code aber nicht ganz nachvollziehen kann, weiß ich nicht, ob du das so haben möchtest, denn du schreibst explizit, dass dann nur eine Zeile ausgeführt werden soll. Es wäre sinnvoll, wenn du den Code dann entsprechend einrücken würdest:

Delphi-Quellcode:
if runter <> 1 then
  Rectangle(x, y, x1, y2);
Brush.Color := clMaroon;
Rectangle(x, y1, x1, y3);
Übrigens schadet es nicht, ein paar "begin" und "end" mehr zu setzen. Je nach Komplexität kann dir das sogar anstrengende Fehlersuchen ersparen, denn du siehst sofort, was wann ausgeführt wird. bei deiner Formatierung siehst du das nicht.
Zitat:

Zitat von Fabbe
Man braucht bei einer If-Bedinung kein begin und end zu benutzen; wenn man nur einen Befehl dahinter schreibt falls du dass meinst.

Ich denke, das weiß Deddy. :stupid:

Grüße

Edit: Da tippe ich mich dämlich und nun kamen in der Zwischenzeit ähnliche Antworten und nicht mal ein roter Kasten.

Fabbe 26. Mai 2008 19:53

Re: Tastendruck abfrage
 
na dann mach ich mich mal ans Werk... (wobei ich schon fast glaube, dass ich die Nacht durchmache, weil morgen muss der Spaß fertig sein :? )
Nunja falls mir noch jemand nützliche Tips geben will dann immer her damit :)
ich meld mich, falls etwas nicht geht.

Achso und ein dickes Danke an die fleißigen da oben :hello:
Grüße ...

DeddyH 27. Mai 2008 07:27

Re: Tastendruck abfrage
 
Der Rollstuhlfahrer hat genau das erklärt, was ich versucht habe, Dir klarzumachen :thumb: . Besser hätte ich es auch nicht sagen können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr.
Seite 3 von 3     123   

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