初级问题,急急急

lhy 2000-01-18 08:46:00
本人原是搞VB的,但经不起Delphi的诱惑,开始用D编程了,现为了生存正开发了一个程序,遇到下面几个问题:
1、怎样在D中实现业务导航见面的制作?并用鼠标移动在图片上面发亮。
2、在D的数据控件中有没有把数据源中某一列的取出所有数据的控件,只能用属性(不用代码我也会)。
多谢高手指点!!!
...全文
278 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kxy 2000-01-20
  • 打赏
  • 举报
回复
to agui: 对对:)
kxy 2000-01-19
  • 打赏
  • 举报
回复
1)www.midatech.com/jiangtao下图形热区的控件.
2)没有,自己写,
for i:=0 to Table.Fields.Count-1 do
begin
Table.FiledbYName(Table.Fields[i].Name);
end;
光明山人 2000-01-19
  • 打赏
  • 举报
回复
to kxy:

>Table.FiledbYName(Table.Fields[i].Name);
>只是一个意思, something := Table.FiledbYName(Table.Fields[i].Name).AsXXXX;

绕大弯路了吧?
难道不能写成:something := Table.Fields[i].AsXXXX ?

Venne 2000-01-19
  • 打赏
  • 举报
回复
YJQ:
:)
我想你可能理解错我的意思了,我的意思是准备按钮的三幅图片的状态,当然这三幅图片可以放在一幅图上,根据索引号然后动态地从资源中从API函数把某个状态切换出来。就象SpeedButton干得那样。
当然你说的效果我没试过,因为我觉得那样做出的界面是不是太粗糙了?我是做多媒体应用程序的,我想我的客户也不会接受。我们经常花非常多的时间制作各种按钮,这大概也是很多制作精美的程序所必须的过程。
为了模拟极品飞车的的按钮效果,(我怀疑它是计算出来的)我曾为一个按钮做了十幅图片。但一般都不会太大,而且我自己写了一个BitmapList,可以非常快地存取外部资源,所以没有考虑过对一幅图直接处理的情况(主要是计算量太大)。
光明山人 2000-01-19
  • 打赏
  • 举报
回复
不同意Venne的地方:
1、
bmp.width:=img.width;
bmp.height:=img.heiht;
bmp.loadfromfile(Filename);{这里注明你可以从多种途径获得该位图}
既然要load,设置宽高就没用了,因为Load以后宽高是位图文件的实际宽高。
2、
同意ahfei,可以用TDBLookupComboBox。不用编码。
添加该数据源及DataSource,然后ListSource指向该DataSource, 设置ListField为显示的字段,KeyField为索引字段。一般来说KeyField为代码值,而ListField为代码的描述或名称字段。当然,如果不用数据感知控件,就得编码了。或许谁能编一个控件。
渤海海峡 2000-01-19
  • 打赏
  • 举报
回复
to:Venne
搞三副图片是不是有点占空间,直接对一副图片处理如何?比如用canvas的TransparentStretchBlt(对图象的每个点做加重颜色操作),可是这样得到的效果感觉比较硬,不太好,如何既用一副图又能使图象的变化比较柔和呢?
zyb 2000-01-19
  • 打赏
  • 举报
回复
试下此代码:某类型变量:=Table1.FieldByName('字段名').AsString;
.AsInteger;等等
ahfei 2000-01-19
  • 打赏
  • 举报
回复
agree with Venne
Venne 2000-01-19
  • 打赏
  • 举报
回复
第一个问题:
如果你想自己做,可以使用MOUSEMOVE事件来处理,但是,在DELPHI中,你可以继承它的两个内部消息:CM_MOUSEENTER和CM_MOUSELEAVE,这样你可以获得两个事件,即当鼠标移进时的事件可鼠标离开时的事件。
然后准备三幅状态的图片,普通,移动和按下时的效果,然后分别在不同的事件里为IMAGE调用它。如果您希望有如何做的源码,可以通知我,我寄一份给你。
当然为了方便,你也可以下载控件。
第二个问题:
使用DBGRID就可以了。要点是在程序中,动态地为数据源中的某一列创建一个Column,这可以使用 DbGrid.Columns.add(好象是吧,具体因为Delphi有Code sight,我一般不记的)。把这列的DATAFIELD指向相应的数据源字段,然后该DBGRID仅拥有这个数据源该列的所有内容。
ahfei 2000-01-19
  • 打赏
  • 举报
回复
>>实在不好意思我的问题没有陈诉明白,我的第二问题意思是在Delphi中有什么样的下拉>>框数据控件只用选属性,不用写代码可实现,下拉框中的值是数据源某一字段的所有记>>录。
haha,这次我就不同意venne啦。
用TDBLookupComboBox,在Data Controls栏。
设ListSource,和KeyField属性,搞定:)
Venne 2000-01-19
  • 打赏
  • 举报
回复
关于闪烁,是你在使用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';

ComBoBox.items.add(value);
dataset.next;
end;

end;
lhy 2000-01-19
  • 打赏
  • 举报
回复
实在不好意思我的问题没有陈诉明白,我的第二问题意思是在Delphi中有什么样的下拉框数据控件只用选属性,不用写代码可实现,下拉框中的值是数据源某一字段的所有记录。
第一问题是我写一段小程序实现鼠标移动到一个图片上让它变亮,移动离开后恢复原样。
我是用属性实现的,在切换中有闪动现象,请问怎样避免?谢谢大家!!!
kxy 2000-01-19
  • 打赏
  • 举报
回复
Table.FiledbYName(Table.Fields[i].Name);
只是一个意思, something := Table.FiledbYName(Table.Fields[i].Name).AsXXXX;
光明山人 2000-01-19
  • 打赏
  • 举报
回复
1、我想你可以用TImage,然后准备两幅图,然后监测当鼠标在其上时用亮的一幅,当鼠标移开时用暗的一幅;
2、我也不太懂你的意思,是否取出某个数据集(Dataset)中某一列所有数据的意思?
如果你是输出到ListBox中,可以这样写:
Dataset.First;
while not Dataset.EOF do
begin
ListBox.Items.Add( Dataset.FieldByName(FieldName).AsString );
Dataset.Next;
end;

kxy的代码有些奇怪。
barton 2000-01-18
  • 打赏
  • 举报
回复
搞不懂什么意思。

导航不是有专门的控件吗?还有HotImage这样的控件?

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧