![]() |
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 |
AW: String Zeichen einzeln ausgeben
Worin besteht genau das Problem? Einzelen Buchstaben oder Erzeugung von Edits?
|
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 |
AW: String Zeichen einzeln ausgeben
Zitat:
![]() Wie oft möchtest du die Frage hier denn stellen? |
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; |
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 !
|
AW: String Zeichen einzeln ausgeben
Zitat:
|
AW: String Zeichen einzeln ausgeben
Zitat:
Delphi-Quellcode:
@Natcree
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; Die ganz grobe Richtung stimmte aber ;) |
AW: String Zeichen einzeln ausgeben
SO hatte da noch ne kleine Pause gemacht da ich noch an einem anderen Projekt arbeite ;-)
Delphi-Quellcode:
So erstelle ich meine Edits im Moment
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; |
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 |
AW: String Zeichen einzeln ausgeben
Delphi-Quellcode:
oder
for i:= 1 to length(EditText.text) do
Delphi-Quellcode:
kommt das nicht aufs gleiche raus ?!
for i:= 0 to length(EditText.text)-1 do
|
AW: String Zeichen einzeln ausgeben
Nein, Strings beginnen bei Index 1, dynamische Arrays bei Index 0.
|
AW: String Zeichen einzeln ausgeben
Zitat:
Das Ergebnis schaut aber bei mir gleich aus, ist mir aufgefallen ! |
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.
|
AW: String Zeichen einzeln ausgeben
Ok ich habe es jetzt gesehen ;-)
|
AW: String Zeichen einzeln ausgeben
Warum hört eigentlich niemand auf Bjoerk?
Delphi-Quellcode:
Mein Vorschlag daher
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;
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; |
AW: String Zeichen einzeln ausgeben
Zitat:
Übrigens es Funktioniert wunderbar ! Danke |
AW: String Zeichen einzeln ausgeben
Was bezweckst du eigentlich mit dieser Zeile:
Delphi-Quellcode:
Nimm die aktuell linke Position des neu erzeugten Controls (wo immer die auch liegen mag) und errechne aus diesem die neue linke Position???
...
EditArray[i].Left:= 16 + ((EditArray[i].Left + 32) * i); ... Du bist dir sicher, dass du damit immer ein reproduzierbares und vorhersehbares Ergebnis bekommst? |
AW: String Zeichen einzeln ausgeben
Die Ausrichtung der Edits und das sollte eher so ;-)
Delphi-Quellcode:
EditArray[i].Left:= 50 +(32* i);
|
AW: String Zeichen einzeln ausgeben
Zitat:
Delphi-Quellcode:
...
EditArray[i].Width := 30; EditArray[i].Left := 50 + ( EditArray[i].Width + 2 ) * i; ... |
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" |
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 !
|
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 08:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz