Autor Beitrag
pascalsv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: So 15.10.06 14:17 
Hallo zusammen,

da das Design meiner Applikation einen blauen Selektionsbalken der TListBox nicht "toleriert", möchte ich diese Funktion selbst schreiben.

Da ich den vertikalen Balken nicht möchte, lese ich aus einem Array immer nur sieben Zeilen aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
          
          lbMP3s.Clear;
          if length(aResultArray) > 7 then iMax := 7 else iMax := length(aResultArray);
          for i:= 0 to iMax-1 do begin
            lbMP3s.Add(aResultArray[i].Title)
          end;


Die OnDraw-Methode der ListBox sorgt dann für die Zeichnung der Selektion:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TfJukebox.lbMP3sDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  myListBox : TRzListBox;
  sText : string;
begin
  myListBox := (Control as TRzListBox);
  sText := myListbox.items.strings[index];
  if myListBox.Items.Strings[Index] <> '' then begin
    with (Control as TRzListBox).Canvas do
    begin
      if Index = myListBox.Tag then begin
        Font.Color := clMaroon;
        Brush.Color := clWhite;
      end
      else begin
        Font.Color := clWhite;
        Brush.Color := clMaroon;
      end;
      FillRect(Rect);
      TextOut(Rect.Left,Rect.Top,sText);
    end;
  end;
end;


Nun habe ich zwei Buttons, mit denen ich die selektierte Zeile wählen kann. Dabei habe ich mir das so gedacht, dass diese lediglich den Wert für den Tag der Listbox verändern und danach OnDraw aufgerufen wird. Jedoch wird OnDraw leider nicht aufgerufen. Wie kann ich das ändern. Manuell möchte ich die Methode nicht aufrufen, weil ich dann alle Indizes mitgeben muss.

Hat einer einen Tip?

Pascal