请问谁有动态多文档的范例程序?(50分)

  • 主题发起人 主题发起人 apacheii
  • 开始时间 开始时间
A

apacheii

Unregistered / Unconfirmed
GUEST, unregistred user!
注意,不是使用MDI窗体的多文档,其实是利用NoteBook组件和TabSet组件动态产生页面,并在页面上创建个Memo或者RichEdit组件,选择TabSet能相应的切换NoteBook的页面,并能对相应页面上的编辑组件进行编辑,最后还可以正常关闭页面并释放资源!
这样的范例程序谁有?要包括源码的哦~!
(请回答时确定你能解决这个问题,否则请不要浪费别人的分!)
 
浪费一下你的分。
说一句,用的着用notebook和tabset组合吗?
一个pagecontrol完全就可以解决。
 
......
我既然这样说了,自然有我的想法!
pagecontrol的边界大概有4个象素的宽度,如果是做一些界面要求严格的程序,用pagecontrol是不能满足要求的!而NoteBook没有边界,就是说最大利用了屏幕空间,并且TabSet的标签页比起pagecontrol的标签页来要漂亮的多!相信有很多人愿意使用这样的方法来做多文档界面,而不愿意直接使用pagecontrol!



 
NoteBook是win31下的风格,不要使用了,pagecontrol可以使用自绘,去掉边线的。

还有更好的方案,只使用一个Memo或者RichEdit,TabSet只是切换Memo或者RichEdit的内容,你自己管理Memo或者RichEdit的内容(文件)和TabSet的关系。
 
To:畅雨
谢谢指教,你说的方法看起来很好,不过如果是应用在其他方面,而不仅仅是切换Memo或者richedit,这个方法就会变的很麻烦了!
这个问题我已经实现能动态创建NoteBook页和Memo了,不过在点Tabset进行选择后我无法对当前页上的Memo进行操作(比如保存和读取)。。。
 
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
Memo : TMemo;
Page : TPage;
begin
NoteBook1.Pages.Clear ;
for I := 0 to 5 do
begin
NoteBook1.Pages.Add(IntToStr(I));
Page := TPage(NoteBook1.Pages.Objects);
Memo := TMemo.Create(Self);
Memo.Parent := Page;
Memo.Align := alClient;
TabSet1.Tabs.AddObject(IntToStr(I),Memo);
end;
end;

procedure TForm1.TabSet1Change(Sender: TObject; NewTab: Integer;
var AllowChange: Boolean);
begin
NoteBook1.PageIndex := NewTab;
TMemo(TabSet1.Tabs.Objects[NewTab]).Lines.Text := 'This is Tab '+ IntToStr(NewTab);
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
I : Integer;
begin
for I := TabSet1.Tabs.Count-1 downto 0 do
TabSet1.Tabs.Objects.Free;
end;
 
留下Mail,我发给你,完全符合你的要求,功能较齐全,是我读书时的习作,昨天整理资料时翻出来的[:)]
 
To : pihome
谢谢:)
我的email:aken520m@21cn.com apacheii@163.com 你看哪个好用就发哪儿吧,谢谢了`~
 
unit uMainWindows;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, StdCtrls, ExtCtrls, ToolWin, Buttons, ImgList, shlobj;
const
WM_MDIWINDOWCREATE = WM_USER + 1;
WM_MDIWINDOWDELETE = WM_USER + 2;
WM_MDIWINDOWACTIVE = WM_USER + 3;
WM_MDIWINDOWTEXT = WM_USER + 4;
type
TMainForm = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
Panel1: TPanel;
TabMDIControl: TTabControl;
StatusBar1: TStatusBar;
ControlBar1: TControlBar;
ComboBoxEx1: TComboBoxEx;
SpeedButton1: TSpeedButton;
ToolBar2: TToolBar;
ImageList1: TImageList;
PopupMenu1: TPopupMenu;
PopupMenu2: TPopupMenu;
N7: TMenuItem;
mnuClearFavorites: TMenuItem;
N8: TMenuItem;
PopupMenu3: TPopupMenu;
N9: TMenuItem;
procedure SpeedButton1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure mnuClearFavoritesClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TabMDIControlChange(Sender: TObject);
procedure N9Click(Sender: TObject);
private
{ Private declarations }
procedure MenuItem_FaClick(Sender: TObject);
public
{ Public declarations }
procedure CreateChild(sUrl: string);

procedure MsgMdiCreate(var message: TMessage); message WM_MDIWINDOWCREATE;
procedure MsgMdiActive(var message: TMessage); message WM_MDIWINDOWACTIVE;
procedure MsgMdiDelete(var message: TMessage); message WM_MDIWINDOWDELETE;
procedure MsgMdiTEXT(var message: TMessage); message WM_MDIWINDOWTEXT;
end;

var
MainForm: TMainForm;

implementation

uses uChildWindows, uFavorites;

{$R *.dfm}

procedure TMainForm.CreateChild(sUrl: string);
var
Form: TFrmBrowser;
begin
lockWindowupdate(application.MainForm.Handle);
Form := TFrmBrowser.Create(self);
Form.OpenAddress(sUrl);
lockwindowupdate(0);
end;

procedure TMainForm.MsgMdiActive(var message: TMessage);
var
fChild: TFrmBrowser;
index: integer;
begin
fChild := TFrmBrowser(message.WParam);
index := TabMDIControl.Tabs.IndexOfObject(fChild);
if index >= 0 then TabMDIControl.TabIndex := index;
end;

procedure TMainForm.MsgMdiCreate(var message: TMessage);
var
fChild: TFrmBrowser;
begin
if TabMDIControl.Tabs.Count = 0 then TabMDIControl.Visible := true;
fChild := TFrmBrowser(message.WParam);
TabMDIControl.Tabs.AddObject(fChild.Caption, fChild);
end;

procedure TMainForm.MsgMdiDelete(var message: TMessage);
var
fChild: TFrmBrowser;
index: integer;
begin
fChild := TFrmBrowser(message.WParam);
index := TabMDIControl.Tabs.IndexOfObject(fChild);
if index >= 0 then TabMDIControl.Tabs.Delete(index);
end;

procedure TMainForm.SpeedButton1Click(Sender: TObject);
begin
CreateChild('http://www.sina.com.cn');
end;

procedure TMainForm.FormDestroy(Sender: TObject);
var
i: integer;
begin
for i := 0 to TabMDIControl.Tabs.Count - 1 do
begin
(TFrmBrowser(TabMDIControl.Tabs.Objects)).Free;
end;
end;

procedure TMainForm.mnuClearFavoritesClick(Sender: TObject);
begin
ClearUpFavorites(application.Handle); ;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var
pidl: PItemIDList;
FavPath: array[0..MAX_PATH] of char;
begin
SHGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pidl);
SHGetPathFromIDList(pidl, favpath);
CreateFavoritesMenu(favpath, N4, MenuItem_FaClick);
end;

procedure TMainForm.MenuItem_FaClick(Sender: TObject);
var
sUrl: string;
begin
sUrl := (Sender as TMenuItem).hint;
CreateChild(sUrl);

end;

procedure TMainForm.TabMDIControlChange(Sender: TObject);
var
index: integer;
begin
index := TabMDIControl.TabIndex;
(TFrmBrowser(TabMDIControl.Tabs.Objects[index])).Show;

end;

procedure TMainForm.MsgMdiTEXT(var message: TMessage);
const
intmax = 120;
var
fChild: TFrmBrowser;
index: integer;
S1, s2: string;
Fit: integer;
sz:Size;
begin
fChild := TFrmBrowser(message.WParam);
index := TabMDIControl.Tabs.IndexOfObject(fChild);
s1 := fChild.Caption;
if (GetTextExtentExPoint(self.Canvas.Handle,Pchar(s1),length(s1),intmax,@Fit,(nil),sz)) then
begin

TabMDIControl.Tabs.Strings[index] :=copy(s1,0,Fit);

end;

end;

procedure TMainForm.N9Click(Sender: TObject);
var
index: integer;
begin
index := TabMDIControl.TabIndex;
(TFrmBrowser(TabMDIControl.Tabs.Objects[index])).Free;
TabMDiControl.Tabs.Delete(index);
if TabMDiControl.Tabs.Count <= 0 then
TabMdiControl.Visible := false;

end;

end.

 
已发送,请查收。。。
 
谢谢各位,请到这里来拿分:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2039220
 
谢谢各位了
 
后退
顶部