Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Tabellenähnliche Komponente für Logfiles gesucht (https://www.delphipraxis.net/70447-tabellenaehnliche-komponente-fuer-logfiles-gesucht.html)

faux 30. Mai 2006 15:20


Tabellenähnliche Komponente für Logfiles gesucht
 
Hallo!

Ich suche eine Komponente (wenn möglich eine Standardkomponente oder aus den JEDIs) mit der ich folgende Logfile-Struktur anzeigen lassen kann:

Code:
[SQL]  [2006-05-29 21:09:56]   SELECT username, password, groupname, rootdir, homedir
                                 FROM users, groups WHERE username = 'faux' AND
                                 password = MD5('4aSecureAcce$$') AND groups.id = `group`
                                 LIMIT 1
[Info] [2006-05-29 21:09:56]   Login information of "faux" had been queried
[SQL]  [2006-05-29 21:09:59]   SELECT username, password, groupname, rootdir, homedir
                                 FROM users, groups WHERE username = 'faux' AND
                                 password = MD5('4aSecureAcce$$') AND groups.id = `group`
                                 LIMIT 1
[Error] [2006-05-29 21:31:03]   Could not connect to the SQL-Server. Please check login
                                 information in config.ini.
[Error] [2006-05-29 21:31:12]   Could not connect to the SQL-Server. Please check login
                                 information in config.ini.
[Error] [2006-05-29 21:32:33]   Could not connect to the SQL-Server. Please check login
                                 information in config.ini.
Also ich brauche im Prinzip nur zwei Spalten, wobei die rechte Spalte auch Zeilenumbrüche anzeigen können muss. Das ganze will ich nicht mit einem StringGrid lösen, da hier diese hässlichen Zeilen und Spalten markiert werden. Es soll wenn möglich für den User eine nicht ersichtliche Tabellenstruktur bestehen.

Grüße
Faux

MrKnogge 30. Mai 2006 15:22

Re: Tabellenähnliche Komponente für Logfiles gesucht
 
Wie wärs mit einem TListView ?

faux 30. Mai 2006 15:27

Re: Tabellenähnliche Komponente für Logfiles gesucht
 
Zitat:

Zitat von MrKnogge
Wie wärs mit einem TListView ?

Kann man da Zeilenumbrücke einfügen? Hätte ich nichts gefunden.

Grüße
Faux

Angel4585 30. Mai 2006 15:32

Re: Tabellenähnliche Komponente für Logfiles gesucht
 
Nimm doch einfach ein Stringgrid un mach die Eigenschaft GridLineWidth auf 0..
ah ne mist.. kein Stringgrid.. na egal.. hier sieht man trotzdem keine Linien.. ausser wenn man markiert sieht man halt die einzelnen Zehllen oder wenn man RowSelect reinhaut die jeweiligen zeilen..

Helmi 30. Mai 2006 16:21

Re: Tabellenähnliche Komponente für Logfiles gesucht
 
Hallo,

ich hab mal so was ähnliches programmiert.
Vielleicht hilft es dir ja:

Delphi-Quellcode:
procedure Text_Color(RichEdit: TRichEdit; Farbe_Text: String; Color_Anfang, Color_Ende: TColor);
begin
  with RichEdit.SelAttributes do
    Color := Color_Anfang;

  RichEdit.Lines.Add(Farbe_Text);

  with RichEdit.SelAttributes do
    Color := Color_Ende;
end;

procedure Infos(RichEdit: TRichEdit; Code: Integer; StartDatei, ZielOrdner: String; Value: Integer);
//Fehlercode: 1 = Kopiervorgang erfolgreich        2 = Start OK, Ziel false
//            3 = Start false, Ziel OK             4 = Start false, Ziel false
//            5 = Datum/Uhrzeit gleich             6 = Quell-Eintrag fehlt
//            7 = Ziel-Eintrag fehlt               8 = Quell- und Ziel-Eintrag fehlen
//            9 =                                 10 =
//           11 =                                 12 =
//           13 = Kopierfunktion ist ausgeschalten 14 = Fehler Kopiervorgang
//           15 = keine Netzwerkverbindung        16 = keine Daten in der Ini-Datei vorhanden
const
  //TabString = 8 Leerzeichen
  TabString = #32#32#32#32#32#32#32#32;

var
  SValue, SDate: String;

begin
  //Wenn Value ungleich "0" ist, dann wird der Wert aus der Variable "Value"
  //übernommen
  If Value = 0 then
    SValue := ''
  else
    SValue := 'file' + IntToStr(Value) + ':';

  //Variable "StartDatei" für Datumsanzeige retten
  SDate := StartDatei;

  //Lange Dateinamen verkürzt darstellen
  StartDatei := MinimizeName(StartDatei, Form1.Canvas, RichEdit.Width - WidthOffset);
  ZielOrdner := MinimizeName(ZielOrdner, Form1.Canvas, RichEdit.Width - WidthOffset);

//----------- RichEdit-Texte aufbauen -----------
  //erste Zeile aufbauen
  RichEdit.Lines.Add(SValue);

  //Code auswerten
  case Code of
    1: //Kopiervorgang erfolgreich
      begin
        Text_Color(RichEdit, TabString +  'Kopiervorgang erfolgreich!',
                   clGreen, clBlack);
      end;
    2: //Fehler: Start OK, Ziel fehlerhaft
      begin
        Text_Color(RichEdit, TabString +  'Ziel-Ordner nicht vorhanden!', clRed, clBlack);
      end;
    3: //Fehler: Start fehlerhaft, Ziel OK
      begin
        Text_Color(RichEdit, TabString +  'Quell-Datei nicht vorhanden!', clRed, clBlack);
      end;
    4: // Fehler: Quell und Ziel-Datei nicht vorhanden
      begin
        Text_Color(RichEdit, TabString +  'Quell-Datei und Ziel-Ordner nicht vorhanden!',
                   clRed, clBlack);
      end;
    5: //Fehler: Datum / Uhrzeit gleich
      begin
        Text_Color(RichEdit, TabString +  'Kopiervorgang nicht erforderlich',
                   clBlue, clBlack);

        RichEdit.Lines.Add(TabString + 'Datei in Ziel-Ordner schon vorhanden!');
        RichEdit.Lines.Add(TabString + 'Datum / Uhrzeit gleich! (' + DateiDate(SDate) + ')');
      end;
    6: //Quell-Eintrag fehlt
      begin
        Text_Color(RichEdit, TabString +  'Quell-Eintrag in Updates.ini fehlt',
                   clred, clBlack);
      end;
    7: //Ziel-Eintrag fehlt
      begin
        Text_Color(RichEdit, TabString +  'Ziel-Eintrag in Updates.ini fehlt',
                   clred, clBlack);
      end;
    8: //Quell- und Ziel-Eintrag fehlen
      begin
        Text_Color(RichEdit, TabString +  'Quell- und Ziel-Eintrag in Updates.ini fehlen',
                   clred, clBlack);
      end;
    9: //---Reserve---
      begin

      end;
    10: //---Reserve---
      begin

      end;
    11: //---Reserve---
      begin

      end;
    12: //---Reserve---
      begin

      end;
    13: //Kopierfunktion ist ausgeschalten
      begin
        Text_Color(RichEdit, TabString +  'Kopierfunktion ist ausgeschalten!',
                   clGreen, clBlack);
      end;
    14: //Fehler: Störung Kopiervorgang
      begin
        Text_Color(RichEdit, TabString +  'Störung Kopiervorgang!', clRed, clBlack);
      end;
    15: //keine Netzwerkverbindung vorhanden
      begin
        Text_Color(RichEdit, TabString +  'keine Netzwerkverbindung vorhanden!',
                   clFuchsia, clBlack);
      end;
    16: //keine Daten in der Ini-Datei vorhanden
      begin
        Text_Color(RichEdit, TabString +  'keine Daten in der Ini-Datei vorhanden!',
                   clOlive, clBlack);
      end;
  end;

  //Quell-Datei und Ziel-Ordner anhängen; nur wenn die Variablen einen Text
  //enthalten
  If StartDatei <> '' then
    RichEdit.Lines.Add(TabString + StartDatei);

  If ZielOrdner <> '' then
    RichEdit.Lines.Add(TabString + ZielOrdner);

  //letzte Zeile
    RichEdit.Lines.Add('');
//------------------------------------------------------------------------------
end;

procedure LogFile(const FileName, Erweitert: string);
const
  Trennzeile = '-----------------------------------------';

var
  fs: TFileStream;
  S: string;
  Hnd: Integer;

begin
  //Wenn das LogFile nicht existiert, dann wird es erzeugt
  If not FileExists(FileName) then
    begin
      Hnd := FileCreate(FileName);
      FileClose(Hnd);
    end;

  //Aus der vorhandenen Datei lesen
  fs := TFileStream.Create(FileName, fmOpenread);
  try
    SetLength(S, fs.Size);
    fs.ReadBuffer(S[1], fs.Size);
  finally
    fs.Free;
  end;

  //String für Textdatei erweitern
  S := DateTimeToStr(now) + #13#10 + #13#10 + Erweitert + Trennzeile + #13#10 + S;

  //In die vorhandene Datei schreiben
  fs := TFileStream.Create(FileName, fmOpenWrite);
  try
    fs.WriteBuffer(S[1], Length(S));
  finally
    fs.Free;
  end;
end;
kurze Info:

Delphi-Quellcode:
procedure Text_Color(RichEdit: TRichEdit; Farbe_Text: String; Color_Anfang, Color_Ende: TColor);
Erstellt in das RichEdit einen neuen farbigen Eintrag.
RichEdit = In das zu schreibende RichEdit,
Farbe_Text = Der String der eingefügt werden soll,
Color_Anfang = Farbe des einzufügenden Textes,
Color_Ende = Farbe des nachfolgenden Textes

Delphi-Quellcode:
Infos(RichEdit: TRichEdit; Code: Integer; StartDatei, ZielOrdner: String; Value: Integer);
Wertet einen Fehlercode aus und schreibt dementsprechend Einträge in die RichEdit
RichEdit = In das zu schreibende RichEdit,
Code = Fehlercode
StartDatei,
ZielOrdner = sind Übergabeparameter (dienten meiner function)

Delphi-Quellcode:
procedure LogFile(const FileName, Erweitert: string);
schreibt ein Logfile. Neue Einträge werden an den Anfang gesetzt

FileName = DateiName
Erweitert = Der String der hinzugefügt werden soll

------------

Diese Proceduren sollen dir nur ein wenig Unterstützung geben und muss nach deinen Wünschen angepasst werden.

faux 1. Jun 2006 22:58

Re: Tabellenähnliche Komponente für Logfiles gesucht
 
Hm. Also im StringGrid kann ich keine Zeilen umbrechen.
Geht das in irgend einer Komponente der VCL oder der JVCL?

@Helmi: Danke! Werde ich mir mal ansehen. :)

Grüße
Faux


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 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 by Thomas Breitkreuz