T
txwz
Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现Media Player右边那样的可以同时让正在播放的歌曲和目前选种的歌曲同时高亮显示,并且使用不同颜色高亮显示?
我的方法如下,但是有问题:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
procedure pant;
procedure WMPAINT(var Msg: TWMPAINT); message WM_PAINT;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.pant;
var
rect:trect;
begin
rect.Left:=0;
rect.Top:=0;
rect.Right:=listbox1.Width;
rect.Bottom:=listbox1.ItemHeight;
listbox1.Canvas.Brush.Color:=clred;
listbox1.Canvas.Font.Color:=clyellow;
listbox1.Canvas.FillRect(rect);
listbox1.Canvas.TextOut(0,0,listbox1.Items.Strings[0]);
end;
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pant;
end;
procedure TForm1.WMPAINT(var Msg: TWMPAINT);
begin
inherited;
pant;
end;
end.
我吧主窗体的WMPAINT消息重写了,但是问题也来了。当窗体最小化的再显示出来的时候就不能让它在高亮显示了,好象是在我画完了之后,系统又画了一边,把我画出来的给覆盖掉了。想请教高手以下几个问题。
1。每次在我画完了之后,系统又做了些什么操作而使我的效果消失?
2。我本来想是重写TListBox的WMPAINT消息,可是它不能用主窗体重写WMPAINT的方法来重写他,应该如何实现这个要求呢?
3。如果我的方法根本不行,请大家赐教一个可行的方法。
谢过了。
我的方法如下,但是有问题:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
procedure pant;
procedure WMPAINT(var Msg: TWMPAINT); message WM_PAINT;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.pant;
var
rect:trect;
begin
rect.Left:=0;
rect.Top:=0;
rect.Right:=listbox1.Width;
rect.Bottom:=listbox1.ItemHeight;
listbox1.Canvas.Brush.Color:=clred;
listbox1.Canvas.Font.Color:=clyellow;
listbox1.Canvas.FillRect(rect);
listbox1.Canvas.TextOut(0,0,listbox1.Items.Strings[0]);
end;
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pant;
end;
procedure TForm1.WMPAINT(var Msg: TWMPAINT);
begin
inherited;
pant;
end;
end.
我吧主窗体的WMPAINT消息重写了,但是问题也来了。当窗体最小化的再显示出来的时候就不能让它在高亮显示了,好象是在我画完了之后,系统又画了一边,把我画出来的给覆盖掉了。想请教高手以下几个问题。
1。每次在我画完了之后,系统又做了些什么操作而使我的效果消失?
2。我本来想是重写TListBox的WMPAINT消息,可是它不能用主窗体重写WMPAINT的方法来重写他,应该如何实现这个要求呢?
3。如果我的方法根本不行,请大家赐教一个可行的方法。
谢过了。