| Autor |
Beitrag |
Schuldelphi Nutzer 
      
Beiträge: 20
|
Verfasst: So 11.01.09 18:54
Also müsste ich immer Memo1.Lines.Insert durch Memo1.Text := 'Dein Text' + Memo1.Text; ersetzen? Und das danach dahinter?
Oh man ich bin wohl echt auf den Kopf gefallen...
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 11.01.09 22:00
Schuldelphi Nutzer hat folgendes geschrieben : | | Oh man ich bin wohl echt auf den Kopf gefallen... |
So würde ich das nicht sagen, ich glaube, dass dir nicht ganz genau klar ist was genau welche Zeile bei dir macht. Und das ist nicht gut, denn dann kannst du schlecht etwas am Quelltext ändern oder so umschreiben, wie du es haben möchtest.
Deshalb solltest du wirklich überlegen ob dir bei allem klar ist, was da passiert, und nachschauen (F1 - Hilfe  ), wenn du unsicher bist was ein Befehl macht.
Dein "Insert(0, ..." hat ja den übergebenen Text vor der Zeile 0, also als neue erste Zeile eingefügt. Und deshalb stand das natürlich nicht mehr in der selben Zeile.
Memo1.Text enthält den gesamten Text, wenn du also ohne einen Zeilenumbruch hineinzuschreiben dies veränderst, dann bleibt das auch in einer Zeile. 
|
|
Schuldelphi Nutzer 
      
Beiträge: 20
|
Verfasst: So 11.01.09 22:16
Heißt das, ich muss überall einfach die Strings entfernen?
Möchte das noch unbeding hinbekommen^^ Und ja ich weiß, ich versteh den Code nicht wirklich komplett 
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 11.01.09 22:23
|
|
Schuldelphi Nutzer 
      
Beiträge: 20
|
Verfasst: So 11.01.09 22:39
hm also das ist schonmal eine gute erklärung, ich denke, die hab ich soweit auch verstanden.
Jedoch anwenden ist immmernoch schwierig.
Außerdem sagt er immer, dass der dieses "text" nicht kennt.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 11.01.09 22:54
Schuldelphi Nutzer hat folgendes geschrieben : | | Außerdem sagt er immer, dass der dieses "text" nicht kennt. |
Bei welchem Quelltext kommt welcher Fehler?
Du kannst auch Memo1.Lines.Text benutzen, aber selbst Delphi 3 kennt Memo1.Text eigentlich schon. 
|
|
Schuldelphi Nutzer 
      
Beiträge: 20
|
Verfasst: So 11.01.09 23:03
Hm also jetzt geht es, also das mit dem umschreiben. Aber geändert hat sich nix. außer dass der nicht mehr "=" kann.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158:
| unit mTaschenrechner;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Math, StdCtrls;
type TForm1 = class(TForm) bt7: TButton; bt8: TButton; bt9: TButton; bt4: TButton; bt5: TButton; bt6: TButton; bt1: TButton; bt2: TButton; bt3: TButton; bt0: TButton; btAC: TButton; btAddition: TButton; btMultiplikation: TButton; btDivision: TButton; btSubtraktion: TButton; btGleich: TButton; btPunkt: TButton; Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure btZahlenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btZahlenClick(Sender: TObject); var zeichen: String; posi: Integer; ergebnis: Real; begin zeichen := Memo1.Lines.Strings[0]; //Zahlen If (TButton(Sender).Caption = '0') or (TButton(Sender).Caption = '1') or (TButton(Sender).Caption = '2') or (TButton(Sender).Caption = '3') or (TButton(Sender).Caption = '4') or (TButton(Sender).Caption = '5') or (TButton(Sender).Caption = '6') or (TButton(Sender).Caption = '7') or (TButton(Sender).Caption = '8') or (TButton(Sender).Caption = '9')
then
begin
If (zeichen = '0') then begin Memo1.Lines.text:= Copy(Memo1.Lines.text,0,length(Memo1.Lines.text)-1); end;
If (zeichen <> '+') and (zeichen <> '-') and (zeichen <> '*') and (zeichen <> '/') then begin Memo1.Lines.text:= Memo1.Lines.text+TButton(Sender).Caption; end else Memo1.Lines.Insert(0,TButton(Sender).Caption); end;
//Rechenzeichen If (TButton(Sender).Caption = '+') or (TButton(Sender).Caption = '-') or (TButton(Sender).Caption = '*') or (TButton(Sender).Caption = '/') then begin If (zeichen <> '+') and (zeichen <> '-') and (zeichen <> '*') and (zeichen <> '/')
then begin Memo1.Lines.Insert(0,TButton(Sender).Caption); end; end;
//Ergebnis If (TButton(Sender).Caption = '=') then begin If Memo1.Lines.text= '+' then begin ergebnis := StrToFloat(Memo1.Lines.text) + StrToFloat(Memo1.Lines.text); Memo1.Lines.Insert(0,FloatToStr(ergebnis)); end;
If Memo1.Lines.text= '-' then begin ergebnis := StrToFloat(Memo1.Lines.text) - StrToFloat(Memo1.Lines.text); Memo1.Lines.Insert(0,FloatToStr(ergebnis)); end;
If Memo1.Lines.text= '*' then begin ergebnis := StrToFloat(Memo1.Lines.text) * StrToFloat(Memo1.Lines.text); Memo1.Lines.Insert(0,FloatToStr(ergebnis)); end;
If Memo1.Lines.text= '/' then begin ergebnis := StrToFloat(Memo1.Lines.text) / StrToFloat(Memo1.Lines.text); Memo1.Lines.Insert(0,FloatToStr(ergebnis)); end; end;
//AC => löschen If (TButton(Sender).Caption = 'AC') then begin Memo1.Lines.Clear; end;
//Komma If (TButton(Sender).Caption = ',') then begin posi := pos(',',zeichen); If posi = 0 then begin If (zeichen <> '+') AND (zeichen <> '-') AND (zeichen <> '*') AND (zeichen <> '/') then begin Memo1.Lines.text := Memo1.Lines.text+TButton(Sender).Caption; end else Memo1.Lines.Insert(0,'0' + TButton(Sender).Caption); end; end; end;
procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Lines.Clear; // leert bei start das Memo Fenster end;
end. |
Magst du mir das bitte in den ersten Quelltext einfügen? Ich weiß, sowas macht eigentlich keiner(kenn solche Fragen bei Grafikprogrammen, wenn irgendwelche Leute ankommen "kann ich nicht mach mal" ), aber ich packs echt nicht.Dabei hab ichs ja nun mehrfach versucht  . Hab auch Informatik mitlerweile abgewählt, dürfte somit nurnoch dieses Programm sein  Unter anderen Umständen hätte ich gern weiter gemacht.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 11.01.09 23:11
Also so richtig verstehe ich noch nicht, wie das genau ablaufen soll. Häng doch mal das ganze Projekt an, das ist dann schneller nachzuvollziehen wie das ganze ablaufen soll.
Kürzer geht es z.B. am Anfang. Statt Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| begin zeichen := Memo1.Lines.Strings[0]; If (TButton(Sender).Caption = '0') or (TButton(Sender).Caption = '1') or (TButton(Sender).Caption = '2') or (TButton(Sender).Caption = '3') or (TButton(Sender).Caption = '4') or (TButton(Sender).Caption = '5') or (TButton(Sender).Caption = '6') or (TButton(Sender).Caption = '7') or (TButton(Sender).Caption = '8') or (TButton(Sender).Caption = '9')
then
begin ... | kannst du schreiben: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| begin if not (Sender is TButton) then Exit; zeichen := Memo1.Lines.Strings[0]; if TButton(Sender).Caption[1] in ['0'..'9'] then begin ... |
|
|
Schuldelphi Nutzer 
      
Beiträge: 20
|
Verfasst: So 11.01.09 23:17
wie häng ich das komplett dran?
edit: gefunden!
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 11.01.09 23:46
Also im Moment greifst du ja auf die Zeilen in dem Memo zu um die Teile zu trennen. Stattdessen müsstest du dies in Variablen speichern. Zahl1, Operator und Zahl2 zum Beispiel.
Die unsaubere Lösung wäre das Memo zu verstecken und die Eingaben nochmal ohne Zeilenumbrüche hintereinander in ein Edit zu schreiben.
|
|
Schuldelphi Nutzer 
      
Beiträge: 20
|
Verfasst: So 11.01.09 23:52
Hm also wird das wohl nix mehr mit dem in eine Zeile schreiben.
Bin morgen früh noch mal kurz on, aber danach muss ich abgeben.
Falls mir doch noch jemand so den Text umschreiben würde, dass alles in einer Zeile ist währe ich auf ewig dankbar.
Aber dir jaenicke schonmal einen riesen Dank, du hast dir wirklich viel Geduld genommen auch wenn ich wohl ziemlich nervige Fragen stelle 
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 12.01.09 00:16
Ok, also ich halte dir zu Gute, dass du dich zumindest bemüht hast, deshalb helfe ich mal bei der unsauberen Variante nach, das ist nämlich nicht so viel:
Leg ein Editfeld auf das Formular, setze Visible vom Memo auf False. Und dann ergänze diese Zeilen: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117:
| procedure TForm1.btZahlenClick(Sender: TObject); var zeichen: String; posi: Integer; ergebnis: Real; begin Edit1.Text := Edit1.Text + TButton(Sender).Caption; zeichen := Memo1.Lines.Strings[0]; If (TButton(Sender).Caption = '0') or (TButton(Sender).Caption = '1') or (TButton(Sender).Caption = '2') or (TButton(Sender).Caption = '3') or (TButton(Sender).Caption = '4') or (TButton(Sender).Caption = '5') or (TButton(Sender).Caption = '6') or (TButton(Sender).Caption = '7') or (TButton(Sender).Caption = '8') or (TButton(Sender).Caption = '9')
then
begin
If (zeichen = '0') then begin Memo1.Lines.Strings[0] := Copy(Memo1.Lines.Strings[0],0,length(Memo1.Lines.Strings[0])-1); end;
If (zeichen <> '+') and (zeichen <> '-') and (zeichen <> '*') and (zeichen <> '/') then begin Memo1.Lines.Strings[0] := Memo1.Lines.Strings[0]+TButton(Sender).Caption; end else Memo1.Lines.Insert(0,TButton(Sender).Caption); end;
If (TButton(Sender).Caption = '+') or (TButton(Sender).Caption = '-') or (TButton(Sender).Caption = '*') or (TButton(Sender).Caption = '/') then begin If (zeichen <> '+') and (zeichen <> '-') and (zeichen <> '*') and (zeichen <> '/')
then begin Memo1.Lines.Insert(0,TButton(Sender).Caption); end; end;
If (TButton(Sender).Caption = '=') then begin If Memo1.Lines.Strings[1] = '+' then begin ergebnis := StrToFloat(Memo1.Lines.Strings[2]) + StrToFloat(Memo1.Lines.Strings[0]); Memo1.Lines.Insert(0,FloatToStr(ergebnis)); end;
If Memo1.Lines.Strings[1] = '-' then begin ergebnis := StrToFloat(Memo1.Lines.Strings[2]) - StrToFloat(Memo1.Lines.Strings[0]); Memo1.Lines.Insert(0,FloatToStr(ergebnis)); end;
If Memo1.Lines.Strings[1] = '*' then begin ergebnis := StrToFloat(Memo1.Lines.Strings[2]) * StrToFloat(Memo1.Lines.Strings[0]); Memo1.Lines.Insert(0,FloatToStr(ergebnis)); end;
If Memo1.Lines.Strings[1] = '/' then begin ergebnis := StrToFloat(Memo1.Lines.Strings[2]) / StrToFloat(Memo1.Lines.Strings[0]); Memo1.Lines.Insert(0,FloatToStr(ergebnis)); end; Edit1.Text := Edit1.Text + FloatToStr(ergebnis); end;
If (TButton(Sender).Caption = 'AC') then begin Memo1.Lines.Clear; Edit1.Text := ''; end;
If (TButton(Sender).Caption = ',') then begin posi := pos(',',zeichen); If posi = 0 then begin If (zeichen <> '+') AND (zeichen <> '-') AND (zeichen <> '*') AND (zeichen <> '/') then begin Memo1.Lines.Strings[0] := Memo1.Lines.Strings[0]+TButton(Sender).Caption; end else Memo1.Lines.Insert(0,'0' + TButton(Sender).Caption); end; end; end;
procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Lines.Clear; Edit1.Text := ''; end; | Das FormCreate kannst du ganz weglassen, wenn du den Inhalt über den Objektinspektor bereits in Delphi in Lines bzw. beim Edit in Text löschst.
Dann ist nämlich beim Start des Programms schon gar nix mehr im Memo bzw. Edit, du musst es also gar nicht löschen. 
|
|
|