Delphi-PRAXiS
Seite 3 von 11     123 45     Letzte » 

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StringGrid mit Daten füllen und farblich Darstellen (https://www.delphipraxis.net/128425-stringgrid-mit-daten-fuellen-und-farblich-darstellen.html)

jaenicke 9. Feb 2009 21:11

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Ja natürlich, und konkrete Fragen zu beantworten ist auch kein Problem.

Das ganze ließe sich jedenfalls noch beliebig erweitern, je nachdem was du genau mit den Daten vor hast und wie unterschiedlich die Daten sind. Denn auch die Daten selbst könnte man natürlich in Klassen speichern, damit da auch mehr Variationen möglich sind. ;-)

Jens Hartmann 10. Feb 2009 19:40

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sebastian,

so jetzt habe ich ein paar Fragen.

Ich habe mir dein Projekt jetzt nochmal angesehen und auch den DEBUGGER durchlaufen lassen.

Dann habe ich die Unit in mein Projekt implementiert und die Funktionen in meine LeseFunktion der Schnittstelle mit eingebunden.

Dabei kommt es leider noch (aber logischer weiße) zu einem Fehler (Fehler beim Parsen)

Die Erklärung liegt darin, das nach dem Begriff Ereignis gesucht wird.

Delphi-Quellcode:
    CurLine := ReadLine;
    if Pos('Ereignis:', CurLine) <> 1 then
      raise Exception.Create('Fehler beim Parsen in Zeile:'#13#10 + CurLine
        + #13#10#13#10'Ereignis: erwartet!');
    Delete(CurLine, 1, 10);
    CurEntry.Index := StrToInt(CurLine);
Also den Ablauf hier habe ich (so hoffe ich) verstanden, der Var CurLine (vom Typ String) wird eine gelesen Zeile zugewiesen, mit POS wird ja jetzt gesucht ob Ereignis wirklich an Pos. 1 ist, ist das nicht der Fall, bekomme ich den Fehler "Fehler beim Parsen".
Da meine Daten je nach Zeitpunkt Programmstart anders sind, ist das wahrscheinlich mein Verständnisproblem.

Ich hänge unten mal noch eine Datei an, die ich eben Aufgezeichnet habe.

Ich denke ich muss nach der Position von "Ereignis: 0000" suchen (0000 ist nur ein Beispiel, der Ausdruck könnte natürlich auch mit 0814 anfangen, da diese Nummer ja von der Einbruchmeldanlage mit gesendet wird und in dieser nur ein kleiner Puffer ist der Überschrieben wird, wenn die Daten nicht ausgedruckt wurden.)
und dann diese auf 1 setzten oder so ähnlich.

Das Problem, dabei ist nämlich leider auch, das das Wort Ereignis an einem anderen Punkt auch auftauchen kann. (Liegt daran, das ich in der Einbruchmeldeanlage Ereignistexte selber nach belieben einrichten kann).

PS: In der Datei im Anhang, sieht man wie so ein Anfang auch schon mal aussehen kann,
Die Meldung AKTUELLE EREIGNISSE DRUCKEN, kommt nur wenn der Drucker nicht angeschlossen war und Daten im Puffer der Einbruchmeldeanlage liegen,

Und das Ereignis (nur beim ersten Ereignis) mit einem A anfängt, muss auch an der Einbruchmeldeanlage liegen, da das auch nur am Anfang einmal ist, aber auch auf dem Original Papierdrucker so ausgedruckt wird.

Daher gesehen, denke ich halt das ich nach dem ersten richtigen Ereigniss suchen muss.

Jens

Jens Hartmann 10. Feb 2009 20:37

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Sebastian,

lass mal mit den Bemühungen, ich hab´s geknackt und ich glaube auch verstanden, ich werde jetzt erstmal noch ein wenig basteln.

Ich habe einfach die if Anweisungen angepasst und sie her es funktioniert soweit.

Habe nur leider den Teil der ParserUtilis noch nicht komplett geraft.
Aber ich denke das schaff ich auch noch.


Melde mich bestimmt nochmal.

Danke schon mal

Jens

Jens Hartmann 11. Feb 2009 16:11

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Sebastian,

habe jetzt auch den Teil von ParserUtils so weit verstanden.
Jetzt habe ich mal eine Frage, ich habe ja deine Klasse ParserUtils in mein Programm eingebunden.

In der Projektverwaltung ist die jetzt seltsamerweise so eingetragen

P
Pa
Par
Pars
Parse
Parser
...
...
...
ParserUtils.pas

Woran kann das liegen?

MFG

Jens

Jens Hartmann 11. Feb 2009 17:32

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo nochmal,

So nachdem ich jetzt nochmal lang überlegt und probiert habe, habe ich nochmal ein paar Fragen.

Ich lese für das Parsen ja aus einer Textdatei, diese Datei wird ja im laufe eines Tages immer Größer.

Kann ich es irgendwie realisiern, das immer nur das gelesen wird, was wirklich von der Schnittstelle kommt und wenn wie bekomme ich das dann Parsen frei.

Mit folgendem Code arbeite ich jetzt.

Delphi-Quellcode:
procedure TForm1.DatenverarbeitungMB256;
Var
  Datum             :String;
  Jahr              :String;
  Monat             :String;
  Sicherung         :String;
  SL                :TStringList;
  I                 :Integer;
  IA                :Integer;
  IB                :Integer;
  IC                :Integer;
  ID                :Integer;
  N                 :Integer;
  Parser: TMySimpleBaseParser;
begin
  Datum := DatetoStr(Date);
  Jahr := FormatDateTime('yyyy',strtodatetime(Datum));
  Monat := FormatDateTime('mmmm',strtodatetime(Datum));
  CreateDir('..\Daten\');
  CreateDir('..\Daten\'+Jahr);
  CreateDir('..\Daten\'+Jahr+'\'+Monat);

  sl := TStringList.Create;

  try
    MMUEZ2000.Lines.Add(Zeile);
    sl.AddStrings(MMUEZ2000.Lines);
    for i := 0 to sl.Count -1 do
      begin
        sl[i] := trim(StringReplace(sl[i], #$D, '', [rfReplaceAll]));
        sl[i] := StringReplace(sl[i], #129, 'ü', [rfReplaceAll]);
        sl[i] := trim(StringReplace(sl[i], #132, 'ä', [rfReplaceAll]));
        sl[i] := StringReplace(sl[i], #142, 'Ä', [rfReplaceAll]);
        sl[i] := StringReplace(sl[i], #148, 'ö', [rfReplaceAll]);
        sl[i] := StringReplace(sl[i], #153, 'Ö', [rfReplaceAll]);
        sl[i] := StringReplace(sl[i], #154, 'Ü', [rfReplaceAll]);
        sl[i] := StringReplace(sl[i], #10#13, ' ', [rfReplaceAll]);
      if sl[i] <> '' then
          Zeile:='';
          Parser := TMySimpleParserMB256plus.Create;
          DoParse(Parser, ExtractFilePath(ParamStr(0)) + '..\Daten\'+Jahr+'\'+Monat+'\'+Datum+'.txt');
          DisplayResult(Parser);
          Parser.Free;
          Memo.Lines.Append(SL[I]);
          Speichermemo.Lines.Append(SL[I]);
      end;
      MMUEZ2000.Clear;
    sl.Free;
  finally

  end;
  Zeile:='';
  Sicherung := ('..\Daten\'+Jahr+'\'+Monat+'\'+Datum+'.txt');
  Speichermemo.Lines.SaveToFile(Sicherung);
  Label1.Caption := Sicherung;
end;
Außerdem habe ich noch folgendes Problem, im Anhang habe ich die mal einen großen Ereignissppeicher eingefügt, und ein paar Bilder wie das Ergebnis aussehen sollte.

Man kann an Hand der Datei erkennen, Das teilweise eine Zeile sehr lang ist, und zwar solang, das ich sie nicht in ein Feld von meinem Grid bekomme.

Wie kann ich in meinem Grid dem Feld dann sagen Zeilenumbruch ?

Gruß

Jens

jaenicke 11. Feb 2009 19:39

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Zitat:

Zitat von Jens Hartmann
In der Projektverwaltung ist die jetzt seltsamerweise so eingetragen

Hast du davon vielleicht mal einen Screenshot, ich weiß nicht wie du das meinst. :gruebel:
Meinst du das so als Unterordner?

Zitat:

Zitat von Jens Hartmann
Kann ich es irgendwie realisiern, das immer nur das gelesen wird, was wirklich von der Schnittstelle kommt und wenn wie bekomme ich das dann Parsen frei.

Ich habe das absichtlich so gemacht, dass Text und kein Dateiname zum Parsen übergeben wird. Der Text kann natürlich auch nur ein gerade übertragener Teil sein.

Du müsstest nur irgendwie sicherstellen, dass keine halben Einträge drin stehen, aber ansonsten kannst du auch einfach nur einen gerade empfangenen Text als String übergeben.

Zitat:

Zitat von Jens Hartmann
Delphi-Quellcode:
        sl[i] := trim(StringReplace(sl[i], #$D, '', [rfReplaceAll]));
        sl[i] := StringReplace(sl[i], #129, 'ü', [rfReplaceAll]);
        sl[i] := trim(StringReplace(sl[i], #132, 'ä', [rfReplaceAll]));
...

Das kannst du dir sparen. ;-)
In meinem Quelltext gibt es u.a. die Funktion OemToAnsi, die (hoffe ich ;-)) genau diese Umwandlung in einem Schritt macht. Die könntest du als class function deklarieren und dann einfach mit TMySimpleParser.OemToAnsi() aufrufen.

Zitat:

Zitat von Jens Hartmann
Delphi-Quellcode:
          Parser := TMySimpleParserMB256plus.Create;
          DoParse(Parser, ExtractFilePath(ParamStr(0)) + '..\Daten\'+Jahr+'\'+Monat+'\'+Datum+'.txt');
          DisplayResult(Parser);
          Parser.Free;

Du musst den Parser nicht jedesmal neu erzeugen, wenn das jedesmal der selbe Parsertyp ist, dann kannst du den vor der Schleife erzeugen und danach wieder freigeben.
Die bisherigen Einträge werden in Parse ohnehin gelöscht:
Zitat:

Delphi-Quellcode:
SetLength(Entries, 0);

Zitat:

Zitat von Jens Hartmann
Man kann an Hand der Datei erkennen, Das teilweise eine Zeile sehr lang ist, und zwar solang, das ich sie nicht in ein Feld von meinem Grid bekomme.

Wie kann ich in meinem Grid dem Feld dann sagen Zeilenumbruch ?

Das gibt es nicht vorgefertigt. In dem Screenshot wird aber auch kein StringGrid verwendet, es handelt sich dort um eine TListView bzw. eine TVirtualStringTree. Letztere wäre vermutlich am besten geeignet, ist aber auch etwas schwieriger zu benutzen.
http://www.delphi-treff.de/tutorials...rtualtreeview/

Jens Hartmann 11. Feb 2009 19:52

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke erstmal,

im Anhang mal den Screenshot

jaenicke 11. Feb 2009 20:45

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Das sieht natürlich sehr komisch aus. Schau mal in den Projektquelltext (Projekt --> Quelltext anzeigen), was steht denn dort? (Oben bei den eingebundenen Units, das müsste ja die selbe Liste sein.)

Vor allem wundert es mich, dass das kompiliert wird. :shock: Irgendetwas stimmt da nicht, aber sowas habe ich noch nicht gesehen. :cyclops:

Jens Hartmann 11. Feb 2009 21:29

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Das ist eigendlich in Ordnung.

Ich habe diese Dateien jetzt einfach gelöscht, Funktioniert.

Projektdatei ist so gewesen:
Delphi-Quellcode:
  Alarm in 'Alarm.pas' {Form1},
  ParserUtils in 'ParserUtils.pas' {Stringverarbeitung Datensätze},
  Lizenz in 'Lizenz.pas' {TFLizenz},
  Messageform in 'Messageform.pas' {FMessagebox};
Werde das mit dem VirtualTreeView gleich mal durchlesen.

Also wäre es besser wenn ich mein Grid gegen ein VirtualTreeView austausche.

Hast Du da noch Tips

jaenicke 11. Feb 2009 22:29

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Zitat:

Zitat von Jens Hartmann
Das ist eigendlich in Ordnung.

Ich habe diese Dateien jetzt einfach gelöscht, Funktioniert.

Dann vermute ich, dass der Fehler in der XML-Projektdatei (.bdsproj) lag. Der Compiler benutzt aber nur die .dpr, so dass das Kompilieren trotzdem funktioniert.

Zitat:

Zitat von Jens Hartmann
Also wäre es besser wenn ich mein Grid gegen ein VirtualTreeView austausche.

Hast Du da noch Tips

Der Unterschied ist da vor allem, dass man die Daten nicht einfach in die Komponente legt, sondern dass die Daten selbst gespeichert werden. Bei der Anzeige werden diese dann angefordert.

Um die Darstellung so anpassen zu können, wie man es möchte, wäre es am sinnvollsten den Inhalt selbst zu zeichnen. So habe ich es jedenfalls gemacht. Ob es mehrzeilig auch anders geht, bin ich gerade nicht sicher.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr.
Seite 3 von 11     123 45     Letzte » 

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