AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Färben der ListViewzeile funzt nicht ganz

Ein Thema von Akut-Programming · begonnen am 25. Aug 2004 · letzter Beitrag vom 25. Aug 2004
Antwort Antwort
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#1

Färben der ListViewzeile funzt nicht ganz

  Alt 25. Aug 2004, 09:54
Ich bin gerade dabei eine Anwendung zur Anwesenheitskontrolle der Mitarbeiter für die Firma in der ich arbeite zu schreiben. Dabei läuft auf dem PC des Mitarbeiters, der in eine OracleDB schreibt. Über die Serveranwendung kann man dann den jeweiligen Status des Mitarbeiters sehen. Ich wollte nun, um es übersichtlicher darzustellen, die Zeilen, in denen steht, das der User angemeldet ist oder nicht, farbig markieren. Doch komischerweiße markiert er alle in der selben Farbe, egal ob angemeldet oder nicht.

Prozedur zum aktualisieren der Liste:
Delphi-Quellcode:
procedure TfrmMain.prcRefreshLists;
var
   NewString: String;
   i: integer;
   ListItem: TListItem;
begin
     //EDV aktualisieren
     lvEDV.Items.Clear;
     OracleDataSet1.Active:=false;
     OracleDataSet1.SQL.Add('select nachname, vorname, angemeldet, loginzeit, urlaub_bis, krank_bis from elka_onlinev2 where abteilung = ''EDV''');
     OracleDataSet1.Active:=true;

     OracleDataSet1.First;
     for i := 1 to OracleDataSet1.RecordCount
     do begin
        NewString := OracleDataSet1.Fields.Fields[0].AsString +' '+ OracleDataSet1.Fields.Fields[1].AsString +' '+ OracleDataSet1.Fields.Fields[2].AsString +' '+ OracleDataSet1.Fields.Fields[3].AsString +' '+ OracleDataSet1.Fields.Fields[4].AsString + OracleDataSet1.Fields.Fields[5].AsString;
        if OracleDataSet1.Fields.Fields[2].AsString = 'JAthen farbe := clLime else
        if OracleDataSet1.Fields.Fields[2].AsString = 'NEINthen farbe := clRed;
        Edit1.Text:=OracleDataSet1.Fields.Fields[2].AsString;
        if OracleDataSet1.RecordCount >= 0
        then begin
             ListItem := lvEDV.Items.Add;
             ListItem.Caption := NewString;
        end;
        OracleDataSet1.Next;
     end;
end;
Prozedur zum markieren der Zeilen:
Delphi-Quellcode:
procedure TfrmMain.lvEDVCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
     lvEDV.Canvas.Brush.Color := farbe;
end;
Hab ich noch was vergessen? Hatte den Code aus der DP.

MfG
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Färben der ListViewzeile funzt nicht ganz

  Alt 25. Aug 2004, 10:29
So geht es nicht, da die Zeichenaktionen nicht genau bei Add des ListItem ausgeführt werden. So wie deine Schleife läuft, werden wahrscheinlich erstmal alle ListItems eingefügt und dann wird die Tabelle auf dem Bildschirm gezeichnet. Damit hast du immer die Farbe, die zuletzt gesetzt war. Am einfachsten ist es, wenn du dir für dein Listitem ein Object mit anlegst und dann beim Zeichnen selber auf das Object schaust, um zu entscheiden, welche Farbe du verwendest.
Hoffe ich konnte rüberbringen, was ich meine
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#3

Re: Färben der ListViewzeile funzt nicht ganz

  Alt 25. Aug 2004, 10:54
Zum Teil hab ichs schon verstanden - Aber vielleicht hättest du ja mal ein Stück Code für mich... - Die Arbeit mit ListViews in der Art ist für mich neu.

MfG
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Färben der ListViewzeile funzt nicht ganz

  Alt 25. Aug 2004, 11:06
Hai Akut-Programming,

ich habe zwar kein Oracel aber es sollte auch so klar sein was ich mache
Um pro Item "zu speichern" ob der Mitarbeiter da ist misbrauche ich einfach die Eigenschaft Item.Checked.
Diese werte ich dann im OnItemDras aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ListItem: TListItem;
begin
  ListView1.Clear; // Listview löschen
  with Query1 do
  begin
    Close;
    SQL.Text := 'SELECT * FROM kontakte ORDER BY name';
    Open;
    First;
    While not (Eof) do
    begin
      ListItem := ListView1.Items.Add;
      ListItem.Caption := FieldByName ('name').AsString;
      ListItem.Checked := FieldByName ('anwesend').AsString = 'JA';
      Next;
    end;
  end;
end;

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if (Item.Checked) then
  begin
    (Sender As TListView).Canvas.Font.Color := clgreen;
  end
  else
  begin
    (Sender As TListView).Canvas.Font.Color := clred;
  end;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Färben der ListViewzeile funzt nicht ganz

  Alt 25. Aug 2004, 11:06
Ich versuche es mal, allerdings nur rein aus dem Kopf, also untestet:

Beim Anlegen der einzelnen Objekte würde ich das Ja/Nein einfach in ein SubItem schreiben:
Delphi-Quellcode:
ListItem := lvEDV.Items.Add;
ListItem.Caption := NewString;
ListItem.SubItems.Add(OracleDataSet1.Fields.Fields[2].AsString);
Und beim Zeichen müsste es dann so aussehen:
Delphi-Quellcode:
procedure TfrmMain.lvEDVCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if (Item.SubItems[0]='JA') Sender.Canvas.Brush.Color:=clLime
  else Sender.Canvas.Brush.Color:=clRed;
end;
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#6

Re: Färben der ListViewzeile funzt nicht ganz

  Alt 25. Aug 2004, 11:09
Hui dank dir easy!! Es klappt. Goil Goil Goooooooooooooooooil!

MfG
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Färben der ListViewzeile funzt nicht ganz

  Alt 25. Aug 2004, 11:19
Zitat von Akut-Programming:
..Es klappt. ...
Welche der beiden Varianten hast Du denn jetzt verwendet?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#8

Re: Färben der ListViewzeile funzt nicht ganz

  Alt 25. Aug 2004, 11:39
Zitat von Akut-Programming:
Hui dank dir easy..
Die von easywk, klappt einwandfrei...
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:46 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