我快被整疯了,忙活了半天也搞不定(Outlook界面问题)。救救我吧.阿门! ( 积分: 100 )

  • 主题发起人 主题发起人 6627627
  • 开始时间 开始时间
6

6627627

Unregistered / Unconfirmed
GUEST, unregistred user!
请问想outlook这种程序是如何实现的呢?我的问题并非它的漂亮的toolbar,而是:[red]点击左边的任何一个按钮,那么内容都会在同一个窗口显示[/red],是不是MDI窗口呢?我用了PageControl和Frame,可是做出的来得界面都不是太好看,请各位高手给点指点,谢谢了!
 
请问想outlook这种程序是如何实现的呢?我的问题并非它的漂亮的toolbar,而是:[red]点击左边的任何一个按钮,那么内容都会在同一个窗口显示[/red],是不是MDI窗口呢?我用了PageControl和Frame,可是做出的来得界面都不是太好看,请各位高手给点指点,谢谢了!
 
没人来,自己顶一下!
 
各位高手,帮帮忙吧,在线等了
 
用的大都是frame 和 MDI 结合的东西,另外有一个三方控件PIMflash挺不错的。应该完全满足OUTLOOK的需要。
 
To erzhong008:
我不太想使用控件,请问你所说的frame和mdi的结合是如何实现呢?可否给出一段代码参考?谢谢!
 
不同的MDI,大部分相同的FRAME,然后一些右边又一些漂亮的日历控件。我不知道你不用空件怎么实现。是完全写代码实现吗?那我象你学习,我还没有到了那种地步,我也不想到那种地步。你不妨多看看OUTLOOK是怎么样的流程。
 
To erzhong008:
我是初学者,有很多问题不懂,还望请教。可以给你的msn或是qq,我想教个朋友
 
To erzhong008:
呵呵,不是看到我是初学者,就不理我了吧。可否给出窗体融合的的代码呢?
 
窗体嵌入,可以拥有控件的组件都可以。
Code:
Form1.panel1.parent:=Form2.panel1;
Form1.HostDockSite:=Form2.panel1;
 
上面代码的第二行应该是:Form1.panel1.HostDockSite:=Form2.panel1;
 
To webwalker:
谢谢你,我试试先!
 
把右边要显示的窗体都从一个基类窗体继承下来,然后把这些窗体的公共操作或属性写在这个基类里面,然后把主界面的样子搭好,右边的显示窗口的部分放一个 Panel,需要显示哪个窗口的时候动态创建这个窗体然后设置他的 Parent 为这个 Panel 并且设置为 alClient 就可以了,当然,如果你的窗体经常使用也可以一次创建,下次显示时再调出来。
 
用Raize简单搞定,多种分格
 
To plzw:
谢谢你。我初学delphi,可否给出一段完整的代码参考。
 
我想没必要贴大段的代码,给你说下大概的意思。
假设基类窗体 TBaseForm = class(TForm);
定义 TBaseFormClass = class of TBaseForm;
然后你的所有的模块窗体都从这个 TBaseForm 继承下来。
假设有 TPersonForm = class(TBaseForm);
TCompanyForm = class(TBaseForm);
假设这两个窗体中都是连接数据库然后获取数据的,所以我们可以把连接数据库的方法写在基类窗体里:
procedure TBaseForm.ConnectToDb;
begin
end;

procedure TBaseForm.DisconnectDb;
begin
end;
但是我们没有在基类里写任何代码,具体的连接可以留到子类窗体中去实现,当然,如果子类窗体中连接数据库的方法类似,你也可以把公共

的部分写到基类里面来。

好,假定基类窗体和子类窗体我们都实现好了。
在主窗体中我们可以这样做——声明一个模块列表
fFormList: TList;
用来保存我们所有的模块窗体。
接下来我们在创建主窗体的时候创建所有的模块窗体
procedure TMainForm.CreateForms;

procedure CreateModuleForm(FormClass: TBaseFormClass);
var
Form: TBaseForm;
begin
Form := FormClass.Create(Self);
fFormList.Add(Form);
end;

begin
CreateModuleForm(TPersonForm);
CreateModuleForm(TCompanyForm);
end;

接下来,我们声明一个 property 来标识目前正在显示的窗体
property ActiveModuleForm: TBaseForm read FActiveModuleForm write SetActiveModuleForm;

procedure SetActiveModuleForm(const Value: TBaseForm);
begin
if Value <> FActiveModuleForm then
begin
if Assigned(FActiveModuleForm) then
FActiveModuleForm.Hide;
FActiveModuleForm := Value;
if Assigned(FActiveModuleForm) then
begin
with FActiveModuleForm do
begin
BorderStyle := bsNone;
Align := alClient;
Parent := pnlClient;
Height := Parent.ClientHeight;
Width := Parent.ClientWidth;
Show;
if CanFocus then
SetFocus;
end;
end;
end;
end;

在这里面还可以写一些代码更新窗体上标题的显示或连接数据库获取数据等
基本上就是这样了,不知道你是否明白了。
P.S. 以上代码仅供示例,未经调试。
 
补充一下:
当你切换模块的时候,可以通过
index := lstModule.ItemIndex; // 我这里是用的 listBox 来显示
Self.ActiveModuleForm := TBaseForm(fFormList[index]);
来切换。
 
To plzw:
谢谢你。我试试了![:)]
 
用 mxoutlookBarPro 这个控件吧,
现在不说什么,用了你再说怎么样~
 
To qi_jianzhou:
谢谢你。不过我问的不是这个问题,我已经在使用这个控件了,我的问题是怎样点击左边的菜单,右边在同一窗口出现内容
 

Similar threads

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