Avatar billede hasan Nybegynder
17. september 2004 - 17:41 Der er 6 kommentarer og
1 løsning

Listbox som playlist

Jeg bruger en listbox som playlist og det er også fint nok, men hvordan kan jeg skifte farven på den item der bliver spilledet??

f.eks gøre den spillede sangs item til en anden farve eller gøre den fed.

vil have kode eksempler
Avatar billede stoney Nybegynder
17. september 2004 - 18:51 #1
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Edit1: TEdit;
    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nummer : Integer;

implementation

{$R *.dfm}

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);

var
  horzOffset: integer;
  vertOffset: integer;
begin

  // // ListBox.Style is set to lbOwnerDrawFixed.

  with ListBox1.Canvas do begin

    vertOffset := (((Rect.Bottom - Rect.Top)
                  - TextExtent(ListBox1.Items[Index]).CY) div 2);


    horzOffset := 2;  // pixel fra venstre

    if Index = nummer then begin
      Brush.Color := clFuchsia;
      Font.Color := clBlack;
      font.Style := [fsbold];

    end
    else begin
      Brush.Color := clWhite;
      Font.Color := clBlack;
    end;

    FillRect(Rect);

    TextOut(Rect.Left + horzOffset,
            Rect.Top + vertOffset,
            ListBox1.Items[nummer]);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin

nummer := strtoint(edit1.Text);  // dette kun til test
listbox1.ItemIndex := nummer;
end;

end.


Stoney
Avatar billede hasan Nybegynder
17. september 2004 - 19:59 #2
virker ikke særlig godt.
den bliver fed  og deter fint nok. baggrunden bliver lila! men det kan man sikker ændre. hvis jeg ændre farven på item 5 så får alle andre den samme caption som item 5 har!!

kan man ikke gøre det på en anden måde?
Avatar billede martinlind Nybegynder
17. september 2004 - 20:52 #3
Hasan >> Hvis du vil kode i delphi og du kan finde ud af at lave en listbox som du kan bruge som playlist, så kan du helt sikkert også finde udaf at markere OnOwnerdraweventen og trykke på F1, så får du et udemærket eks. lige til at kopiere ind i din kode og tilpasse så det funker som du gerne vil ha' det.

100 point beretter dig ikke til at tale som en andet befalings mand.

og hvis du tror du bare kan bede folk om at kode dit program, så er du gået forkert, exp. er til problemløsning det er ikke en kode fabrik !!!!
Avatar billede stoney Nybegynder
17. september 2004 - 21:14 #4
martinlind>> tak for supporten.

hasan> den med caption havde jeg overset da jeg testede med ens items.
Listbox1 style skal sættes til lbownerdrawfixed

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Edit1: TEdit;
    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nummer : Integer;

implementation

{$R *.dfm}

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);

var
  horzOffset: integer;
  vertOffset: integer;
begin

  with ListBox1.Canvas do begin


    vertOffset := (((Rect.Bottom - Rect.Top)
                  - TextExtent(ListBox1.Items[Index]).CY) div 2);


    horzOffset := 2;

    if  nummer =(Index) then begin

        Brush.Color := clred;    // baggrundsfarve
        Font.Color := clgreen ;  // farve på font/skrift
        font.Style := [fsbold];  // bold,italic etc
      end
      else begin
        Font.Color := clblack;  //  her på items der "ikke" er valgt
      end;


    FillRect(Rect);

    TextOut(Rect.Left + horzOffset,
            Rect.Top + vertOffset,
            ListBox1.Items[Index]);
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin

nummer := strtoint(edit1.Text);  // dette kun til test
listbox1.ItemIndex := nummer;

end;

end.

Stoney
Avatar billede martinlind Nybegynder
17. september 2004 - 21:48 #5
Selv tak
Avatar billede hasan Nybegynder
18. september 2004 - 11:15 #6
har en ting mere. når jeg vælger en item(lad os sige item 3) så får den en anden farve som den skal. hvis jeg så vælger en anden item igen(item 7) så for den også en anden farve, men item 3 er stadig grøn. jeg bliver nød til at select item 3 så den for den blå bagrund og så kommer den gammle farve tilbage. kan det ikke fixes? det er mit sidste spøgsmål.
Avatar billede hasan Nybegynder
20. september 2004 - 17:49 #7
og point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester