问个比较麻烦的问题....

mdejtod 2008-12-03 09:58:51
不知道DELPHI到底有没有模板这个概念,想要实现这样一个功能:
可以在运行期设计窗体(控件拖拉,图片编辑),然后将窗体样式保存为一个文件,这个暂且称它为模板的窗体,可供其它程序调用,就是其它程序可以载入这个文件,然后在它的界面上显示出这个窗体,并且能显示为略缩图的样式!
不知道具体要用到哪种方式?
希望有高人帮帮忙!!!!
...全文
228 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
mdejtod 2008-12-05
  • 打赏
  • 举报
回复
差不多吧,基本上是用 frame 来构架,想写成控件,太烦人了
dyonggan 2008-12-05
  • 打赏
  • 举报
回复
TFrame可以基本满足你的要求。
mdejtod 2008-12-05
  • 打赏
  • 举报
回复
郁闷得不行了,在 mousemove 中调整frame 的大小和坐标,不知怎么搞的,只有一个左上角可以正常拉伸大小和位置,其余三个点老是不行,一调整它的width 和 height 就变化非常大,但是单步跟踪时它的值是正常的,有可能是什么原因引起的?
mdejtod 2008-12-05
  • 打赏
  • 举报
回复
?
JPEXE 2008-12-05
  • 打赏
  • 举报
回复
转:(拖拉尺寸)
  procedure   TForm1.ManipulateControl(WinControl:   TWinControl;   
Shift: TShiftState; X, Y, Precision: integer);
//Precision:精度,该方法可以在onmousemove中调用
var SC_MANIPULATE: Word;
begin
//光标在控件的最左侧
if (X <= Precision) and (Y > Precision) and (Y < WinControl.Height - Precision)then
begin
SC_MANIPULATE := $F001;
WinControl.Cursor := crSizeWE;
end
//光标在控件的最右侧
else if (X >= WinControl.Width - Precision) and (Y > Precision) and (Y < WinControl.Height - Precision) then
begin
SC_MANIPULATE := $F002;
WinControl.Cursor := crSizeWE;
end
//光标在控件的最上侧
else if (X > Precision) and (X < WinControl.Width - Precision) and (Y <= Precision) then
begin
SC_MANIPULATE := $F003;
WinControl.Cursor := crSizeNS;
end
//光标在控件的左上角
else if (X <= Precision) and (Y <= Precision) then
begin
SC_MANIPULATE := $F004;
WinControl.Cursor := crSizeNWSE;
end
//光标在控件的右上角
else if (X >= WinControl.Width-Precision) and (Y <= Precision) then
begin
SC_MANIPULATE := $F005;
WinControl.Cursor := crSizeNESW ;
end
//光标在控件的最下侧
else if (X > Precision) and (X < WinControl.Width - Precision) and (Y >= WinControl.Height - Precision) then
begin
SC_MANIPULATE := $F006;
WinControl.Cursor := crSizeNS;
end
//光标在控件的左下角
else if (X <= Precision) and (Y >= WinControl.Height - Precision) then
begin
SC_MANIPULATE := $F007;
WinControl.Cursor := crSizeNESW;
end
//光标在控件的右下角
else if (X >= WinControl.Width - Precision) and (Y >= WinControl.Height - Precision) then
begin
SC_MANIPULATE := $F008;
WinControl.Cursor := crSizeNWSE;
end
//光标在控件的客户区(移动整个控件)
else if (X > 5) and (Y > 5) and (X < WinControl.Width - 5) and (Y < WinControl.Height - 5)then
begin
SC_MANIPULATE := $F009;
WinControl.Cursor := crSizeAll;
end
else
begin
SC_MANIPULATE := $F000;
WinControl.Cursor := crDefault;
end;

if Shift = [ssLeft] then
begin
ReleaseCapture;
WinControl.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);
end;
end;

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Caption := IntToStr(X) + '/' + IntToStr(Y);
ManipulateControl((Sender as TWinControl), Shift, X, Y, 10);
end;
mdejtod 2008-12-05
  • 打赏
  • 举报
回复
ajiwuweibin 2008-12-05
  • 打赏
  • 举报
回复
可以用挂靠的办法实现
eqapple 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 JPEXE 的回复:]
当然,Frame是框架,不是模板,但还是可以满足你的一些需求.
你把控件在上面摆好做好以后,在Frame上点右键->Add To Palette,就能把这个Frame保存了,以后要用就直接拖出来.

其实要实现你的需求,还有一个推荐的方法,就是"继承".
你设计好一个窗体(模板),然后其它窗体类声明时直接继承它就行了,一试就爽,试试吧!
[/Quote]
用这个吧.简单实用!
mdejtod 2008-12-04
  • 打赏
  • 举报
回复
谢谢楼上的兄弟,哪位能提供一个对象持久化的实例?就是可保存装载文件的东西?
不得闲 2008-12-04
  • 打赏
  • 举报
回复
发个链接:
http://blog.csdn.net/suiyunonghen/archive/2008/01/03/2022856.aspx
mdejtod 2008-12-04
  • 打赏
  • 举报
回复
烦S人了,需要这样一个控件,
1.运行期可拖拉,大小可改变,就像DELPHI的设计期一样的功能,当然也要有边框线(这个难度不大)
2.文字大小可根据控件的大小自动变化 (字体和像素的转化,麻烦)
3.文字可调透明度(目前还知道怎么实现)
4.控件背景可调透明度(可在canvas 上画位图,通过修改位图的透明度)
5.文字角度可任意旋转(可在canvas 上用 DrawText 来角度旋转)

我想通过继承 TGraphicsControl 类来自定义一个控件,但具体不知道要怎么搞,对VCL认识太少了,汗一个......
哪位帮帮忙吧!!!!

zshsuming 2008-12-04
  • 打赏
  • 举报
回复
好象很高深呢```
mdejtod 2008-12-04
  • 打赏
  • 举报
回复
有没有高人能提供一些组件读写的实例?网上这方面的资料少得可怜,看那些原理头都痛了
分不够再开贴加!!!!
mdejtod 2008-12-04
  • 打赏
  • 举报
回复
楼上的兄弟,我要的是不设计期的,是运行期可用,不可能每个窗体都做成一个 Frame 然后供别人用
另一个总是就是,如何实现像设计期一样编辑控件的大小位置,就是可拖拉伸缩的功能,同样可画出控件的边框
我试了一下 mouseup,mousedown,mousemove,效果不太理想,不知道有没有什么捷径?
火龙岛主 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mdejtod 的回复:]
谢谢各位
可能我说得不太明白,是这样的,我的程序可以在运行期设计窗体样式,之后保存为某个文件,
然后其它的应用程序可以打开我保存的窗体,不是说在设计期打开来用,或者继承过来用,而是运行期可以将我的窗体风格文件载入到它的界面上,还可以修改某些控件的属性或值,一样也可以设计我的窗体!
[/Quote]

不仅仅是Delphi,其他语言也有持久性特性。你可以把他的内容以流的方式存储,并读出。
JPEXE 2008-12-03
  • 打赏
  • 举报
回复
哦,看来之前没有完全看明白楼主的需求,现在再来分解一下:

1.运行期实现对窗体上的控件拖动或其它编辑.
关于拖动的实现方案网上很多,你搜一下"delphi 运行期 拖动控件",应该有很多收获.
其它编辑也简单,就是编辑那些控件的"属性"吧.

2.窗体做为"模板",并由其它程序加载使用.
似乎直接的办法应该就是去加载窗体描述DFM文件.
用到"对象持久化"或叫"串行化"技术.
可以参考VCL源码TCustomForm.Create里是怎样载入DFM资源的.

3.显示窗体的缩略图.
这个就相对简单了,就是把窗体的DC保存为图像.
至于缩放完全可以交给TImage去搞定.

以上供参考,希望能对楼主有所帮助.
mdejtod 2008-12-03
  • 打赏
  • 举报
回复
谢谢各位
可能我说得不太明白,是这样的,我的程序可以在运行期设计窗体样式,之后保存为某个文件,
然后其它的应用程序可以打开我保存的窗体,不是说在设计期打开来用,或者继承过来用,而是运行期可以将我的窗体风格文件载入到它的界面上,还可以修改某些控件的属性或值,一样也可以设计我的窗体!
dyzhong 2008-12-03
  • 打赏
  • 举报
回复
先在 Tool-> Repository 里添加一个页面
然后你在建一个模板From 在Form上右键选择Add to Repository,设置一个标题,选择你设置的页面保存,以后就可以用File->New->Other 来使用该模板了,复制、引用,继承 都可以。

chenyq2008 2008-12-03
  • 打赏
  • 举报
回复
其实将窗体做控件也未尝不可,窗体本身也继承TControl/TComponent
chenyq2008 2008-12-03
  • 打赏
  • 举报
回复
IDE有个对象库的功能,可以直接继承以前创建的窗体,跟楼主所说的模板差不多。可以研究下。
加载更多回复(9)

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧