Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Wie kann man bei Lazarus in einem Memo alle Zeichen nebeneinander bekommen? (https://www.delphipraxis.net/187140-wie-kann-man-bei-lazarus-einem-memo-alle-zeichen-nebeneinander-bekommen.html)

PaulMaler 30. Okt 2015 17:23

Wie kann man bei Lazarus in einem Memo alle Zeichen nebeneinander bekommen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Code:
procedure TForm1.Button3Click(Sender: TObject);
var x:integer; y:string;
begin
  label1.caption:=' ';
  wor:=memo1.text;
  s:=wor;
  memo1.clear;
  for i:=1 to length(s) do
begin
  x:=ord(s[i]);
begin
  If x=69 Then x:=90 Else
  If x=101 Then x:=122 Else
  x:=x
end;
  y:=chr(x);
  Memo1.Lines.strings[0]:=memo1.lines.strings[0]+y;
end;
end
Ich habe ein Programm geschrieben, in dem alle e bzw. E gegen z und Z ausgetauscht werden. Die Ausgabe erfolgt in einem Memo, was soweit auch alles klappt, zumindest, solange der Anfangstext nur eine Zeile lang ist. Sobald der Text mehr als eine Zeile einnimmt, schreibt das Programm einige Wortschnipsel untereinander ins Memo... und irgendwie rückwerts. Vllt hat einer von euch ja eine Idee, wie ich das hinbekommen kann, außer, dass ich die Zeile länger mache. Dankeschön schonmal im Vorraus und falls ihr weitere Infos wollt einfach fragen. Auf dem Bild seht ihr, was ich meine.

nahpets 30. Okt 2015 17:29

AW: Wie kann man bei Lazarus in einem Memo alle Zeichen nebeneinander bekommen?
 
Bei Delphi hat das Memo ein Attribut WordWrap. Ist dieses = true, so macht das Memo, sobald eine Zeile "voll" ist, selbständig einen Zeilenumbruch.

Sollte es diese Attribut unter Lazarus auch geben, so setze es mal auf false, dann sollte der automatische Zeilenumbruch entfallen.

PaulMaler 30. Okt 2015 17:42

AW: Wie kann man bei Lazarus in einem Memo alle Zeichen nebeneinander bekommen?
 
Also an sich klappt das so, aber das ist dann ja wieder komplett ohne Zeilenumbrüche und es soll aber alles untereinander geschrieben sein. Praktisch soll es wie bei einer ganz normalen Word Seite aussehen. Geht das irgendwie? Ansonsten nehm ich auch das. Danke dafür auf jeden Fall.

Perlsau 30. Okt 2015 18:03

AW: Wie kann man bei Lazarus in einem Memo alle Zeichen nebeneinander bekommen?
 
Benutze doch einfach SelText:
Delphi-Quellcode:
procedure TForm1.BtnE2ZClick(Sender: TObject);
Var
  i : Intgeger;
 
begin
  For i := 0 To Length(MyMemo.Text) -1 Do
  Begin
    MyMemo.SelStart := i;
    MyMemo.SelLength := 1;
    If MyMemo.SelText = 'E' Then MyMemo.SelText := 'Z';
    If MyMemo.SelText = 'e' Then MyMemo.SelText := 'z';
  End;
end;
Oder mit dem Text-String direkt (Achtung: Hier hat das erste zeichen den Index 1):
Delphi-Quellcode:
procedure TForm1.BtnE2ZClick(Sender: TObject);
Var
  i : Intgeger;
 
begin
  For i := 1 To Length(MyMemo.Text) Do
  Begin
    If MyMemo.Text[i] = 'E' MyMemo.Text[i] := 'Z';
    If MyMemo.Text[i] = 'e' MyMemo.Text[i] := 'z';
  End;
end;
Oder noch einfacher mit ReplaceStr aus der Unit StrUtils:
Delphi-Quellcode:
procedure TForm1.BtnE2ZClick(Sender: TObject);
Var
  i : Intgeger;
 
begin
  MyMemo.Text := StrUtils.ReplaceStr(MyMemo.Text,'E','Z');
  MyMemo.Text := StrUtils.ReplaceStr(MyMemo.Text,'e','z');
end;
Ob's ReplaceStr unter Lazarus gibt, vermag ich jetzt nicht zu beantworten.

nahpets 30. Okt 2015 18:06

AW: Wie kann man bei Lazarus in einem Memo alle Zeichen nebeneinander bekommen?
 
Wenn Du immer in die Zeile 0 schreibst, ist das Ergebnis auch immer in der Zeile 0.

Mir ist nicht klar, was Du da machen willst:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var x:integer; y:string;
begin
  label1.caption := ' ';
  wor := memo1.text;
  s := wor;
  memo1.clear;
  for i:=1 to length(s) do begin // wo ist i definiert?
    x:=ord(s[i]);
    begin
      If x=69 Then x:=90 Else
      If x=101 Then x:=122 Else
      x:=x; // sittlicher Nährwert?
    end;
    y:=chr(x);
    Memo1.Lines.strings[0]:=memo1.lines.strings[0]+y;
  end;
end;
Meinst Du eventuell sowas?
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var x:integer; y:string;
    i, k : Integer;
    s : String;
    t : String;
begin
  label1.caption := ' ';
  for k := 0 to memo1.lines.count - 1 do begin
    s := memo1.lines[k];
    t := '';
    for i := 1 to length(s) do begin
      x := ord(s[i]);
      If x = 69 Then x := 90 Else
      If x = 101 Then x := 122;
      t := t + chr(x);
    end;
    Memo1.Lines[k] := t;
  end;
end;
(nur hingedaddelt und nicht getestet)

PaulMaler 30. Okt 2015 18:22

AW: Wie kann man bei Lazarus in einem Memo alle Zeichen nebeneinander bekommen?
 
Jetzt gehts, vielen vielen Dank. Ich weiß zwar nicht wirklich was mit dem
Code:
memo1.lines.count - 1
anzufangen, aber dafür mach ich das wohl auch noch nicht lange genug. Auf jeden Fall danke dafür.

PaulMaler 30. Okt 2015 18:27

AW: Wie kann man bei Lazarus in einem Memo alle Zeichen nebeneinander bekommen?
 
Wo ich gerade die ganzen superantworten hier sehe sollte ich vllt erwähnen, dass das nur schulisches Programmieren ist. Mit den ganzen Möglichkeiten von denen hier momentan die Rede ist, kann ich halt echt noch nicht viel anfangen, aber das kommt auch noch. Davon abgesehen, dass ich das mehr in meiner Freizeit mache als in der Schule und die Schüler gerade so mit den Edit Fenstern und Buttons umgehen können... Danke auf jeden Fall für eure Hilfe. Je mehr man macht, jemehr lernt an. Und vor allem immer Neues.

Perlsau 30. Okt 2015 20:02

AW: Wie kann man bei Lazarus in einem Memo alle Zeichen nebeneinander bekommen?
 
Zitat:

Zitat von PaulMaler (Beitrag 1320245)
Jetzt gehts, vielen vielen Dank. Ich weiß zwar nicht wirklich was mit dem
Code:
memo1.lines.count - 1
anzufangen, aber dafür mach ich das wohl auch noch nicht lange genug. Auf jeden Fall danke dafür.

Wenn du durch eine Liste – wie z.B. die Stringliste Lines eines TMemos – iterierst, mußt du darauf achten, ob die Zählung bei 0 oder bei 1 beginnt. Bei Strings beginnt die Zählung immer bei 1. Bei Listen hat das erste Item immer den Index 0. Wenn du daher Count einer Stringliste abfragst und z.B. 100 als Resultat erhältst, dann geht der Index der Liste von 0-99, und deshalb mußt du beim Count 1 abziehen, sonst referenzierst du im letzten Durchlauf der Schleife einen Index, den es gar nicht gibt, und das führt zu einer Zugriffsverletzung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 Uhr.

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