StringGrid 控件,某Cells[i,j] 中数据动态更新的同时,改变该字体颜色,如何“给人感觉闪一下”?(类似股票行情界面) (100分)

  • 主题发起人 主题发起人 eachbuilder
  • 开始时间 开始时间
谢谢 pla250 的代码。不过是用于文字对齐,现我要实现的是颜色的变化。
 
标记一下
关注此题[8D]
 
别用什么红蓝,
OnCustomDraw事件中直接调反显颜色,100ms后再激活draw一遍(遍数随意),
闪动效果就出来了。注意:闪动时要禁止grid的任何自动draw事件。
 
兄弟的问题好象是如何把Edit1和StringGrid的格子关连起来,那就需要记录格子的坐标,Edit1中多余的属性只有Tag属性,
但Tag属性是一个整数,而我们需要在Edit中记录格子的两个坐标,好在格子的坐标不会是负数,一般也不会超过Word的最大值,
所以可以用一个整数来保存两个Word类型的数,高位是Col,低位是Row,在Edit改变的时候再根据它的Tag属性解析出相对应的Cells,
并改变它的颜色,请看例子:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Edit1: TEdit;
Edit2: TEdit;
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
Var Rect:TRect;
ACol,ARow:Integer;
iTag:Integer;
begin
if not (Sender is TEdit) then
Exit;
iTag:=(Sender as TEdit).Tag;
ACol:=Loword(iTag);
ARow:=Hiword(iTag);
StringGrid1.Cells[ACol,ARow]:=Edit1.Text;
StringGrid1.Canvas.Brush.Color:=clRed;//改成红色.
Rect:=StringGrid1.CellRect(ACol,ARow);
StringGrid1.Canvas.FillRect(Rect);//填充
StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]);
//输出文字.
Sleep(50);
//等50ms
StringGrid1.Invalidate;
//再画一次以恢复颜色.
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Tag:=MakeLong(3,3);
Edit2.Tag:=MakeLong(2,3);
Edit1.OnChange:=Edit1Change;
Edit2.OnChange:=Edit1Change;
end;

end.
 
有誰知道在STRINGGRID中用鼠標或者敲上下箭頭改變row的時候,等價哪個事件?
謝謝
 
我做过这样的控件,当时花了很大的力气,关键是要建刷新的元素List,记录刷新间隔时间,
并触发刷新事件
 
to 轻松虎
具体讲一讲,来点代码,可否?谢谢!
 
请留邮箱,我给你个 Demo,你看看是不是你想要的效果
 
谢谢!
Webmaster@eachbuilder.com
 
轻松虎,大侠,顺便给我也发一个吧
l_on@163.com
 
轻松虎,Demo已阅,非常棒!
麻烦您给我发源代码,十分感谢!!收到即给分。
 
老大
可以给把原代码给我一个么?
我可以另开辟的战场给你100分!
我的mail地址:lvfugao@hotmail.com
 
轻松虎,大侠,可以给把原代码给我一个么?顺便给我也发一个吧

我可以给100分!
我的mail地址:lwgygz@sina.com
 
多人接受答案了。
 
后退
顶部