P.D.
版主
    
 發表:603 回覆:4038 積分:3874 註冊:2006-10-31
發送簡訊給我
|
請問各位! 我需要一個StringGrid 的功能, 該Column必須能直接在cell上編輯, 而又能如FixCol般固定在畫面上, 但是又
不能使用FixCol,
除了ThirdParty提供的元件, Delphi本身的StringGrid 有沒有辦法可以達成?
我搜尋了本站相關文件找不到有關這方面的參考文獻, 請各位協助囉! 謝謝!
|
william
版主
    
 發表:66 回覆:2535 積分:3048 註冊:2002-07-11
發送簡訊給我
|
Perhaps you could create your own grid
|
william
版主
    
 發表:66 回覆:2535 積分:3048 註冊:2002-07-11
發送簡訊給我
|
Feel bored this morning ![]() , class="code">unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids; type
TForm1 = class(TForm)
DrawGrid1: TDrawGrid;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure DrawGrid1TopLeftChanged(Sender: TObject);
procedure DrawGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
var Value: String);
procedure DrawGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
private
{ Private declarations }
FSL: TStringList;
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
FSL := TStringList.Create;
for i := 1 to DrawGrid1.RowCount do
FSL.Add(IntToStr(i));
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
FSL.Free;
end; procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with TDrawGrid(Sender) do begin
if ACol-LeftCol=3 then with Canvas do begin
Brush.Color := clBtnFace;
FillRect(Rect);
Brush.Style := bsClear;
TextRect(Rect,Rect.Left 2,Rect.Top 2,FSL[ARow]);
end;
end;
end; procedure TForm1.DrawGrid1TopLeftChanged(Sender: TObject);
begin
TDrawGrid(Sender).Invalidate;
end; procedure TForm1.DrawGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
var Value: String);
begin
Value := '';
with TDrawGrid(Sender) do begin
if ACol-LeftCol=3 then begin
Value := FSL[ARow];
end;
end;
end; procedure TForm1.DrawGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
begin
with TDrawGrid(Sender) do begin
if ACol-LeftCol=3 then begin
FSL[ARow] := Value;
end;
end;
end; end.
|
P.D.
版主
    
 發表:603 回覆:4038 積分:3874 註冊:2006-10-31
發送簡訊給我
|
sorry! William兄! 最近案子很多, 沒有太多時間研讀, 我試了一下你提供的內容, 不過總感覺到
怪怪的, 其中一段 if ACol-LeftCol=3 我一直無法明白該處所定義的cell是
在那一塊, 由於我的grid
cell[0,ARow], cell[1,ARow], cell[2,ARow], cell[3,Arow]是fixedcol
cell[4,ARow] 是要fixed, 但夠edit, cell[5,ARow]之後是可以scroll, 以
提供的語句, topleft=4, 如果我改為
if ACol-LeftCol=4 則 cell[4,ARow]會固定在 column=7的位置, 但如果我
設定 if ACol-LeftCol=0, 則會發生 index out of range 錯誤, 等我稍有
空點, 我再仔細測試一下, 謝謝!
|