Autor Beitrag
mlamers
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 17.04.03 18:57 
Hallo Leute,

ich habe mal wieder ein Problem:

ich will mit Hilfe des Ereignisses OnAdvancedCustomDrawItem einen farbigen Rahmen um ein markiertes Item zeichnen. Das funktioniert auch soweit ganz gut. Aber wenn ich mit den Pfeiltasten das Item wechsel, dann erscheint das Item darunter Fett. wechsel ich wieder zurück, dann ist es wieder normal.
Das gleiche passiert auch, wenn ich einen Eintrag Doppelklicke oder mit der Maus genau einen Eintrag über dem aktuell ausgewählten Eintrag auswähle.

Der Code meines Ereignisses:


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
 
procedure TFormMP3Player.ListViewPlaylistAdvancedCustomDrawItem( 
  Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; 
  Stage: TCustomDrawStage; var DefaultDraw: Boolean); 
var t_rect : TRect; 
    t_old, t_new : TBrush; 
begin 
  DefaultDraw:=true; 
  inherited; 
  if (Item.Selected) then 
  begin 
    t_rect:=Item.DisplayRect(drLabel); 
    t_rect.BottomRight.Y:=t_rect.BottomRight.Y-1; 
    t_old:=Sender.Canvas.Brush; 
    t_new:=TBrush.Create; 
    t_new.Color:=clBlue; 
    Sender.Canvas.Brush:=t_new; 
    Sender.Canvas.FrameRect(t_rect); 
    Sender.Canvas.Brush:=t_old; 
    FreeAndNil(t_new); 
  end; 
end;


Vielleicht weiß ja jemand von euch Rat. :)

MfG

Michael Lamers
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Fr 18.04.03 16:29 
Hallo mLamers!

Ich weiss nicht ob das die Lösung deines Problemes ist, aber überprüf doch mal anhand der Variablen State ob das Item markiert ist (cdsSelected) und nicht mit der Funktion Selected.

Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
mlamers Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 18.04.03 19:39 
Danke für den Tipp, aber das klappt auch nicht.

Ich habe herausgefunden, dass immer nur der Eintrag unter dem markierten fett dargestellt wird. (Ich habe bei OnItemSelect einen Refresh durchgeführt)

Ich muß also irgendetwas in meiner Routine verstellen, das einen Eintrag lang die Schrift fett werden läßt.

Ich habe auch schon versucht, außerhalb der Bedingung die Canvas - Schriftart explizit auf nicht Fett zu stellen.

Ich hoffe es weiß noch irgendjemand Rat, Ich bin am Ende meines Lateins. :?:

Michael Lamers
mlamers Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 18.04.03 21:05 
So Leute, ich habe das Problem jetzt umgangen. 8)

Ist zwar kein schöner Weg, aber er funktioniert:

Ich zeichne jetzt mit einem Timer den Rahmen um das / die markierten Item(s). Dann tritt dieser Effekt nicht auf.

Falls jemand noch eine bessere Lösung hat, dann bitte posten.

Michael Lamers