Autor Beitrag
Schuldelphi Nutzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 11.01.09 22:00 
user profile iconSchuldelphi Nutzer hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 11.01.09 22:23 
Beispiel:
ausblenden Im Memo steht...
1:
2:
Das ist ein Test.
Und das die zweite Zeile.
Dann sind die Inhalte:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Memo1.Text = 'Das ist ein Test.'#13#10'Und das die zweite Zeile.'
// #13#10 ist der Zeilenumbruch

// Erste und zweite Zeile:
Memo1.Lines[0] = 'Das ist ein Test.'
Memo1.Lines[1] = 'Und das die zweite Zeile.'
Wenn du jetzt Memo1.Lines.Insert(0, 'Neue Zeile'); ausführst, dann steht im Memo:
ausblenden Quelltext
1:
2:
3:
Neue Zeile
Das ist ein Test.
Und das die zweite Zeile.
Wenn du aber den Text veränderst:
ausblenden Delphi-Quelltext
1:
Memo1.Text := 'Test' + Memo1.Text;					
dann steht danach drin:
ausblenden Quelltext
1:
2:
TestDas ist ein Test.
Und das die zweite Zeile.
Denn es wird ja nur dieser neue String vor den alten Inhalt geschrieben, aber keine neue Zeile, also auch kein Zeilenumbruch, neu hinzugefügt.
Schuldelphi Nutzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 11.01.09 22:54 
user profile iconSchuldelphi Nutzer hat folgendes geschrieben Zum zitierten Posting springen:
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. :gruebel:
Schuldelphi Nutzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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.

ausblenden volle Höhe Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ausblenden 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];
  //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
  ...
kannst du schreiben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
begin
  if not (Sender is TButton) then // Das solltest du prüfen vor harten Casts.
    Exit;
  zeichen := Memo1.Lines.Strings[0];
  //Zahlen
  if TButton(Sender).Caption[1in ['0'..'9'then
  begin
    ...
Schuldelphi Nutzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 11.01.09 23:17 
wie häng ich das komplett dran? :)
edit: gefunden!
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden volle Höhe Delphi-Quelltext
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];
  //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.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;

  //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.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;

   //AC     => löschen
  If (TButton(Sender).Caption = 'AC'then
  begin
    Memo1.Lines.Clear;
    Edit1.Text := '';
  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.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;     // leert bei start das Memo Fenster
  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. ;-)