Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Dreilelei Fragen


20:30 - Mi 04.07.12 00:23
Titel: Dreilelei Fragen
So erste Frage:

Wie (Falls möglich) kann ich bei if-Abfragen zwei Varianten machen kann.

Ungefähr so:


Delphi-Quelltext
1:
2:
3:
4:
if if Boolean1 then Funcrion1(Meh, VMeh) = 0 else Function1(Meh2, VMeh2) = 0 then
begin
 Quellcode bleibt hier gleich.
end;


Oder so:


Delphi-Quelltext
1:
if Function1(if Boolean1 then Meh, VMeh else Meh2, VMeh2) = 0 then                    


Ich möchte nicht alles unten reinkopieren, da ein Haufen Zeilen da drinnen stehen.


Zweite Frage:

In einem MemoFeld soll nachhinein in eine selbe Zeile geschrieben werden.


Delphi-Quelltext
1:
2:
M_Meh.Lines.Add(ZKMeh.Attr1);
M_Meh.SelbeLine.Add(ZkeMeh.Attr2);


Dritte Frage:

Wie kann ich bei der 2. Frage, bzw. überhaupt, das beigefügte in ein Level rücken


Quelltext
1:
2:
3:
4:
5:
Test1                    True
Test2                    True
SuperLangerTest1         True
NochLängererText2        True
KurzerText1              True


Mit Tabs geht's nicht.

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt


Bergmann89 - Mi 04.07.12 00:49

Hey,

Frage 1:
Eine if-Anweisung erwartet einen Boolean. Das Ergebnis bei einem Vergleich ist ein Boolean. Booleans kann man mit logischen Operatoren (and, or, not, xor, ...) verknüpfen:

Delphi-Quelltext
1:
if (1 = 1and (2 = 2and (3 = 3then                    


Frage 2:

Delphi-Quelltext
1:
2:
3:
4:
5:
var
  LineID: Integer;
Memo1.Lines.Add('Text'); //Zeile einfügen
LineID := Memo1.Lines.Count-1//ID der Zeile speichern
Memo1.Lines[LineID] := 'anderer Text'//Wert der Zeile ändern


Frage 3:
Dazu musst du einfach ein paar Leerzeilen an den richtigen Stellen einfügen. Das geht aber nur bei Schriftarten wie z.B. Courier New, da dort alle Buchstaben die selbe Breite haben. Bei anderen Schriftarten ist das nicht so einfach.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure AddLine(aText: Stringconst aValue: Boolean; const aLength: Integer);
begin
  while Length(aText) < aLength do  //solange die Länge des Textes gleiner als die gewünschte Länge ist
    aText := aText + ' ';           //füge dem String ein Leerzeichen an
  if (aValue) then
    Memo1.Lines.Add(aText + 'true')
  else
    Memo1.Lines.Add(aText + 'false');
end;


Es scheint mir so, das du sehr große Wissenslücken bei den Grundlagen hast. Vlt wäre es angbrachter noch einmal ein Tutorial über Delphi durchzuarbeiten. Da kann ich das von Christian Stelzmann [http://www.christian-stelzmann.de/artikel/CrashkursReloaded/] empfehlen. Außerdem komtm mir das mit deinen haufen if-Abfragen etwas komisch vor. Wie genau sieht das denn aus? Das geht sicher einfacher. Normelerweiße hat man nie mehr als 3-4 Abfragen in einer Anweisung.

MfG Bergmann.


20:30 - Mi 04.07.12 01:15

Nah, an den Grundlagen (Zumindest die im Turorial) haperts eigentlich nicht. Nur die Erfahrung machts, dass ich lieber nach was Bytesparendere Methoden nachfrage.

Mit der If-Abfrage habe das ich nicht so gemeint (Okay, meine Beschreibeung war auch sehr ungenau).

and und or suche ich nicht.

Das Problem liegt bei den Variablen der Funktion innerhalb der If-Funktion, die geändert werden sollen, wenn ein andere boolean-Wert wahr/falsch ist.


Bergmann89 - Mi 04.07.12 01:26


Delphi-Quelltext
1:
if (Boolean1 and (Function1(Meh, VMeh) = 0)) or (not Boolean1 and (Function1(Meh2, VMeh2) = 0))) then                    

da du hier einmal Boolean1 und einmal not Boolean1 benutzt, hast du einen wechselseitigen Ausschluss. Heißt, wenn Boolean1 wahr ist, dann wird Function1(Meh, VMeh) ausgeführt und ausgewertet. Wenn Boolean1 falsch ist, dann wird Function1(Meh2, VMeh2) ausgeführt und ausgewertet.


Martok - Mi 04.07.12 02:29

Ach user profile iconBergmann89, du solltest doch das wissen :roll:


user profile icon20:30, bitte stell nicht mehere thematisch nicht zusammenhängende Fragen in einem Thread. Das führt (wie man hier schön sehen kann) zu ziemlichem Chaos, worum es denn grade geht. Eröffne für jede Frage einen Thread (in der passenden Sparte), unsere Datenbank kann das ab :zustimm:

Da einer hier schon angefangen hat zu antworten, schließe ich hier mal nicht gleich sondern lege moderativ fest, dass wir uns hier nur noch um den Vergleich kümmern. Bitte also für die Memo-Frage ein neues Thema erstellen.


rizla - Mi 04.07.12 02:33

user profile icon20:30 hat folgendes geschrieben Zum zitierten Posting springen:
Nah, an den Grundlagen (Zumindest die im Turorial) haperts eigentlich nicht. Nur die Erfahrung machts, dass ich lieber nach was Bytesparendere Methoden nachfrage.


Dann nutze Assembler! Spart garantiert jede Menge ;)


Blup - Mi 04.07.12 16:54

Schreibe deinen Code übersichtlich und wartbar, Byte kannst du an anderer Stelle sparen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if Boolean1 then
  ZwischenErgebnis := Function1(Meh, VMeh)
else
  ZwischenErgebnis := Function1(Meh2, VMeh2);

if ZwischenErgebnis = 0 then
begin
 Quellcode bleibt hier gleich.
end;

oder

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
if Boolean1 then
begin
  m := Meh;
  v := VMeh;
end
else
begin
  m := Meh2;
  v := VMeh2;
end;

if Function1(m, v) = 0 then
begin
 Quellcode bleibt hier gleich.
end;