100元人民币解决一问题? *****级问题 , 高手请进.(0分)

  • 主题发起人 主题发起人 linxia
  • 开始时间 开始时间
L

linxia

Unregistered / Unconfirmed
GUEST, unregistred user!
我首先说明我为什么要这么做, 这个问题已经困绕了我好几天了,也问过很多的朋友, 网友,找过太多的控件,也无动于忠. 对于您来说可能花费一点时间, 100块不要赚少. 事成之后,决不食言. qq:15405747; email:cai_10@163.com

问题是这样的

我用的是delphi6+sql server7, 里头有一个表 名叫 MIAN 表. 里头有两个字段, 一个是编号(bh), 一个是图象(image) 两字段.

接下来请看(样例:为了帮您理解我的意图)
http://www.cctv.com.cn/geography/index.html 这个网页里头有个动画
它是个循环播放走呀走的动画, 而且具且触发事件, 当移动上面,指针变为手样

(它这是个整体的)

要求:**
把数据库所用图片的字段链起来形成它那个动画. 并且每张小图片都能够点击触发click事件.

(我原来想用到dbcgrids控件, 再在上面放一个dbimage控件. )我的笨方法, 做不出来

就这困难. 是不是五星级, 幸苦大家了. 我在这先谢过各位兄台


 
大哥,那是用java或flash作的。
 
要用delph做, 问题我表达的如果不清楚, 请讲, 是要用delphi做. 要求把表里头的image图形全都
链起来. 还可以每个点击
 
我现在qq开着. 如不明白与我联系. 谢了
 
我知道他做的是gif动画. 但我现在不能做面gif动画, 数据库里头有几条记录就链几条.我原来用dbcgrids做过, 但是不能动画
 
你是想同模拟Flash的效果。

对http://www.cctv.com.cn/geography/index.html个例子,你可以动态生成N个IMAGE
然后一个挨一个的防在一个PANEL里,然后用程序控制整体移动。
 
用一个timer就可以实现,在ontimer事件里调用
mytable.next();
if mytable.eof then mytable.first;
其他的操作自己处理吧
 
我需要源代码? 可以吗? 就像在delphi播放一个flash 它播放它的, 不用管它,

如果加上了timer就会出现问题, 时时都在处理它, 这种方案不行,
 
有谁能够胜任, 万分感谢
 
有没有更好的解决办法, 请出招
 
你可以生成一个图象列表,里面包含从数据库取来的图片!
然后用定时进行替换图片就行了!
 
我准备来拿这100块,呵呵,先问一点,image里面存的图片大小是否一致?颜色数是否一致?
 
还有图像字段里面放的是什么类型的图形?
gif?bmp?jpg?
 
图像大不都一致
http://www.cctv.com.cn/geography/index.html
大小差不多, 大小应该可以自己调整, (数据库里头的图片长宽全都一样大)
bmp格式
 
我首先说一下我的想法,至于代码可能要具体写一段时间。

前提条件:
首先你要确定同时显示几个完整画面
(仔细研究一下就会发现:http://www.cctv.com.cn/geography/index.html 中是同时显示六个完整画面[这个时刻很短],
更多的时候是显示七个非完整画面,这时只有五个画面是完整的,另外两个是非完整的)
比如想同时显示3个完整画面,那么把就要动态创建4个TImage构件,然后从数据库中读其中的数据
来设置相应的属性,并作相应的移动。
其次,如果你要求它们都是独立的,最好采用多线程来做-单开辟一个线程专门做件事。
最后,如果想要每个画面(注意不是每个TImage构件!)都响应不同的Click事件,那么你只好在数据库加上一个字段:
每个图片对应的Click事件对应的函数名,然后再在程序中事先写好这些函数。
具体响应Click事件的方法是:当TImage构件响应Click时,就到数据库中去寻找相关数据来执行具体的代码!
以上说法不知行不行?
可不可以先给50 :-)

 
现在给出代码:

dfm文件,使用ado进行数据连接,其中的data source,用户,密码等请自行替换。

object Form1: TForm1
Left = 218
Top = 104
Width = 698
Height = 418
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Image1: TImage
Left = 244
Top = 12
Width = 16
Height = 16
Cursor = crHandPoint
OnClick = Image1Click
end
object DBGrid1: TDBGrid
Left = 533
Top = 0
Width = 157
Height = 391
Align = alRight
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
end
object DBImage1: TDBImage
Left = 0
Top = 0
Width = 229
Height = 391
Align = alLeft
DataField = 'image'
DataSource = DataSource1
Stretch = True
TabOrder = 1
end
object Button2: TButton
Left = 444
Top = 312
Width = 75
Height = 25
Caption = 'add'
TabOrder = 2
OnClick = Button2Click
end
object Edit1: TEdit
Left = 312
Top = 312
Width = 121
Height = 21
TabOrder = 3
end
object Button1: TButton
Left = 448
Top = 156
Width = 75
Height = 25
Caption = 'loadinto'
TabOrder = 4
OnClick = Button1Click
end
object Button3: TButton
Left = 448
Top = 200
Width = 75
Height = 25
Caption = 'play/pause'
TabOrder = 5
OnClick = Button3Click
end
object ImageList1: TImageList
Left = 476
Top = 68
end
object ADOQuery1: TADOQuery
Active = True
Connection = ADOConnection2
CursorType = ctStatic
Parameters = <>
SQL.Strings = (
'select * from abc')
Left = 196
Top = 40
end
object ADOConnection2: TADOConnection
Connected = True
ConnectionString =
'Provider=MSDASQL.1;Password=adnilinda:**:;Persist Security Info=' +
'True;User ID=sa;Data Source=adnil'
LoginPrompt = False
Left = 36
Top = 56
end
object DataSource1: TDataSource
DataSet = ADOQuery1
Left = 296
Top = 32
end
object Timer1: TTimer
Enabled = False
Interval = 300
OnTimer = Timer1Timer
Left = 260
Top = 200
end
end


.pas文件

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, Grids, DBGrids, DB, ADODB, StdCtrls, ImgList, ExtCtrls;

type
TForm1 = class(TForm)
ImageList1: TImageList;
ADOQuery1: TADOQuery;
ADOConnection2: TADOConnection;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBImage1: TDBImage;
Button2: TButton;
Button1: TButton;
Image1: TImage;
Timer1: TTimer;
Button3: TButton;
Edit1: TEdit;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Image1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.append;
adoquery1.Edit;
ADOQuery1.FieldByName('bh').AsInteger := 1;
dbimage1.Picture.LoadFromFile(Edit1.text);
ADOQuery1.Post;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
adoquery1.First;
while not adoquery1.Eof do
begin
ImageList1.Add(dbimage1.Picture.Bitmap, nil);
adoquery1.Next;
end;
adoquery1.first;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
timer1.Enabled := not timer1.Enabled;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ImageList1.GetBitmap(timer1.Tag,Image1.Picture.Bitmap);
image1.Refresh;
timer1.Tag := timer1.tag + 1;
if timer1.Tag = imagelist1.Count then timer1.Tag := 0;
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
showmessage('clicked!');
end;

end.

其中button1用来读取数据库中image信息,并缓存起来;
button3用来控制定时器,定时器则按缓存imagelist序列定时在image1上显示图形,
这里假设了图像大小是16x16,button2是我用来调试插入图形的。

100我全要了,嗬嗬!
 
你这样的做法只是有一张16*16的在动, 我要像http://www.cctv.com.cn/geography/index.html
网站一样, 我运行的上面的这段代码。 用定时计是个好方法,但是它不能够解决问题,
而这样的做法只是显示一张图片, 所有数据库图片都只能在这一个框框里动,而不可以自己定义

 
我只是给你一个示例,并非只有16*16,实际的大小你可以根据数据库里面的第一张
bitmap的大小来设定。
按照cctv上面的话可以这样,首先放一张底图image,然后在底图上播放动画bitmap。
 
后退
顶部