想實作一個StringGrid內,某個單元格內容過長,想實作此單元格內容滾動出現,從第一個字符開始滾動直到最后一個,而后反復如此,不知如何實作,或者有其他表格控制元件能實作此功能,不勝感激!
uj5u.com熱心網友回復:
如果列寬度都很窄的話,滿屏都是滾動的文字用戶體驗也不好吧,而且比較費資源。通常文字超過列寬度,會在滑鼠放上去的時候顯示一個小提示框,顯示完整的欄位內容。顯示滾動文字有兩種方法:一是通過動態洗掉單元格中最前面的字符,模擬滾動效果,此方法簡單,但不平滑。
二是通過繪制單元格內容實作,比較平滑。下面的例子只繪制選中的單元格:
implementation
{$R *.dfm}
var
ps:integer=0;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval:=10;
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
strText:string;
rect:TRect;
cv:TCanvas;
begin
strText:='單元格內容';
rect:=StringGrid1.CellRect(StringGrid1.Selection.TopLeft.X, StringGrid1.Selection.TopLeft.Y);
rect.Left:=rect.Left+3;
rect.Top:=rect.Top+5;
cv:=TCanvas.Create;
cv.Handle:=GetwindowDC(StringGrid1.Handle);
try
cv.Font.Color:=clred;
cv.TextRect(rect, rect.Left+ps, rect.Top+2, strText);
inc(ps);
if ps > cv.TextWidth(strText)*2 then
ps:=-cv.TextWidth(strText);
finally
ReleaseDC(StringGrid1.Handle, cv.Handle);
cv.Free;
end;
end;
uj5u.com熱心網友回復:
可以動態(滑鼠點擊單元格時),向單元格嵌入一個Memo。這樣,可以通過Memo單元格(過長)的內容,uj5u.com熱心網友回復:
MouseOver的時候顯示一個Hint還是不錯的轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/55089.html
標籤:VCL組件開發及應用
