Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Text/Zahlen auf mehrere Editfelder aufteilen (https://www.delphipraxis.net/191637-text-zahlen-auf-mehrere-editfelder-aufteilen.html)

Apocalypse89 4. Feb 2017 21:05

Text/Zahlen auf mehrere Editfelder aufteilen
 
Hallo, bin neu hier im Forum.

bin ein blutiger Anfänger, meine Grundkenntnisse reichen gerade so für die Basics in TurboPascal
und Delphi aus meiner Schulzeit(über 15 Jahre her:roll:).

Ich möchte ein Programm schreiben, dass ich für die Arbeit nutzen kann, es soll im Grunde genommen eine erleichterung für mich und meine Kollegen sein eine Diagnose so übersetzten.
Diese wird nur in HEX in 2er Grüppchen ausgegeben und besteht aus mehreren Zeilen, wobei jeweils eine Zweiergruppe einen bestimmten Zustand eines Anlagenteils ausgibt.
Ich benutze dafür die aktuelle Version von Lazarus auf Windoof.

Nun mein Problem:
ich möchte gerne die ganze Zeile kopieren und in das erste Edit-Feld einfügen, dabei sollen nur jeweils 2 Zeichen pro Feld eingefügt werden.
Bsp.: der HEX-Code sieht so aus "01 00 02 05 FF 04 09"
diesen möchte ich nur per Copy & Paste in 7 Editfelder einfügen....

wie stelle ich das an?

zeras 4. Feb 2017 21:18

AW: Text/Zahlen auf mehrere Editfelder aufteilen
 
Wenn ich dich richtig verstehe, dann hast du einen String mit jeweils 7 Hex Zahlen und die willst du in 7 Editfelder bringen?
Du kannst mit copy die ersten 2 Zeichen aus dem String lesen und ins 1. Editfeld bringen. Dann das Leerzeichen löschen und wieder 2 Zeichen lesen. Dies dann ins 2. Editfeld bringen, u.s.w.
Ist das so in etwas das, was du willst?

Apocalypse89 4. Feb 2017 21:26

AW: Text/Zahlen auf mehrere Editfelder aufteilen
 
im grunde ja,

ich möchte die ganze HEX-Zeile kopieren, dann rechtsklick ins erste Edit-Feld und Einfügen...
Dann sollen in jedem Editfeld 2 Stellen stehen.

himitsu 4. Feb 2017 21:40

AW: Text/Zahlen auf mehrere Editfelder aufteilen
 
Delphi-Referenz durchsuchenSystem.Copy
Delphi-Referenz durchsuchenSystem.Delete
Aber eigentlich reicht Copy, also jeweils 2 Zeichen ab Positionen 1, 4, 7, 10 usw.

Im ersten Edit darf keine Maximallänge angegeben sein, sonst wird es beim Einfügen (Paste) abgeschnitten.
Im Edit.OnChange auf Änderungen mit Länge>2 reagieren, den Text auslesen und dann aufteilen und auf die Edits verteilen.

Und dann gibt es auch Funktionen ala Split bzw. SplitString.

p80286 4. Feb 2017 21:43

AW: Text/Zahlen auf mehrere Editfelder aufteilen
 
Gegenfrage, Wofür soll das gut sein?
Ob Du Aus Deiner Quelle das Hex-Pärchen kopierst oder aus einem Edit-Feld, bleibt sich ziemlich gleich.
Ich vermute Du hast noch etwas mehr mit den Daten vor?

Gruß
K-H

Apocalypse89 4. Feb 2017 21:52

AW: Text/Zahlen auf mehrere Editfelder aufteilen
 
ja also der Rest ist schon fertig, es fehlt jetzt nur noch das einfügen der ganzen zeile, bisher musste ich jeden 2er block einzeln eintragen.
Also der Hintergrund des Programms ist so, jede HEX zeile bezieht sich auf einen Lampenfaden in einem Signal, jeder 2er Block der Zeile steht für eine bestimmte Eigenschaft und diese will ich auslesen, z.B. steht der erste block für die Elementnummer, der 2. für die Anschlussnummer der 3. für den Anschlusszusand usw. und je nach Wert des Blocks liegt ein anderer Zusatand vor und es geht darum schnell zu sehen dass ein Wert von der Norm abweicht und welcher um den Grund der Störung zu kristallisieren.

Apocalypse89 4. Feb 2017 23:31

AW: Text/Zahlen auf mehrere Editfelder aufteilen
 
Ok habs mit Copy hinbekommen, danke für die Hilfe

t.roller 5. Feb 2017 04:21

AW: Text/Zahlen auf mehrere Editfelder aufteilen
 
Ein String ist ein String ist ein String...

Der wird einfach gesplittet mit einem Delimiter:
Delphi-Quellcode:
procedure Split(Delimiter: Char; Str: string; ListOfStrings: TStrings) ;
begin
   ListOfStrings.Clear;
   ListOfStrings.Delimiter      := Delimiter;
   ListOfStrings.StrictDelimiter := True; // kann entfallen, wenn unbekannt
   ListOfStrings.DelimitedText  := Str;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   OutPutList: TStringList;
begin
   Edit7.text:= '01 00 02 05 FF 04 09';
   OutPutList := TStringList.Create;
   try
     Split(' ', Edit7.text, OutPutList) ;
       Edit0.text:= OutPutList[0];
       Edit1.text:= OutPutList[1];
       Edit2.text:= OutPutList[2];
       Edit3.text:= OutPutList[3];
       Edit4.text:= OutPutList[4];
       Edit5.text:= OutPutList[5];
       Edit6.text:= OutPutList[6];
   finally
     OutPutList.Free;
   end;
end;
oder:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var List: TStrings;
begin
Edit7.text:= '01 00 02 05 FF 04 09';
  List := TStringList.Create;
  try
//    ExtractStrings([' '], [], PChar('01 00 02 05 FF 04 09'), List);
    ExtractStrings([' '], [], PChar(Edit7.text), List);
       Edit0.text:= List[0];
       Edit1.text:= List[1];
       Edit2.text:= List[2];
       Edit3.text:= List[3];
       Edit4.text:= List[4];
       Edit5.text:= List[5];
       Edit6.text:= List[6];
  finally
    List.Free;
  end;
end;


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