x-dragon
2003-06-10, 16:05:53
Hab gerade ein kleines Problem mit einem Delphi-Programm, aber das Problem ist eher logischer Natur.
Ich arbeite gerade an einer Art Terminplaner und habe eine ListViewBox mit xxx Einträgen. In dieser Liste sind die Uhrzeiten von z.B. 0600-2000 eingetragen (im 10 Minuten-Takt).
Jetzt können aber nicht nur die Daten von einer Person angezeigt werden sondern auch z.B. 5 gleichzeitig (sind sortiert nach Uhrzeit und dann nach Nr. der Person[1..5]), also wie im Anhang zu sehen ist.
Jetzt möchte ich gerne die Einträge in unterschiedlichen Farben anzeigen lassen, damit man sie besser auseinanderhalten kann. Dies kann ich aber nur während des Zeichenvorgangs der Tabelle(bzw der aktuellen Zeile) machen in der ich nur die aktuelle Position abfragen kann und die Personen die angezeigt werden sollen (Daten können ja erst später eingetragen werden) und dieser Zeile dann die passende Farbe zuweise. Allerdings kann es auch sein das nur Person 1, 3 und 5 angezeigt werden soll ...
Und so sieht mein aktueller Versuch aus:
procedure TFmHaupt1.ListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
{********************************************************************}
var
i : Integer;
lv : TListView;
pers : TStrings;
begin
lv := TListView(Sender); // wird für mehrere Listen genutzt
pers := TStringList.Create;
for i := 1 to 5 do
if sets[i] then // sets : array[1..5] of Boolean - welche Sets/Personen
pers.Add(IntTostr(i)); // StringListe der angezeigten Personen(Nr.)
with lv.Canvas.Brush do
begin
for i := 1 to pers.Count do
if (Item.Index + 1) mod i = 0 then
if sets[StrToInt(pers[i-1])] then
case i of
1: Color := clInfoBk;
2: Color := clInactiveCaptionText;
3: Color := clScrollBar;
4: Color := clMoneyGreen;
5: Color := clMenu;
end;
end;
end; Das Ergebnis sieht auch schon schön bunt aus, aber leider sind die Farben nicht den entsprechenden Personen zugeordnet(s. auch Anhang).
Gebt mir mal einen kleinen (oder auch größeren) Tip, wo mein Denkfehler liegen könnte.
Ich arbeite gerade an einer Art Terminplaner und habe eine ListViewBox mit xxx Einträgen. In dieser Liste sind die Uhrzeiten von z.B. 0600-2000 eingetragen (im 10 Minuten-Takt).
Jetzt können aber nicht nur die Daten von einer Person angezeigt werden sondern auch z.B. 5 gleichzeitig (sind sortiert nach Uhrzeit und dann nach Nr. der Person[1..5]), also wie im Anhang zu sehen ist.
Jetzt möchte ich gerne die Einträge in unterschiedlichen Farben anzeigen lassen, damit man sie besser auseinanderhalten kann. Dies kann ich aber nur während des Zeichenvorgangs der Tabelle(bzw der aktuellen Zeile) machen in der ich nur die aktuelle Position abfragen kann und die Personen die angezeigt werden sollen (Daten können ja erst später eingetragen werden) und dieser Zeile dann die passende Farbe zuweise. Allerdings kann es auch sein das nur Person 1, 3 und 5 angezeigt werden soll ...
Und so sieht mein aktueller Versuch aus:
procedure TFmHaupt1.ListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
{********************************************************************}
var
i : Integer;
lv : TListView;
pers : TStrings;
begin
lv := TListView(Sender); // wird für mehrere Listen genutzt
pers := TStringList.Create;
for i := 1 to 5 do
if sets[i] then // sets : array[1..5] of Boolean - welche Sets/Personen
pers.Add(IntTostr(i)); // StringListe der angezeigten Personen(Nr.)
with lv.Canvas.Brush do
begin
for i := 1 to pers.Count do
if (Item.Index + 1) mod i = 0 then
if sets[StrToInt(pers[i-1])] then
case i of
1: Color := clInfoBk;
2: Color := clInactiveCaptionText;
3: Color := clScrollBar;
4: Color := clMoneyGreen;
5: Color := clMenu;
end;
end;
end; Das Ergebnis sieht auch schon schön bunt aus, aber leider sind die Farben nicht den entsprechenden Personen zugeordnet(s. auch Anhang).
Gebt mir mal einen kleinen (oder auch größeren) Tip, wo mein Denkfehler liegen könnte.