AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi StringGrid mit Daten füllen und farblich Darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid mit Daten füllen und farblich Darstellen

Ein Thema von Jens Hartmann · begonnen am 29. Jan 2009 · letzter Beitrag vom 6. Apr 2009
Antwort Antwort
Seite 3 von 11     123 45     Letzte »    
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 9. Feb 2009, 21:11
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#22

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 10. Feb 2009, 19:40
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
Angehängte Dateien
Dateityp: txt 10.02.2009_143.txt (1,7 KB, 8x aufgerufen)
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#23

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 10. Feb 2009, 20:37
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
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#24

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 11. Feb 2009, 16:11
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
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#25

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 11. Feb 2009, 17:32
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
Miniaturansicht angehängter Grafiken
spalten_f_r_text_zu_klein_142.gif  
Angehängte Dateien
Dateityp: txt ema_168.txt (1.023,3 KB, 8x aufgerufen)
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#26

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 11. Feb 2009, 19:39
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.
Meinst du das so als Unterordner?

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 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 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:
SetLength(Entries, 0);
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/
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#27

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 11. Feb 2009, 19:52
Danke erstmal,

im Anhang mal den Screenshot
Miniaturansicht angehängter Grafiken
parser_120.gif  
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#28

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 11. Feb 2009, 20:45
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. Irgendetwas stimmt da nicht, aber sowas habe ich noch nicht gesehen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#29

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 11. Feb 2009, 21:29
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#30

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 11. Feb 2009, 22:29
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 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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 11     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:03 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