0
我有一個表單。在formshow上,我將一個字段的值初始化爲stringgrid單元格,但它在單元格文本下顯示一個陰影。 我已經使用波斯字符作爲字段的值。
我做了與英國值相同,但它工作正常。
我很欣賞任何建議。輸出StringGrid下的陰影
例如:
我有一個表單。在formshow上,我將一個字段的值初始化爲stringgrid單元格,但它在單元格文本下顯示一個陰影。 我已經使用波斯字符作爲字段的值。
我做了與英國值相同,但它工作正常。
我很欣賞任何建議。輸出StringGrid下的陰影
例如:
隨着enaabled DefaultDrawing
文本將如果輸入OnDrawCell
是已經呈現。
由於要計算使用的DrawText
DT_CALCRECT
你將不得不計算Rect
至極應充/有FillRect
清除繪畫所需的rowHeight。
您可以使用UnionRect
來獲得必須填寫的最終Rect(示例中爲FillRect
)。
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[1,1] := 'Hallo'#13'World';
StringGrid1.Cells[2,2] := 'اهای' +13# + 'جهان';
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
S:String;
drawrect,Fillrect : TRect;
begin
s := (Sender as TStringGrid).Cells[ACol, ARow];
drawrect := Rect;
DrawText((Sender as TStringGrid).Canvas.handle, Pchar(s), Length(s),
drawrect, DT_CALCRECT or DT_WORDBREAK or DT_LEFT);
if (drawrect.bottom - drawrect.Top) > (Sender as TStringGrid)
.RowHeights[ARow] then (Sender as TStringGrid)
.RowHeights[ARow] := (drawrect.bottom - drawrect.Top);
UnionRect(FillRect,Rect,DrawRect);
(Sender as TStringGrid).Canvas.FillRect(FillRect);
DrawText((Sender as TStringGrid).Canvas.handle, Pchar(s), Length(s),
drawrect, DT_WORDBREAK or DT_LEFT);
end;
看起來好像您確實在使用TextOut之前實現了DrawCell並且沒有填充Rect。 – bummi
s:=(發件人爲TStringGrid).Cells [ACol,ARow]; if length(s)> 0 then begin drawrect:= Rect; ((Sender as TStringGrid).Canvas.handle,Pchar(s),Length(s),drawrect,DT_CALCRECT或DT_WORDBREAK或DT_LEFT); if(drawrect.bottom - drawrect.Top)>(Sender as TStringGrid).RowHeights [ARow] then (Sender as TStringGrid).RowHeights [ARow]:=(drawrect.bottom - drawrect.Top) else begin drawrect .Right:= Rect.Right; (Sender as TStringGrid).Canvas.FillRect(drawrect); ((Sender as TStringGrid).Canvas.handle,Pchar(s),Length(s),drawrect,DT_WORDBREAK or DT_LEFT); 結束; –
根據s的長度,我看不到需要進行不同的處理,但是如果添加'(Sender as TStringGrid).Canvas.FillRect(Rect);'作爲第一個例程,則問題應該是一個,因爲啓用DefaultDrawing'rext已經被繪製到網格中。 – bummi