请教各位高手,如何翻转memo中的文字(100分)

  • 主题发起人 主题发起人 龙海
  • 开始时间 开始时间

龙海

Unregistered / Unconfirmed
GUEST, unregistred user!
我用memo读入了一个文本文件,并用一个计时器改变memo的top值,使之产生滚动,
我现在想在它滚动的时候,通过一个按钮随时翻转memo中的文字(不是旋转,是水平
镜面翻转)。
请教各位高手,是不是可以做到?怎么做?(最好有源码),我在这里先谢过了!
 
uses StrUtils

procedure TForm1.Button1Click(Sender: TObject);
var I:Integer;
begin
for I:=0 to Memo1.Lines.Count-1 do Memo1.Lines:=ReverseString(Memo1.Lines);
end;
 
楼上的方法 似乎没有考虑 汉字的情况(把汉字的 ASC 码颠倒会出现意外的文字) 不知道 龙海 的问题要考虑汉字吗?
 
非常感谢TYZhang,我试了一下你的代码,但不是我要的效果,
我要的效果是镜面翻转,不是字符位置的改变。就像在镜子里看到的一样!
 
把Memo1.Alignment:=taRightJustify;
 
非常感谢TYZhang,我要的效果是镜面翻转,不是字符位置的改变。就像在镜子里看到的一样!
 
好像要手动绘图吧
 
据我所知,用memo这个控件来实现好像不行。
不知道你是什么需求,可否用canvas来模拟。
 
to Cowboy Blues
memo没有canvas
能具体说明一下你的想法吗?
 
哈哈,可以这样(不是解决办法),在Canvas上TextOut字,象图片翻转一样把Canvas翻转(做图片处理)
 
[:)]感谢各位,我是一下各位的方法,成功后一定加分!
 
看看有没有一个好办法。
 
填文字的时候用TMemo,翻转的时候用TImage
 
感谢各位,问题尚未解决,
我想把memo中的文本倒入到一个位图上,然后翻转位图,但是下列代码老是生成空白图片,请各位指正。
TempBmp:=Tbitmap.Create;
TempBmp.Width:=memo1.Width;
memo1.Lines.LoadFromFile(filename);
linescount:=memo1.Lines.Count;
txtheight:=Tempbmp.Canvas.TextHeight('我');
sumheight:=linescount*txtheight;
tempbmp.Height:=sumheight;

bitblt(tempbmp.Canvas.Handle,0,0,tempbmp.Width,tempbmp.Height,
memo1.Handle,0,0,srccopy);
 
procedure tFORM1.TxtToGif(txt, FileName: String);
var
temp: TBitmap;
GIF : TJPEGImage;
BEGIN
temp:=TBitmap.Create;
try
temp.Height :=400;
temp.Width :=60;
temp.Transparent:=True;
temp.Canvas.Brush.Color:=clWindow;
temp.Canvas.Font.Name:='宋体';
temp.Canvas.Font.Color:=clred;
temp.Canvas.TextOut (10,10,txt);
temp.Canvas.TextOut (10,50,txt);
FORM1.Image1.Picture.Assign(nil);
GIF := TJPEGImage.Create;
try
GIF.Assign(Temp);
GIF.SaveToFile(FileName);
FORM1.Image1.Picture.Assign (GIF);
finally
GIF.Free;
end;
Finally
temp.Destroy;
End;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TxtToGif('ASDFASDFASDFASDF','F:/ABC.JPG');
end;

uses JPEG;
 
to wqhatnet
我需要把memo的前景色和背景色页一起读出来,我试了一下你的方法,
temp.Canvas.Brush.Color:=memo1.color;//黑色
temp.Canvas.Font.Color:=memo1.font.color;//红色
这样读出的图片,每行之间会有一个白条。(memo有许多行),而且,只有有文字的地方才会出现黑色背景。
 

temp.Canvas.TextOut (10,10,txt);
temp.Canvas.TextOut (10,50,txt);
替换为:
for i:=0 to memo1.lines.count-1 do
temp.Canvas.TextOut (10,20*i,memo1.lines.strings);
试试
 
非常感谢各位,问题已解决,但是翻转速度较慢,我用的是
bitblt(bm.canvas.handle,i,0,i,tempbmp.height,
tempbmp.canvas.handle,tempbmp.width-i-6,0,srccopy);
谁有更好的方法请告诉我,我一定送分。好了,现在放分!!!
 
后退
顶部