TStringGrid Color Problem |
尚未結案
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
procedure TMainCustomerForm.ContactGridDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
with Sender as TStringGrid do begin
// ©?¦²®?
//if State=[gdSelected] then begin
if (ACol = 2) and (ARow > 0) Then
Begin
Canvas.Brush.Color:= $0080FFFF; //©³¦â
Canvas.FillRect(Rect); //ø©³¦â
End;
end;
End; 這句在當我不是在grid中打字時,是沒有問題,但當我在grid中打字時,color郤消失了.......為何呢?
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
The proper way is to create your own grid/inplace editor >> >> > < class="code">unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls; type
TStringGrid = class(Grids.TStringGrid)
protected
function CreateEditor: TInplaceEdit; override;
end; TForm1 = class(TForm)
StringGrid1: TStringGrid;
private
public
end; var
Form1: TForm1; implementation {$R *.dfm} type
TMyEdit = class(TCustomEdit); function TStringGrid.CreateEditor: TInplaceEdit;
begin
Result := inherited CreateEditor;
TMyEdit(Result).Color := clBlue;
end; end.
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi BorlandUser 您好:
試試這個~~
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin with Sender as TStringGrid do begin if (ACol = 2) and (ARow > 0) Then Begin Canvas.Brush.Color:= $0080FFFF; Canvas.Font.Color := clBlack; // 文字色自己決定 Canvas.FillRect(Rect); Canvas.TextOut(Rect.TopLeft.x,Rect.TopLeft.y 1,Cells[ACol, ARow]); End; end; end;我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
Modify the above example to show editor for odd column only:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; type TStringGrid = class(Grids.TStringGrid) protected function CreateEditor: TInplaceEdit; override; function CanEditShow: Boolean; override; end; TForm1 = class(TForm) StringGrid1: TStringGrid; private public end; var Form1: TForm1; implementation {$R *.dfm} type TMyEdit = class(TCustomEdit); function TStringGrid.CanEditShow: Boolean; begin Result := inherited CanEditShow and Odd(Col); end; function TStringGrid.CreateEditor: TInplaceEdit; begin Result := inherited CreateEditor; TMyEdit(Result).Color := clBlue; end; end. |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
在 SelectCell事件中添加。 procedure TFS23.GD02SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
GD02.EditorMode := Acol = 5 ; { COL = 5 允許編輯 }
if Acol = 5 then GD02.Options := GD02.Options [goediting]
else GD02.Options := GD02.Options - [goediting];
end; 最好加上 .EditorMode 用來關閉游標,避免 游標移位。這點很重要! 在 Drawcell 事件中,可透過 Grid.Canvas 繪製背景灰色(無法編輯的地方)。
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
感謝解答,問題都已解決,但我有一點不明白是為何你
GD02.EditorMode := Acol = 5 ; { COL = 5 允許編輯 }
這句是沒有問題呢? 因為我看help時,editormode是要設為true/false,但你郤設為數字,但又沒有發生錯誤,請問何解?還有這句用意又為何呢? 正如你之前所說,要加一句editormode為false的sentence,那即是否要變成這樣...:
if Acol = 5 then begin
GD02.Options := GD02.Options [goediting];
GD02.EditorMode := True;
End
Else
Begin
GD02.Options := GD02.Options - [goediting];
GD02.EditorMode := False;
End; Am I correct?
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
BorlandUser
中階會員 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |