Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - If Abfrage mit mehren Befhelen ohne Ends?


Robii - Mo 01.06.09 22:56
Titel: If Abfrage mit mehren Befhelen ohne Ends?
Hallo.

Delphi-Quelltext
1:
            if i = 65 then if shift = true then t:='A' else t:='a';;                    

klappt ja noch. Aber ich möchte gerne folgendes:

Delphi-Quelltext
1:
            if i = 65 then if shift = true then t:='A' shift := false else t:='a';;                    


Allerdings dürfen keine Ends vorhanden seien, da das ganze in

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
            if i = 53 then t:='5';
            if i = 54 then t:='6';
            if i = 55 then t:='7';
            if i = 56 then t:='8';
            if i = 57 then t:='9';
            if i = 65 then if shift = true then t:='A' else t:='a';;
            if i = 66 then t:='B';
            if i = 67 then t:='C';
            if i = 68 then t:='D';

geschieht und mit einem End die Variablen die zugewiesen sind nicht mehr funktionieren.

Wie kann ich dies realisieren?
Ps.: Mit einer eigenen Procedure habe ich es versucht scheitere aber daran, das ich nicht weiß wie ich die Werte i & t später wieder übergeben soll.
Grüße.


Regan - Mo 01.06.09 23:01

Wie wäre es mit case?


BenBE - Mo 01.06.09 23:03

Außerdem sollte man NIE explizit gegen True oder False Abgleichen; ein Boolean ist ein Boolean ist ein Boolean!


Robii - Mo 01.06.09 23:04

Sorry, kenne mich noch nicht so gut mit Delphi aus,
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Außerdem sollte man NIE explizit gegen True oder False Abgleichen; ein Boolean ist ein Boolean ist ein Boolean!
was willst du mir hiermit sagen?

Grüße.

Moderiert von user profile iconNarses: Zitat repariert


jaenicke - Mo 01.06.09 23:08

Suchst du vielleicht den Befehl Chr? Der wandelt den Asciicode in den Buchstaben um... (65 --> 'A', 66 --> 'B', ...)
Und Ord macht das Gegenteil.

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
was willst du mir hiermit sagen?
Der Vergleich mit Booleanwerten (z.B. if shift = true then) ist nicht nur unschön und unlogisch, sondern falsch.
Hier habe ich mal ein kleines Beispiel gebastelt, wann es schief geht:
http://www.delphi-forum.de/viewtopic.php?p=548760#548760
Mehr dazu steht hier:
http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/page/4/
Und warum das auch vollkommen unlogisch ist:
http://www.delphi-forum.de/viewtopic.php?p=560637#560637


Robii - Mo 01.06.09 23:15

Kann mir jemand einen Beispiel-Code zu dem 'case' geben ?
Weiß nicht genau, wie ich das da eibringen soll.Grüße.


jaenicke - Mo 01.06.09 23:19


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
case i of
  ...
  53: t:='5';
  54: t:='6';
  55: t:='7';
  56: t:='8';
  57: t:='9';
  65if shift then t:='A' else t:='a';
  66: t:='B';
  67: t:='C';
  68: t:='D';
  ...
end;
oder einfach (wie gesagt):

Delphi-Quelltext
1:
2:
3:
4:
if shift then
  t := Chr(i)
else
  t := Chr(i + 32);


Robii - Mo 01.06.09 23:21

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Das war mir schon klar, aber es ging ja darum, das der untere Code ergänz auf folgendes werden muss :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  53: t:='5';
  54: t:='6';
  55: t:='7';
  56: t:='8';
  57: t:='9';
  65if shift then t:='A' shift := false else t:='a';
  66: t:='B';
  67: t:='C';
  68: t:='D';

das nachdem dann ein großes A geschrieben worden ist, die Shift - Taste indirekt auch wieder false ist.
Grüße.


jaenicke - Mo 01.06.09 23:23

Da fehlt dann begin und end, aber was hast du gegen Chr, da sparst du dir doch die ganze manuelle Behandlung...


Robii - Mo 01.06.09 23:27

Chr ?
Wie benutze ich das?

Weiß gar nicht was das ist und bin aus dem Beitrag eben auch nicht wirklich schlau geworden wie ich mir das vorstelllen soll.


jaenicke - Mo 01.06.09 23:29

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
  t := Chr(i);                    
Das gibt den Buchstaben zu dem Asciicode zurück, wie gesagt...


Robii - Mo 01.06.09 23:31

Ok, und wie unterscheide ich dann zwischen groß & klein ? Verstehe das Prinzip noch nicht so ganz.
Grüße.


Georg08 - Mo 01.06.09 23:31

Delphi-Syntax:

Delphi-Quelltext
1:
function Chr(X: Byte): Char;                    

Beschreibung

Chr gibt das Zeichen zurück, das dem im Byte-Wert X angegebenen Ordinalwert (ASCII-Wert) entspricht.


jaenicke - Mo 01.06.09 23:32

http://www.torsten-horn.de/techdocs/ascii.htm
A ist 65, a ist 97...


Robii - Di 02.06.09 00:04

ich weiß nicht wie ich das einbringen soll. Kann mir da jemand evtl. einen Beispiel-Code schreiben?
Steh auf der Leitung.

Grüße.


jaenicke - Di 02.06.09 00:06

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
  t := Chr(i);                    
Das ist das Beispiel... :roll:
Das macht von dem Shift abgesehen das selbe wie dein ganzes if bzw. case...


Robii - Di 02.06.09 00:28

Wie kann ich die Funktion denn jetzt noch so erweiter, das sie groß & klein Schreibung beachtet ?

Grüße.


jaenicke - Di 02.06.09 00:30

Die Funktion beachtet die von sich aus, streng nach Tabelle (siehe oben). Wenn du den Asciicode anders interpretieren willst, dann musst du z.B. 32 addieren um aus einem Groß- einen Kleinbuchstaben zu machen und umgekehrt.


Boldar - Di 02.06.09 00:54

Oder mir lowercase bzw. uppercase arbeiten...
mein delphi hat da sone schöne funktion wenn man f1 drückt...


Robii - Di 02.06.09 01:25

Mein Delphi hat keine schöne Funktion wenn man F1 drückt, weil man mit Vista die Hilfe-Datei nicht mehr lesen kann.

Mein Programm basiert aber auf der Eingabe, das heißt, das wenn jemand etwas eingibt die Funktion aktiv wird, wie kann ich da feststellen, ob ein großes A oder ein kleines a eingegebn worden ist?

Grüße.


Boldar - Di 02.06.09 02:11

Benutz halt Chr...
Oder das hier [http://tinyurl.com/nn5ufc], erster Eintrag, und sag nicht, du kannst kein Englisch, dann kannst du gleich mit Programmieren aufhören und dich hier nie mehr blicken lassen :wink:


alzaimar - Di 02.06.09 06:18

Mir scheint, Du postest den falschen Code.
WO wird etwas eingegeben und WAS willst Du damit machen.

Wenn du eine TEdit-Komponente auf ein Formular schmeisst, steht dort doch schon drin, WAS eingegeben wird... Ich versteh's nicht.

P.S.: Wenn Du eine alte Delphi-Version verwendest, dessen Hilfesystem von Vista nicht mehr unterstützt wird, dann besorg Dir eine neuere Delphi-Version.


Narses - Di 02.06.09 10:12

Moin!

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Mein Delphi hat keine schöne Funktion wenn man F1 drückt, weil man mit Vista die Hilfe-Datei nicht mehr lesen kann.
user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:
P.S.: Wenn Du eine alte Delphi-Version verwendest, dessen Hilfesystem von Vista nicht mehr unterstützt wird, dann besorg Dir eine neuere Delphi-Version.
Oder mach das, was alle anderen, die das gleiche Problem haben, auch tun... installiere das entsprechende Softwareupdate [http://www.delphi-library.de/viewtopic.php?t=89408&highlight=vista+hilfe]. :roll: ;)

cu
Narses