顶级菜单(mainmenu)怎样不用鼠标直接激活,STRINGGRID的颜色问题,请各位大侠帮忙(100分)

  • 主题发起人 主题发起人 wangjb
  • 开始时间 开始时间
W

wangjb

Unregistered / Unconfirmed
GUEST, unregistred user!
1。启动程序后,顶级菜单激活并显示其字菜单,怎么实现?
2。将STRINGGRID的COLOR设为CLBLACK,FONT设为CLWHITE,GOEDITING设为TRUE,当某一个
CELL获得焦点后,此CELL变为CLWHITE,由于FONT为CLWHITE,故输入数据无法显示,请问
怎样改变FONT的字体为CLBLACK。
多谢
 
请大家多帮忙,这两个问题困扰我好几天了
 
顶级菜单是何意思?
 
to jams
顶级菜单也就是Tmainmenu
 
请大家多帮忙,这两个问题困扰我好几天了,谢谢!多谢!!!
 
1.激活并显示其子菜单
例:菜单项.caption:=编辑(&F)
你按Alt+F即可激活
2.改变FONT的字体为CLBLACK
StringGrid1.Font.Color:=CLBLACK;

顺便问一下,你是在那里混的?
以后有问题来联系吧
 
TO 小人物
1.是指不用鼠标和快捷键,在程序启动后自动激活

2。能不能只改变获得焦点的CELL的字体。

3. 我在石家庄,你怎么联系?
 
那你直接执行它的事件不就行了吗?
 
在MainFormShow事件里,执行它的事件。
 
哇,智利,动作真快!
不过建议还是用Onformcreate,万一他还有个其他的窗口,切换过来时,说不定...
(只是假设)

看你的标题,以为你要用意念来控制。xixi!
 
1.假定主菜单叫MainMenu1,在主窗体的OnActivate事件里——

procedure TForm1.FormActivate(Sender: TObject);
begin
HiliteMenuItem(Handle, MainMenu1.Handle, 0, MF_BYPOSITION or MF_HILITE);//使主菜单第一项产生下压的效果
with ClientToScreen(Point(0, 0)) do//转换窗体坐标为屏幕坐标,这是下一行的API所要求的
TrackPopupMenuEx(MainMenu1.Items[0].Handle, 0, X, Y, Handle, nil);//将第一项的子菜单弹出来
HiliteMenuItem(Handle, MainMenu1.Handle, 0, MF_BYPOSITION or MF_UNHILITE);//解除“下压”状态
end;

2.为了这一个Cell要做很大的动作——
将StringGrid.Font.Color直接设为编辑时需要的颜色,如你所要求的clBlack;
StringGrid.DefaultDrawing设为False,就是说要在OnDrawCell事件里自己控制颜色了,如下:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with StringGrid1.Canvas do begin
if gdFixed in State then begin//把固定区域的东东画出来
Brush.Color := StringGrid1.FixedColor;
FillRect(Rect);
DrawEdge(Handle, Rect, BDR_RAISEDINNER, BF_RECT);//关键!没有这一句将失去立体感
end else begin
Brush.Color := clBlack;//一般单元格的背景
Font.Color := clWhite;//和字体颜色
if State = [gdSelected] then begin//当焦点不在StringGrid上时选中格子的外观
Brush.Color := clHighLight;
Font.Color := clHighLightText;
end;
TextRect(Rect, Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]);//刷新格子并显示其中的文字内容
if gdFocused in State then DrawFocusRect(Rect);//当焦点在StringGrid上时选中格子的外观
end;
end;
end;

这段代码在实现你的要求的前提下尽量模拟了标准StringGrid的外观变化行为,
至于进入编辑状态时的Font的属性就不必在这里考虑了,因为这时我们看到的是StringGrid的
嵌入式编辑器(InplaceEditor),而StringGrid本身的部分被它挡住了。
它的Font是由StringGrid本身决定的,所以我们不得不事先设定StringGrid.Font,也因此才必须写OnDrawCell事件。

试试看行不行吧。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
595
import
I
I
回复
0
查看
623
import
I
后退
顶部