设置Stringgrid单元格文字对齐 |
尚未結案
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
我现在想扩充TStringgrid
[#]
TStringGridEx=Class(TStringgrid)
private
FTextAlignment :TAlignment ;
procedure SetTextAlignment (Value:TAlignment);
public published
property TextAlignment :TAlignment read FTextAlignment write SetTextAlignment ;
end;
//如何实现呢?
procedure TStringGridEx.SetTextAlignment(Value: TAlignment);
begin
FTextAlignment := Value;
end;
[/#]
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
我依照你起的頭try了一下,方法有點土法煉鋼就是了,雖然你找到答案,還是貼出來參考看看了.. 附上測試的專案上傳, http://delphi.ktop.com.tw/loadfile.php?TOPICID=18720230&CC=418670
TStringGridEx=Class(TStringgrid) private FTextAlignment :TAlignment ; procedure SetTextAlignment (Value:TAlignment); procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);override; public published property TextAlignment :TAlignment read FTextAlignment write SetTextAlignment ; end; procedure TStringGridEx.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); begin inherited; if DefaultDrawing then begin if self.FTextAlignment=taLeftJustify then begin Canvas.TextRect(ARect, ARect.Left+2, ARect.top+2, Cells[ACol, ARow]); end; if self.FTextAlignment=taCenter then begin Canvas.TextRect(ARect, (ARect.left+ARect.right-canvas.TextWidth(Cells[ACol, ARow])) div 2, ARect.Top+2, Cells[ACol, ARow]); end; if self.FTextAlignment=tarightJustify then begin Canvas.TextRect(ARect, ARect.right-canvas.TextWidth(Cells[ACol, ARow])-2 ,ARect.Top+2, Cells[ACol, ARow]); end; end; end; procedure TStringGridEx.SetTextAlignment(Value: TAlignment); begin if value <> FTextAlignment then begin FTextAlignment := Value; Validate; end; end;發表人 - hahalin 於 2004/11/15 22:15:40 發表人 - hahalin 於 2004/11/15 23:07:12 |
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
为什么画完了成了这个样子?
代码如下: procedure TStringGridEx.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); var FixRect: TRect; begin inherited; if Cells[ACol, ARow] <> '' then begin //填滿每一 Cell 背景 (清掉舊 Cell Text) Canvas.FillRect(ARect); //繪製新的 Cell Text FixRect := ARect; //修正 Rect 座標 FixRect.Left := ARect.Left +2; FixRect.Top := ARect.Top +2; FixRect.Right := ARect.Right ; FixRect.Bottom := ARect.Bottom; if self.FTextAlignment = taLeftJustify then begin DrawText(canvas.Handle, PChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), FixRect, DT_LEFT); // Canvas.TextRect(ARect, ARect.Left + 2, ARect.top + 2, Cells[ACol, ARow]); end; if self.FTextAlignment = taCenter then begin DrawText(canvas.Handle, PChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), FixRect, DT_CENTER); //Canvas.TextRect(ARect, (ARect.left + ARect.right - canvas.TextWidth(Cells[ACol, ARow])) div 2, ARect.Top + 2, Cells[ACol, ARow]); end; if self.FTextAlignment = tarightJustify then begin DrawText(canvas.Handle, PChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), FixRect, DT_RIGHT); //Canvas.TextRect(ARect, ARect.right - canvas.TextWidth(Cells[ACol, ARow]) - 2, ARect.Top + 2, Cells[ACol, ARow]); //exit; end; end; //这里尝试添加invalidategrid好像也不行也< > //>< > 發表人 - |
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |