Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie eine Stringgrid-Spalte in eine Zeile vom Memo schreiben? (https://www.delphipraxis.net/94844-wie-eine-stringgrid-spalte-eine-zeile-vom-memo-schreiben.html)

Black07 27. Jun 2007 02:43


Wie eine Stringgrid-Spalte in eine Zeile vom Memo schreiben?
 
Hi


bin mit meinem Programm fast fertig nur stehe jetzt vor einem Problem bei dem ich hoffe ihr könnt mir weiterhelfen.


Zunächst zum Verständnis das Grundlegenste,

Habe einen Verwaltungprogramm geschrieben, das eine vorhandene Daten aus einer Textdatei zunächst in ein Memofeld einliest (das memo ist invisible) aus dem dann die enthaltenden Daten auf Editierfelder zum bearbeiten verteilt werden.


Das ist alles kein Problem nur beim Speicher stehe ich bei den Stringgrids vor einen für mich scheinbar unüberwindlichen Problem.



Die Stringgrids haben von mir statische 100 Zeilen und 1 oder 2 Spalten oncreate zugeteilt bekommen,
nun ist es aber so das meist nur die ersten Zeilen z.B. 5 Zeilen mit Text gefüllt sind.

Die Daten aus den einzelnen Zellem in der einen Stringgrids-Spalte soll in dem Speicher-Memo mir den anderen Daten as weiteren Editfeldern.
Das Memo soll am Ende wieder als eine *.TXT gespeichert werden, wobei jede Zeile zusammenhändende Daten enthält die durch einen Delimiter als Trennzeichen getrennt sind.


Etwa so

Zitat:

Zitat von Speicher-MEMO wie es ausehen soll
.
.
{Zeile 12}Name=P777;Alpha_3
{Zeile 13}Bezeichnung=Datensatz1;Datensatz2;Datensatz;Dat ensatz4
.
.
.


Nur bekomme ich es einfach nicht hin,
zum einen das die Datensätze einfach wieder hinter einander durch einen Delimiter getrennt stehen und zum anderen
da die leeren Zellen(MAX 100) aus den Stringgrid-Spalten mit eingefügt werden, und zwar als die komische Balken |||; und zwar so.

Zitat:

Zitat von Speicher-MEMO wie es ausehen soll
...
...
{Zeile 12}Name=P777;Alpha_3
{Zeile 13}Bezeichnung=Datensatz1;
{Zeile 14}Datensatz2;
{Zeile 15}Datensatz4;
{Zeile 16}|||;
{Zeile 17}|||;
{Zeile 18}|||
...




Delphi-Quellcode:
...
...
...

if stgridWegedaten.Cells[0,1]<>'' then
          begin
            c:=';';
            F := TStringList.Create ;
            try
            F.Add(IntToStr(stgridWegedaten.RowCount));
            F.Add(IntToStr(stgridWegedaten.ColCount));
            for I := 0 to (stgridWegedaten.RowCount - 1) do
            begin
            stgridWegedaten.Rows[i].Delimiter:=c;
            s:=stgridWegedaten.Rows[i].DelimitedText ;
            F.Add(s);
            end;
            memospeicher.Lines.Assign(f);
            finally
            F.Free;
            end;

            end;
          end;

Hat jemand eine Idee wie ich nur die beschrieben Zellen aus einer Stringgrid-Spalte in eine Zeile nur durch einen Delimiter getrennt in ein Memo bekomme ???

thx

Mackhack 27. Jun 2007 03:58

Re: Wie eine Stringgrid-Spalte in eine Zeile vom Memo schrei
 
Hi,

warum schreibst du das alles erst in ein Invisible Memo und dann kopierst du alles wieder raus in Editfelder und dann in ein StringGrid und dann anschliessend wieder zurueck in das Memo?

Warum nicht alles in eine TStringlist rein und was du brauchst kommt in die Editfelder von mir aus und dann in eine 2. TStringlist zum abspeichern?

Black07 27. Jun 2007 10:44

Re: Wie eine Stringgrid-Spalte in eine Zeile vom Memo schrei
 
Zitat:

Zitat von Mackhack
Hi,

warum schreibst du das alles erst in ein Invisible Memo und dann kopierst du alles wieder raus in Editfelder und dann in ein StringGrid und dann anschliessend wieder zurueck in das Memo?

Warum nicht alles in eine TStringlist rein und was du brauchst kommt in die Editfelder von mir aus und dann in eine 2. TStringlist zum abspeichern?


Eine TStringlist hatte ich zu Anfang auch mal gedacht, fand das Memo dann doch praktischer in der Programmierphase als sichtbares Kontrollfeld um schnell zu überprüfen, ob die gerade zum laden ausgewählte Datei auch korrekt auf die Felder verteilt wird.


Denn das mit den ausgewählten Dateidaten gefüllte Memo lass ich immer beim einlesen von 0 bis zum Ende -
nach vordefinierten "Bez.-Eintägen" mit Strleft durchsuchen, wobei immer wenn ein Eintag gefunden ist dieser dann je nach "Typ" in Labelfelser, Editfelder, Memofelder, Checkboxen, Comboboxen und Stringgrids verteilt wird und zwar mit midstr da die laenge des Bezeichungsname und des Datensatzen vordefiniert ist (z.B. suche im Memo leftsr "Anmerkung=" >> Anmerkung=Was weis ich denn >> gefunden >> MemoAnmerkung:=Midstr(Anmerkung=Was weis ich denn) >> Anmerkungmemofeld: "Was weis ich denn").
Bei den Daten für Stringgrids, Listboxen werden die dann noch per Splittfkt am "|" Delimiter getrennt und in die einzelen Zeilen geschrieben.



Wenn das Programm rundläuft wäre eine Umstellung auf eine TStringlist aber vielleicht eine überlegung wert.

Black07 27. Jun 2007 22:31

Re: Wie eine Stringgrid-Spalte in eine Zeile vom Memo schrei
 
Hi

habe nun eine umständliche und zeitaufwendige Lösung gefunden.


Habe zum einen die Mehrspaltigen-Stringgrids in Einzel-Stringgrids umgebaut,
die ich nun per Scrollbar verbunden habe.

Da ich zum einen keine Lsg gefunden habe, wie ich von Mehrspaltigen-SGs mir die Daten
Spaltenweise so auslesen zu lassen:


Delphi-Quellcode:
for I := 1 to (stgridCondItems.RowCount - 1) do
 begin
  s:=stgridCondItems2.Rows[i].DelimitedText;
  F.Add(s);
 end;
 finally
 memo3.Lines.Assign(f);
 F.Free;
 end;

Zum anderen habe ich nun eine aufwendige Routine geschrieben um leere Zellen(Zeilen)nach der letzten Texteingabe zu ignorieren - wobei die Spalte 1 oder 2 dieses Ende definiert.

----

Zumindest ist nun mein Problem gelöst auch wenn es bei dem StrigGrind mit 6 Spalten eine Mammutaufgabe war nicht die übersicht bei den Abfragen und anweisungen zu verlieren.


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