画布问题,帮帮我吧,分不够可从其它问题中拿(180分)!(80分)

  • 主题发起人 主题发起人 Tomorrows
  • 开始时间 开始时间
T

Tomorrows

Unregistered / Unconfirmed
GUEST, unregistred user!
我的窗体中有三个控件,一个是tedit,一个是tlabel,一个是timage
在edit中输入文本,并将文本送给label,但有如下要求:
当在edit输入"+"或"="时,在label的canvas中显示image中的图像(不显示"+"或"="),
当在edit输入其他字符时,label照常显示,
比如我输入:"1234+567",在label中就应当显示"1234(image的图像)567",
也就是说,字符与图像要连贯,既不能重叠也不能有较大的间隔,我试过多次,就是不成功。

谢谢各位,帮帮我。
 
再次谢谢,请原谅我将问题故意提前。
 
var labelleft:integer;
imagewidth:integer;
begin
imagewidth:=image1.width;
labelleft:=label1.canvas.textwidth('1234');
labe1l.canvas.textout(0,0,'1234');
label1.canvas.draw(labelleft+1,0,image1.Picture.Graphic);
labe1l.canvas.text(labelleft+2+imagewidth,0,'567');
end;
 
不行,edit中的文字是动态输入,只有遇上加号或等号才显示image。
 
说些构想
捕捉键盘动作
当为+,=时在LABEL用空格代替 同时根据字体的宽度计算画图象的位置
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
label1.Canvas.FillRect(rect(0,0,label1.width,label1.height));
draw(edit1.text);
end;

procedure tform1.draw(s:string);
function minstr(s:string):integer;
var i,j:integer;
begin
i:=pos('=',s);
j:=pos('+',s);
if (i<>0) and (j<>0) then
result:=min(i,j)
else
result:=max(i,j);

end;

var temp:string;
imagewidth:integer;
strpos:integer;
str:string;
leftlabel:integer;
begin
temp:=s;
leftlabel:=0;
imagewidth:=image1.Width ;

strpos:=minstr(temp);

while strpos<>0 do
begin
str:=copy(temp,1,strpos-1);
label1.canvas.textout(leftlabel,0,str);
leftlabel:=leftlabel+label1.canvas.textwidth(str);
label1.canvas.draw(leftlabel+1,0,image1.Picture.Graphic);
leftlabel:=leftlabel+1+imagewidth;
showmessage(inttostr(leftlabel));
temp:=copy(temp, strpos+1,length(temp)-strpos);
strpos:=minstr(temp);

end;
label1.canvas.textout(leftlabel,0,temp);
end;
 
有什么用处??
 
good,BTW:
如何清空image.canvas中的内容,image1.refresh无效?
 
用FillRect()填充image的客户区,用背景色
 
有来了一个问题,若label1是经过改良的可以显示上下标字符的label,
("^"后边的字符上标,"_"后边的字符下标)
我主要用它显示一些数学公式,它显示上下标本身就用了canvas,
此时若用"天真"的方法,就行不通了,你会发现上下标功能失灵了,如何解决,
我愿意付所有积分,在此先谢谢了。
 
你究竟想干什么????
有了这个例子了你自己还不会想想,,要什么都给你写出来???
 
已经解决了
 
天真请到以下地方拿分:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=937293
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1021658
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=903170
 
多人接受答案了。
 

Similar threads

回复
0
查看
804
不得闲
回复
0
查看
1K
不得闲
D
回复
0
查看
909
DelphiTeacher的专栏
D
后退
顶部