项目中:两个自认为有点难度的问题,大家讨论以下吧,共同提高!(100分)

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

wangbing9802

Unregistered / Unconfirmed
GUEST, unregistred user!
项目中,有两个问题,解决不了,现在暂时没有时间解决,贴上来,有兴趣的共同研究一下:
1。自己写的包含组件,在Create中创建了六个子组件,当该组件的Parent(以及Parent的Parent依此类推)的字体为宋体时,也就是当该控件的parent列表中,有任何一个控件的字体设置为宋体(包括其他中文字体)时,该组件均不能正常运行。默认字体(MS Sans Serif)没有该问题。百思不得其解,望高人指点!
2。三层中动态设置主从表,静态设置均能正常运行;动态指定表名、数据库、数据提供者,客户端也是动态指定!试了很多次,没有成功!只能用静态的了,时间紧容不得仔细研究!
那位高人指点迷津,不胜感激!
 
无法完全理解题意, 有代码吗?贴出一部分来。
 
1。创建代码如下:
constructor TMyComboBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

Width := 160;
Height := 21;
TabOrder := 0;

FBtnBrowseImageIndex := 0;
FBtnEditImageIndex := 1;
FBtnRefreshImageIndex := 2;

FCanvas := TControlCanvas.Create;
FCanvas.Control := Self;

FBox := TSpeedButton.Create(Self);
FBox.Parent := Self;

FImage := TBitmap.Create;
FImage.Transparent := True;

FStateImage := TBitmap.Create;
FStateImage.Transparent := True;

FPanel := TmwScreenBase.Create(Self);
FPanel.Parent := Self;

FTreeView := TMyTreeView.Create(Self);
FTreeView.Parent := Self;

FToolBar := TToolBar.Create(Self);
FToolBar.Parent := Self;

//创建ToolButton
FtlBtnBrowse := TmyToolButton.Create(Self);
FtlBtnBrowse.Parent := Self;

//创建ToolButton
FtlBtnFresh := TmyToolButton.Create(Self);
FtlBtnFresh.Parent := Self;

//创建ToolButton
FtlBtnEdit := TmyToolButton.Create(Self);
FtlBtnEdit.Parent := Self;

end;
当改成如下代码后,一切正常
constructor TMyComboBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

Width := 160;
Height := 21;
TabOrder := 0;

FBtnBrowseImageIndex := 0;
FBtnEditImageIndex := 1;
FBtnRefreshImageIndex := 2;

FCanvas := TControlCanvas.Create;
FCanvas.Control := Self;

FBox := TSpeedButton.Create(Self);
FBox.Parent := Self;

FImage := TBitmap.Create;
FImage.Transparent := True;

FStateImage := TBitmap.Create;
FStateImage.Transparent := True;

FPanel := TmwScreenBase.Create(Self);
FPanel.Parent := Self;

//FTreeView := TMyTreeView.Create(Self);
//FTreeView.Parent := Self;

//FToolBar := TToolBar.Create(Self);
//FToolBar.Parent := Self;

//创建ToolButton
//FtlBtnBrowse := TmyToolButton.Create(Self);
//FtlBtnBrowse.Parent := Self;

//创建ToolButton
//FtlBtnFresh := TmyToolButton.Create(Self);
//FtlBtnFresh.Parent := Self;

//创建ToolButton
//FtlBtnEdit := TmyToolButton.Create(Self);
//FtlBtnEdit.Parent := Self;

end;
问题描述:
将该控件注册、安装后,
创建一个Form,添加一个该控件,将Form的字体设置为“宋体”,运行,弹出list越界。
 
奇怪?你创建的ToolButton为什么不创建到TooBar里边?
这样写试试,应该行的,我做过在Panel里放ToolBar,再在ToolBar里放ToolButton的控件,好像就跟这个很像了。
FToolBar := TToolBar.Create(Self);
FToolBar.Parent := Self;

//创建ToolButton
FtlBtnBrowse := TmyToolButton.Create(FToolBar );
FtlBtnBrowse.Parent := FToolBar ;
 
哦,忘了说了,parent实在以下函数中制定的.
procedure TMyComboBox.CreateWindowHandle(const Params: TCreateParams);
begin
inherited CreateWindowHandle(Params);

FEditEnable := True;
FEditVisible := True;

with FBox do
begin
Left := 220;
Top := 0;
Width := 17;
Height := 17;
Glyph.LoadFromResourceName(HInstance, bmArrow);
Cursor := crArrow;
OnClick := BoxClick;
end; { Box }

with FPanel do
begin
Left := 0;
Top := 0;
Width := 0;
Height := 120;
Color := clWindow;
BevelInner := bvNone;
BevelOuter := bvNone;
end; { FPanel }

with FTreeView do
begin
Parent := FPanel;
Left := 0;
Top := 0;
Width := 0;
Height := 100;
BorderStyle := bsNone;
Align := alClient;
Self.FItems := FTreeView.Items;
end; { FTreeView }

with FToolBar do
begin
Parent := FPanel;
Align := alBottom;
ShowCaptions := True;
List := True;
Color := clInfoBk;
Flat := True;
Height := 25;
end;


FtlBtnEdit .Parent := FToolBar;
FtlBtnEdit .Caption := 'a';
FtlBtnFresh .Parent := FToolBar;
FtlBtnFresh .Caption := 'b';
FtlBtnBrowse.Parent := FToolBar;
FtlBtnBrowse.Caption := 'c';

end;
to 赵抄:
你在多创建几个控件,然后安装,在创建一个appliction,将Form的字体设为“宋体”,应该能模拟出我的问题,肯定会出的!
 
哦?
我的控件是这样的:
一个Panel,上面放了一个ComboBox,两个Label,一个ToolBar(ToolBar里又有12个ToolButton)。放在字体宋体的Form里边并没有任何错误的啊。
你试试下面的方法:
1、将控件的字体属性设置加上这句(Font.Charset :=GB2312_CHARSET;)
2、将控件的ParentFont属性设为False
 
这样吧,我把我的控件发给你,你的email?
 
//创建ToolButton
FtlBtnBrowse := TmyToolButton.Create(Self);
FtlBtnBrowse.Parent := Self;

试试改为
FtlBtnBrowse := TmyToolButton.Create(Self.Parent);
FtlBtnBrowse.Parent := Self.Parent;
 
哦,可以了!谢谢了。
什么原因啊!给个理由先!
很想知道,是不是Unicode的事情啊!
还有第二各问题能否解决?
 
to lajfox
不在吗?到底是什么原因,为什么该了ToolButton的parent就可以?
是因为它是不可见的吗?
 
多人接受答案了。
 
今后拒绝回答wangbing9802的任何问题。我解决了两个难题中的一个,才10分。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部