关于闪烁,是你在使用IMAGE的Visible属性的开关时,整个窗口会重画造成的,不要使用两个以上的IMAGE来表现你的按钮状态的暗或亮的状态。
比较好的办法是使用Bitblt函数:其方法是:
procedure ChangeImage(img:TImage;filename:String);
var
bmp:Tbitmap;
begin
bmp:=TBitmap.create;
bmp.width:=img.width;
bmp.height:=img.heiht;
bmp.loadfromfile(Filename);{这里注明你可以从多种途径获得该位图}
With img do begin
bitblt(canvas.handle,0,0,width,height,bmp.canvas.handle,
0,0,SRCCOPY);
end;
bmp.free;
end;
使用这种方法可以无闪烁,当然,你不用API函数的话,也可以使用Canvas封装的CopyRect方法。
如果这个都嫌麻烦,你可以使用Image.picture.loadfromfile方法,或者其它途径来改变这个IMAGE的显示,也不会闪烁了,但会写很多无聊的代码。
第二个问题的话,好象只能使用代码了,DBLISTBOX或者DBCOMBOBOX只会改变DATASET里面的数据,而不会填充数据,其实写代码也很简单啊:(假设这个字段是个字符串型的值)
procedure FillData(ComboBox:TcomboBox;DataSet:Tdataset;FieldName:String);
var
i:integer;
value:string;
begin
Dataset.first;
for i:=1 to Dataset.recordcount do begin
if DataSet.FieldValues[fieldname]<>NULL then
value:=DataSet.fieldvalues[fieldname]{这里可以多写点代码处理不同类型的数据}
else
value:='NULL';
1、我想你可以用TImage,然后准备两幅图,然后监测当鼠标在其上时用亮的一幅,当鼠标移开时用暗的一幅;
2、我也不太懂你的意思,是否取出某个数据集(Dataset)中某一列所有数据的意思?
如果你是输出到ListBox中,可以这样写:
Dataset.First;
while not Dataset.EOF do
begin
ListBox.Items.Add( Dataset.FieldByName(FieldName).AsString );
Dataset.Next;
end;