Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi String Zeichen einzeln ausgeben (https://www.delphipraxis.net/173750-string-zeichen-einzeln-ausgeben.html)

Davidlocke13 14. Mär 2013 10:02

String Zeichen einzeln ausgeben
 
Morgen,

habe folgendes Problem, ich gebe eine Wort (String) in ein Edit ein und
möchte nun jeden einzelnen Buchstaben in einem neuem Edit ausgeben das ich zur Laufzeit erstelle !
Wie mache ich das am besten ?

LG

mkinzler 14. Mär 2013 10:08

AW: String Zeichen einzeln ausgeben
 
Worin besteht genau das Problem? Einzelen Buchstaben oder Erzeugung von Edits?

Davidlocke13 14. Mär 2013 10:16

AW: String Zeichen einzeln ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
einzeln die Buchstaben aus einem String auslesen und einzeln in einem Edit ausgeben!

z.b.

Anhang 38721

Sir Rufo 14. Mär 2013 10:20

AW: String Zeichen einzeln ausgeben
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1207364)
einzeln die Buchstaben aus einem String auslesen und einzeln in einem Edit ausgeben!

http://www.delphipraxis.net/173689-e...texlaenge.html :gruebel:

Wie oft möchtest du die Frage hier denn stellen?

Natcree 14. Mär 2013 10:24

AW: String Zeichen einzeln ausgeben
 
Versuchsmal hiermit

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
s : String;
e: array of char;
begin
s := edit1.text;
edit2.text:=s[1];
edit3.text:=s[2];
edit4.text:=s[3];
end;

Davidlocke13 14. Mär 2013 10:25

AW: String Zeichen einzeln ausgeben
 
Mir geht es nicht darum die Edits zur Laufzeit zu erstelle das hatten wir ja schon im anderen Beitrag abgehackt ! ich möchte einzel die Buchstaben aus dem String lesen und an die Edits übergeben !

Sir Rufo 14. Mär 2013 10:26

AW: String Zeichen einzeln ausgeben
 
Zitat:

Zitat von Natcree (Beitrag 1207366)
Versuchsmal hiermit

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
s : String;
e: array of char;
begin
s := edit1.text;
edit2.text:=s[1];
edit3.text:=s[2];
edit4.text:=s[3];
end;

Bist du dir sicher, dass du die Frage verstanden hast?

Sir Rufo 14. Mär 2013 10:29

AW: String Zeichen einzeln ausgeben
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1207367)
Mir geht es nicht darum die Edits zur Laufzeit zu erstelle das hatten wir ja schon im anderen Beitrag abgehackt ! ich möchte einzel die Buchstaben aus dem String lesen und an die Edits übergeben !

Delphi-Quellcode:
var
  LText : string;
  LIdx : Integer;
begin
  LText := 'Ein Toller Text';
  for LIdx := 1 to Length( LText ) do
  begin
    AEdit.Text := Text[LIdx]; // wie auch immer du an die Edit-Felder kommst
  end;
end;
@Natcree

Die ganz grobe Richtung stimmte aber ;)

Davidlocke13 15. Mär 2013 09:27

AW: String Zeichen einzeln ausgeben
 
SO hatte da noch ne kleine Pause gemacht da ich noch an einem anderen Projekt arbeite ;-)

Delphi-Quellcode:
procedure TForm2.BtnStartClick(Sender: TObject);
var
i: Integer;
begin
  EditText.Visible := false;
  BtnStart.Visible := false;
  BtnClear.Visible := false;
  SetLength(EditArray, i);
  Wort := EditText.Text;
for i:= 1 to length(EditText.text) do
  begin
    EditArray[i]:= TEdit.Create(Self);
    EditArray[i].Parent := Self;
    EditArray[i].Left:= 16 + ((EditArray[i].Left + 32) * i);
    EditArray[i].Top:= 380;
    EditArray[i].Width:= 30;
    EditArray[i].Font.Name := 'Comic Sans MS';
    EditArray[i].Font.Size := 14;
    EditArray[i].MaxLength := 1;
    EditArray[i].Alignment := taCenter;
  end;
end;
So erstelle ich meine Edits im Moment

Bjoerk 15. Mär 2013 09:34

AW: String Zeichen einzeln ausgeben
 
Hallo David,

du benutzt die Variabel I ohne vorher definiert zu haben und deine Schleife sollte wohl auch von Null bis Length(EditArray) - 1 laufen.

Gruß
Thomas

Davidlocke13 15. Mär 2013 09:40

AW: String Zeichen einzeln ausgeben
 
Delphi-Quellcode:
for i:= 1 to length(EditText.text) do
oder

Delphi-Quellcode:
for i:= 0 to length(EditText.text)-1 do
kommt das nicht aufs gleiche raus ?!

DeddyH 15. Mär 2013 09:44

AW: String Zeichen einzeln ausgeben
 
Nein, Strings beginnen bei Index 1, dynamische Arrays bei Index 0.

Davidlocke13 15. Mär 2013 09:47

AW: String Zeichen einzeln ausgeben
 
Zitat:

Zitat von DeddyH (Beitrag 1207514)
Nein, Strings beginnen bei Index 1, dynamische Arrays bei Index 0.

Ok gut zu wissen ;-)
Das Ergebnis schaut aber bei mir gleich aus, ist mir aufgefallen !

DeddyH 15. Mär 2013 09:49

AW: String Zeichen einzeln ausgeben
 
Dann schalt mal die Bereichsprüfung ein. Das erste Edit im Array wird überhaupt nicht angesprochen, dafür aber eins, das außerhalb des Arrays liegt.

Davidlocke13 15. Mär 2013 10:01

AW: String Zeichen einzeln ausgeben
 
Ok ich habe es jetzt gesehen ;-)

Sir Rufo 15. Mär 2013 10:04

AW: String Zeichen einzeln ausgeben
 
Warum hört eigentlich niemand auf Bjoerk?
Delphi-Quellcode:
var
  i: Integer;
begin
  ...
  SetLength(EditArray, i); // Preisfrage: Welchen Wert hat i zu diesem Zeitpunkt?
  ...
  for i:= 1 to length(EditText.text) do
    begin
      ...
    end;
end;
Mein Vorschlag daher
Delphi-Quellcode:
procedure TForm2.BtnStartClick(Sender: TObject);
var
  i: Integer;
begin
  EditText.Visible := false;
  BtnStart.Visible := false;
  BtnClear.Visible := false;

  Wort := EditText.Text;

  SetLength( EditArray, Length( Wort ) );

  for i:= 0 to High( EditArray ) do
  begin
    EditArray[i]:= TEdit.Create(Self);
    EditArray[i].Parent := Self;
    EditArray[i].Left:= 16 + ((EditArray[i].Left + 32) * i);
    EditArray[i].Top:= 380;
    EditArray[i].Width:= 30;
    EditArray[i].Font.Name := 'Comic Sans MS';
    EditArray[i].Font.Size := 14;
    EditArray[i].MaxLength := 1;
    EditArray[i].Alignment := taCenter;

    EditArray[i].Text := Wort[i + 1];
  end;
end;

Davidlocke13 15. Mär 2013 10:06

AW: String Zeichen einzeln ausgeben
 
Zitat:

Zitat von Sir Rufo (Beitrag 1207521)
Warum hört eigentlich niemand auf Bjoerk?

War gerade dabei das auszuprobieren ;-)

Übrigens es Funktioniert wunderbar !

Danke

Sir Rufo 15. Mär 2013 10:09

AW: String Zeichen einzeln ausgeben
 
Was bezweckst du eigentlich mit dieser Zeile:
Delphi-Quellcode:
...
EditArray[i].Left:= 16 + ((EditArray[i].Left + 32) * i);
...
Nimm die aktuell linke Position des neu erzeugten Controls (wo immer die auch liegen mag) und errechne aus diesem die neue linke Position???
Du bist dir sicher, dass du damit immer ein reproduzierbares und vorhersehbares Ergebnis bekommst?

Davidlocke13 15. Mär 2013 10:12

AW: String Zeichen einzeln ausgeben
 
Die Ausrichtung der Edits und das sollte eher so ;-)

Delphi-Quellcode:
EditArray[i].Left:= 50 +(32* i);

Sir Rufo 15. Mär 2013 10:14

AW: String Zeichen einzeln ausgeben
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1207525)
Die Ausrichtung der Edits und das sollte eher so ;-)

Delphi-Quellcode:
EditArray[i].Left:= 50 +(32* i);

Ok, aber dann würde ich auch eher das vorschlagen
Delphi-Quellcode:
...
EditArray[i].Width := 30;
EditArray[i].Left := 50 + ( EditArray[i].Width + 2 ) * i;
...

Davidlocke13 15. Mär 2013 10:15

AW: String Zeichen einzeln ausgeben
 
Stimmt ;-)


...oder auch nicht jetzt ist der Abstand der Edits zu Groß ! Der soll ja nicht "30+2" sein sondern nur "2"

Davidlocke13 15. Mär 2013 10:20

AW: String Zeichen einzeln ausgeben
 
Das einzige was mir noch zu meinem Glück fehlt ist eine Abfrage mit der ich sage, dass er was machen soll wen in einem Edit z.B. "A" drin steht !

DeddyH 15. Mär 2013 10:24

AW: String Zeichen einzeln ausgeben
 
Ungetestet:
Delphi-Quellcode:
procedure TForm2.DoOnEditChange(Sender: TObject);
begin
  if Sender is TEdit then
    if TEdit(Sender).Text = 'A' then
      ShowMessage('Aha');
end;

procedure TForm2.NewEdit(Index: integer; const DisplayText: string);
begin
  Assert((Index >= Low(EditArray)) and (Index <= High(EditArray), 'Ungültiger Index');
  EditArray[Index] := TEdit.Create(Self);
  EditArray[Index].Parent := Self;
  EditArray[Index].Left := 16 + (EditArray[Index].Left + 32) * i;
  EditArray[Index].Top := 380;
  EditArray[Index].Width := 30;
  EditArray[Index].Font.Name := 'Comic Sans MS';
  EditArray[Index].Font.Size := 14;
  EditArray[Index].MaxLength := 1;
  EditArray[Index].Alignment := taCenter;
  EditArray[Index].OnChange := DoOnEditChange;
  EditArray[Index].Text := DisplayText;
end;

procedure TForm2.RecreateEdits(const TextToDisplay: string);
var
  i: integer;
begin
  for i := Low(EditArray) to High(EditArray) do
    EditArray[i].Free;
  SetLength(EditArray, Length(TextToDisplay));
  for i := Low(EditArray) to High(EditArray) do
    NewEdit(i, TextToDisplay[i + 1]);
end;

procedure TForm2.BtnStartClick(Sender: TObject);
var
  i: Integer;
begin
  EditText.Visible := false;
  BtnStart.Visible := false;
  BtnClear.Visible := false;

  RecreateEdits(EditText.Text);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 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