如何实现控件的左右伸缩 就如QQ的控制面版或XP左边的管理栏,不过这种是上下伸缩我知道这种现在TeThemecontrols,和Raise 里面的groups好象都可以实现但是,怎样实现左右伸缩呢???? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我终于决定再顶一下了....anyone gives me a hint,plz............ 使用SUIPack控件包,里面有个组件可是实现左右缩进,就像是VS。net里面那种 thank u so much,去找实现就给分. unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, ValEdit, StdCtrls, ComCtrls, ExtCtrls, Buttons, StrUtils, Menus, ToolWin;type TForm1 = class(TForm) Panel1: TPanel; Panel_ObjIns: TPanel; Panel3: TPanel; Timer1: TTimer; Panel4: TPanel; Panel5: TPanel; Timer2: TTimer; MainMenu1: TMainMenu; Panel_Property: TPanel; Panel6: TPanel; Panel_ObjTre: TPanel; PageControl1: TPageControl; TabSheet1: TTabSheet; ValueListEditor1: TValueListEditor; ListBox1: TListBox; procedure FormCreate(Sender: TObject); procedure ValueListEditor1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ValueListEditor1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ValueListEditor1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Panel1CanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); procedure Timer1Timer(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Panel3Click(Sender: TObject); procedure ValueListEditor1GetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String); procedure FormClick(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Panel6MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Panel_ObjTreClick(Sender: TObject); procedure Panel_ObjInsClick(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; krow,p,t_width,i_resize,j_pos:integer; t4_height:integer; function strIn(sstr,istr:string):boolean; //判断字符串是否包含在另一个字符串中 function StrReplace(const S, OldPattern, NewPattern: string): string; //字符串替换函数implementation{$R *.dfm}function strIn(sstr,istr:string):boolean;//判断字符串是否包含在另一个字符串中var i:integer; tstr:string;begin i:=1; while i<=strlen(pChar(sstr)) do begin tstr:=leftstr(sstr,i); if rightstr(tstr,1)=istr then begin result:=true; exit; end; i:=i+1; end; result:=false;end;function StrReplace(const S, OldPattern, NewPattern: string): string;//字符串替换函数var SearchStr, Patt, NewStr: string; Offset: Integer;begin SearchStr := S; Patt := OldPattern; NewStr := S; Result := ''; while SearchStr <> '' do begin Offset := AnsiPos(Patt, SearchStr); if Offset = 0 then begin Result := Result + NewStr; Break; end; Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern; NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt); SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt); end;end;procedure TForm1.FormCreate(Sender: TObject);begin i_resize:=0; //控制是否启动 ValueListEditor1 单元列的大小 t_width:=189; //panel1的最大宽度 p:=0; //判断向外弹出还是向内弹出 j_pos:=0; //判断属性栏是否定位 krow:=0; //判断属性栏被选中的格 t4_height:=63; //panel4的最大高度 Panel1.Left:=0; //panel1位置初始化(左边的panel) panel1.Width:=0; Panel4.Top:=self.Height-panel5.Height; //panel4位置初始化(下边的panel) panel4.Height:=panel5.Height; //Panel_Property.Height:=panel1.Height - Panel_Files.Height - Panel_Source.Height - Panel_ObjIns.Height; //Panel_FilesTree.Height:=0;end;procedure TForm1.ValueListEditor1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin//拖动单元列,使之改变大小//如果鼠标移到默认单元列的左右各4个象素内改变鼠标指针 if (x>ValueListEditor1.DefaultColWidth-4)and(x<ValueListEditor1.DefaultColWidth+4) then begin ValueListEditor1.Cursor:=crHSplit; end else begin ValueListEditor1.Cursor:=crDefault; end; //如果可以拖动 if i_resize=1 then begin ValueListEditor1.DefaultColWidth:=x; if ValueListEditor1.DefaultColWidth<1 then ValueListEditor1.DefaultColWidth:=2; if ValueListEditor1.DefaultColWidth>ValueListEditor1.Width-2 then ValueListEditor1.DefaultColWidth:=ValueListEditor1.Width-4; end;end;procedure TForm1.ValueListEditor1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin //将i_resize设置为1 表示可以拖动单元列,并且使listbox1不可见 if ValueListEditor1.Cursor=crHSplit then begin //ValueListEditor1.DefaultColWidth:=x-4; i_resize:=1; listbox1.Visible:=false; end;end;procedure TForm1.ValueListEditor1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin //当松开鼠标右键时设置i_resize为0表示不可拖动 i_resize:=0;end;procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin //鼠标在panel1上时,弹出‘属性’框 //如果定位值j_pos为1时表示定位 if j_pos=1 then exit; if panel1.Width<1 then begin p:=1; timer1.Enabled:=true; end;end;procedure TForm1.Panel1CanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean);begin resize:=true;end;procedure TForm1.Timer1Timer(Sender: TObject);begin if (Panel1.Width<t_width)and(p=1) then begin panel1.Width:=panel1.Width+20; if panel6.Visible then panel6.Visible:=false; end else if (panel1.Width>1)and(p=2) then begin panel1.Width:=panel1.Width-20; if not(panel6.Visible) then panel6.Visible:=true; end else begin timer1.Enabled:=false; p:=0; exit; end;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if j_pos=1 then exit; if panel1.Width>1 then begin p:=2; timer1.Enabled:=true; end;end;procedure TForm1.Panel3Click(Sender: TObject);begin//如果单击F变成C表示 if j_pos=1 then begin panel3.Caption:='F'; j_pos:=0; end else begin panel3.Caption:='C'; j_pos:=1; end;end;procedure TForm1.ValueListEditor1GetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String);begin //获得当前属性框的值给listbox1,如果有多选项 krow:=arow; if strin(value,',') then begin listbox1.Top:=(ARow + 1) * 18; listbox1.Width:= ValueListEditor1.Width-ValueListEditor1.DefaultColWidth; listbox1.Left:=ValueListEditor1.DefaultColWidth; //listbox1.Items.Text:=value; listbox1.Items.Text:=StrReplace(value,',',chr(13)+chr(10)); listbox1.Visible:=true; end else begin listbox1.Visible:=false; end;end;procedure TForm1.FormClick(Sender: TObject);begin //panel1失去焦点时listbox1不可见 listbox1.Visible:=false;end;procedure TForm1.ListBox1Click(Sender: TObject);begin //选择一项值给属性框的相应键 ValueListEditor1.Values[ValueListEditor1.Keys[krow]]:=listbox1.Items.Strings[listbox1.ItemIndex];end;procedure TForm1.Panel6MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin //panel6在panel1外,鼠标移动事件传递 panel1.OnMouseMove(sender,shift,x,y);end;procedure TForm1.Panel_ObjTreClick(Sender: TObject);begin Panel_Property.Visible:=false; panel_objtre.Align:=alTop;end;procedure TForm1.Panel_ObjInsClick(Sender: TObject);begin Panel_Property.Visible:=true; panel_objtre.Align:=alBottom;end;end. 楼主可以留下EMAIL,我这里有上面那个程序可以作为参考。不过不是控件,是自己写的代码,你可以自行封装。 procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);beginReleaseCapture; //Windowsif Move.Checked then //Move为一个单选框TControl(sender).Perform(wm_syscommand,$F012,0) //Controls //移动elseif ChangeSize.Checked then //ChangeSize为一个单选框TControl(sender).Perform(wm_syscommand,$F008,0); //Controls //改变大小end; 刚才没看清楚,以为是给按钮或其他控件加改变大小事件呢。(上面的是给按钮加改变大小和移动事件)把它的Align属性设置成alLeft 或 alClient 在其一侧加一TSplitter就可以了. 程序别的机程序跑不了, 怎么看缺少了哪个dll文件没注册或存在? 准备同他人组成一个工作团队,如何用Com+组件形式? API函数问题 流水账号的问题??急用呀??? 熟悉fastreport的高手请进来!(在线等待) 把Form放在DLL?100分 帮忙翻译成C++ 关于ODBC?? 使用Delphi能够访问Windows2000 Active Directory? 谁知道delphi link for rose什么地方有下?我的邮箱:[email protected],谢谢! 如何将域名转换为ip 哪里能下DELPHI的好书?尤其是李维写的
anyone gives me a hint,plz............
实现就给分.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ValEdit, StdCtrls, ComCtrls, ExtCtrls, Buttons, StrUtils,
Menus, ToolWin;type
TForm1 = class(TForm)
Panel1: TPanel;
Panel_ObjIns: TPanel;
Panel3: TPanel;
Timer1: TTimer;
Panel4: TPanel;
Panel5: TPanel;
Timer2: TTimer;
MainMenu1: TMainMenu;
Panel_Property: TPanel;
Panel6: TPanel;
Panel_ObjTre: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
ValueListEditor1: TValueListEditor;
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure ValueListEditor1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
procedure ValueListEditor1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ValueListEditor1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Panel1CanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
procedure Timer1Timer(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Panel3Click(Sender: TObject);
procedure ValueListEditor1GetEditText(Sender: TObject; ACol,
ARow: Integer; var Value: String);
procedure FormClick(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Panel6MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Panel_ObjTreClick(Sender: TObject);
procedure Panel_ObjInsClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
krow,p,t_width,i_resize,j_pos:integer;
t4_height:integer; function strIn(sstr,istr:string):boolean; //判断字符串是否包含在另一个字符串中
function StrReplace(const S, OldPattern, NewPattern: string): string; //字符串替换函数implementation{$R *.dfm}function strIn(sstr,istr:string):boolean;
//判断字符串是否包含在另一个字符串中
var
i:integer;
tstr:string;
begin
i:=1;
while i<=strlen(pChar(sstr)) do
begin
tstr:=leftstr(sstr,i);
if rightstr(tstr,1)=istr then
begin
result:=true;
exit;
end;
i:=i+1;
end;
result:=false;
end;function StrReplace(const S, OldPattern, NewPattern: string): string;
//字符串替换函数
var
SearchStr, Patt, NewStr: string;
Offset: Integer;
begin SearchStr := S;
Patt := OldPattern; NewStr := S;
Result := '';
while SearchStr <> '' do
begin
Offset := AnsiPos(Patt, SearchStr);
if Offset = 0 then
begin
Result := Result + NewStr;
Break;
end;
Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern;
NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt); SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
i_resize:=0; //控制是否启动 ValueListEditor1 单元列的大小
t_width:=189; //panel1的最大宽度
p:=0; //判断向外弹出还是向内弹出
j_pos:=0; //判断属性栏是否定位
krow:=0; //判断属性栏被选中的格
t4_height:=63; //panel4的最大高度 Panel1.Left:=0; //panel1位置初始化(左边的panel)
panel1.Width:=0; Panel4.Top:=self.Height-panel5.Height; //panel4位置初始化(下边的panel)
panel4.Height:=panel5.Height; //Panel_Property.Height:=panel1.Height - Panel_Files.Height - Panel_Source.Height - Panel_ObjIns.Height;
//Panel_FilesTree.Height:=0;end;procedure TForm1.ValueListEditor1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
//拖动单元列,使之改变大小
//如果鼠标移到默认单元列的左右各4个象素内改变鼠标指针
if (x>ValueListEditor1.DefaultColWidth-4)and(x<ValueListEditor1.DefaultColWidth+4) then
begin
ValueListEditor1.Cursor:=crHSplit;
end
else
begin
ValueListEditor1.Cursor:=crDefault;
end; //如果可以拖动
if i_resize=1 then
begin
ValueListEditor1.DefaultColWidth:=x;
if ValueListEditor1.DefaultColWidth<1 then
ValueListEditor1.DefaultColWidth:=2;
if ValueListEditor1.DefaultColWidth>ValueListEditor1.Width-2 then
ValueListEditor1.DefaultColWidth:=ValueListEditor1.Width-4;
end;end;procedure TForm1.ValueListEditor1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
//将i_resize设置为1 表示可以拖动单元列,并且使listbox1不可见
if ValueListEditor1.Cursor=crHSplit then
begin
//ValueListEditor1.DefaultColWidth:=x-4;
i_resize:=1;
listbox1.Visible:=false;
end;
end;procedure TForm1.ValueListEditor1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
//当松开鼠标右键时设置i_resize为0表示不可拖动
i_resize:=0;
end;procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//鼠标在panel1上时,弹出‘属性’框
//如果定位值j_pos为1时表示定位
if j_pos=1 then
exit;
if panel1.Width<1 then
begin
p:=1;
timer1.Enabled:=true;
end;
end;procedure TForm1.Panel1CanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
resize:=true;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (Panel1.Width<t_width)and(p=1) then
begin
panel1.Width:=panel1.Width+20;
if panel6.Visible then
panel6.Visible:=false;
end
else if (panel1.Width>1)and(p=2) then
begin
panel1.Width:=panel1.Width-20;
if not(panel6.Visible) then
panel6.Visible:=true;
end
else
begin
timer1.Enabled:=false;
p:=0;
exit;
end;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if j_pos=1 then
exit;
if panel1.Width>1 then
begin
p:=2;
timer1.Enabled:=true;
end;
end;procedure TForm1.Panel3Click(Sender: TObject);
begin
//如果单击F变成C表示
if j_pos=1 then
begin
panel3.Caption:='F';
j_pos:=0;
end
else
begin
panel3.Caption:='C';
j_pos:=1;
end;
end;procedure TForm1.ValueListEditor1GetEditText(Sender: TObject; ACol,
ARow: Integer; var Value: String);
begin
//获得当前属性框的值给listbox1,如果有多选项
krow:=arow;
if strin(value,',') then
begin
listbox1.Top:=(ARow + 1) * 18;
listbox1.Width:= ValueListEditor1.Width-ValueListEditor1.DefaultColWidth;
listbox1.Left:=ValueListEditor1.DefaultColWidth;
//listbox1.Items.Text:=value;
listbox1.Items.Text:=StrReplace(value,',',chr(13)+chr(10));
listbox1.Visible:=true;
end
else
begin
listbox1.Visible:=false;
end;
end;procedure TForm1.FormClick(Sender: TObject);
begin
//panel1失去焦点时listbox1不可见
listbox1.Visible:=false;
end;procedure TForm1.ListBox1Click(Sender: TObject);
begin
//选择一项值给属性框的相应键
ValueListEditor1.Values[ValueListEditor1.Keys[krow]]:=listbox1.Items.Strings[listbox1.ItemIndex];
end;procedure TForm1.Panel6MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//panel6在panel1外,鼠标移动事件传递
panel1.OnMouseMove(sender,shift,x,y);
end;procedure TForm1.Panel_ObjTreClick(Sender: TObject);
begin
Panel_Property.Visible:=false;
panel_objtre.Align:=alTop;
end;procedure TForm1.Panel_ObjInsClick(Sender: TObject);
begin
Panel_Property.Visible:=true;
panel_objtre.Align:=alBottom;
end;end.
Y: Integer);
begin
ReleaseCapture; //Windows
if Move.Checked then //Move为一个单选框
TControl(sender).Perform(wm_syscommand,$F012,0) //Controls //移动
else
if ChangeSize.Checked then //ChangeSize为一个单选框
TControl(sender).Perform(wm_syscommand,$F008,0); //Controls //改变大小
end;
(上面的是给按钮加改变大小和移动事件)把它的Align属性设置成alLeft 或 alClient 在其一侧加一TSplitter就可以了.