我在程序中用了DrawFocusRect,却看不到他画的线,求教他的颜色,线形等如何设置,
Canvas的Brush,pen等和DrawFocusRect的关系.
Canvas的Brush,pen等和DrawFocusRect的关系.
解决方案 »
- HOOK及窗口问题
- 请问:在2002年在WINDOWS98环境下用ACCESS和Delphi5.0编写了一个客车公司车票结算管理系统现在XP环境下不能使用?
- 进销存问题:如何对“客户付款期限”和“已过应收账时间”(比如过了期限15天、30天、60天、90天)进行预警?
- 大家来救急啊!一个关于连续播放wav的问题·!~~~~
- parambyname问题
- 85分跪求DEPHI(前台)+SQLSERVER(后台)的财务管理系统(源代码)或相关资料
- 通过地址取得计算机名的问题,有兴趣的请过来看。
- ADOQuery查询的字段数有没有限制?
- 怎样解决晃动问题
- 当你最爱的人问你“程序和他对你谁重要”你会怎么回答?当二者只能取其一,你会选谁我很困惑?
- 1000元现金急求!把TXT和RDB文件中文本自动上传到网上数据库中的小程序
- 为什么我用access查询显示时间前面会多了1889:12:31?
画的是虚线框
pen是边线颜色,brush是你画的图形中除线以外部分的颜色
基本上它们直接没关系
Canvas.Pen.Color:=clred;
Canvas.Brush.Color:=clblue;//如果这句在下一句前面,你就看不见下一句的效果
Canvas.DrawFocusRect(rect(0,0,20,20));
没有仔细看
What 'MM_TEXT mode' means ?
见:
http://218.108.41.12/vchome/book/chap8_2.htm
我给个例子大家看看,新建一工程,把下面的代码直接复制到Unit1,运行
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
CellHeight,CellWidth:integer;
oldCol,oldRow:integer;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Color := ClWindow; oldCol := 999;
oldRow := 999;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Col,Row:integer;
R: TRect;
begin
Col := X div CellWidth;
Row := Y div CellHeight;
//Canvas.Font.Color := clred;
if (Col <> OldCol) or (Row <> OldRow) then
begin
R:= Bounds(CellWidth * oldcol,CellHeight * oldrow,CellWidth,CellHeight);
Canvas.DrawFocusRect(R);
R:= Bounds(CellWidth * col,CellHeight * row,CellWidth,CellHeight);
Canvas.TextOut(r.Left,r.Top,'33');
Canvas.DrawFocusRect(R);
oldrow := row;
oldCol := col;
end;
end;procedure TForm1.FormResize(Sender: TObject);
begin
CellWidth := ClientRect.Right div 10;
CellHeight := ClientRect.Bottom div 10;
end;end.当鼠标在窗体上移动时,就会有个虚框跟着移动,还写上了 '33'
好了,现在把注释掉的那句//Canvas.Font.Color := clred;恢复,让他画红字;
现在你在看看结果!!
我的系统是windows2000 professional简体中文版,Delphi 7
在黑和白下看不出效果,如果指定为别的颜色就不对了.
把 Canvas.DrawFocusRect(R); 替换为 DrawFocusRect(canvas.handle,R); 就正常了.
begin
if Assigned(FOnChanging) then FOnChanging(Self);
end;procedure TCanvas.Changed;
begin
if Assigned(FOnChange) then FOnChange(Self);
end;procedure TCanvas.DrawFocusRect(const Rect: TRect);
begin
Changing;
RequiredState([csHandleValid, csBrushValid]);
Windows.DrawFocusRect(FHandle, Rect);
Changed;
end;
//**************************************
看来问题出在这里!
procedure TCanvas.RequiredState(ReqState: TCanvasState);
var
NeededState: TCanvasState;
begin
NeededState := ReqState - State;
if NeededState <> [] then
begin
if csHandleValid in NeededState then
begin
CreateHandle;
if FHandle = 0 then
raise EInvalidOperation.CreateRes(@SNoCanvasHandle);
end;
if csFontValid in NeededState then CreateFont;
if csPenValid in NeededState then CreatePen;
if csBrushValid in NeededState then CreateBrush;
State := State + NeededState;
end;
end;
//**********************************************************************