procedure tMainForm.CreateDLLForm(Mname,FuncName,FuncPass: String;FuncType:integer); var //Mname 中文菜单名称 FUNCNAME: 菜单的英文名称 FUNCTYPE:表类型如电费. FUNCPASS:表示路径消息 MyModMain: TModMain; Path,DllPath,LocalPath:String; WinName: array[0..144] of char; I:Integer; begin dllModHandle_ := LoadLibrary(Pchar(LocalPath)); if dllModHandle_<> 0 then begin @MyModMain := GetProcAddress(dllModHandle_,'ModMain'); if (@MyModMain <> nil) then begin //CurrentformHandle_:=MyModMain(inttostr(ssdw),LoginUserid,MYCOLOR,Mname,IME,DbUser,dbPassword,FuncPass,BDEAlias,0,scrollbox1,panelShow.Handle,mainform.handle,Sessions); currentModhandle_:=DllModhandle_; MainForm.caption:=MName; Inc(ArrayIndex_); //数组下标加一 setLength(MyArray,ArrayIndex_+1); MyArray[ArrayIndex_]:=CurrentModHandle_; GetWindowText(CurrentformHandle_, WinName, 144); /////////////////////////////////////////////////// setLength(pnlLeftArray,ArrayIndex_+1); //却省界面 setLength(pnlCancelArray,ArrayIndex_+1); setLength(pnlBackArray,ArrayIndex_+1); pnlBackArray[arrayIndex_]:=TMyPanel.Create(pnlOnToolbar); with pnlBackArray[arrayIndex_] do begin Parent:=pnlOnToolbar; Align:=alLeft; Caption:=''; Width:=120; tag:=currentModhandle_; Hint:=FuncPass; borderStyle:=bsNone; bevelOuter:=bvNone; bevelInner:=bvLowered; isDown:=false; Name:='PnlBack'+IntToStr(ArrayIndex_); // OnMouseEnter:=MyMouseEnterDB; // OnMouseLeave:=MyMouseLeaveDB; //OnMouseMove:=MyMouseMoveDB; pnlOnToolbar.Width:=pnlOnToolbar.Width+60; end; pnlLeftArray[arrayIndex_]:=TMyPanel.Create(pnlBackArray[arrayIndex_]); with pnlLeftArray[arrayIndex_] do begin Parent:=pnlBackArray[arrayIndex_]; Align:=alclient; Alignment:=taLeftJustify; Caption:=strpas(winname); font.Charset:=GB2312_CHARSET; font.Name:='宋体'; font.Size:=10; width:=length(caption)*6; //Width:=GetTextLen; tag:=currentModhandle_; Hint:=FuncPass; Name:='PnlLeft'+IntToStr(ArrayIndex_); OnClick:=MyLeftClick; borderStyle:=bsNone; bevelOuter:=bvNone; bevelInner:=bvLowered; IsDown:=True; // OnMouseEnter:=MyMouseEnter; //OnMouseMove:= MyMouseMove; //OnMouseLeave:=MyMouseLeave; // pnlBackArray[arrayIndex_].Width:=Width+20; //为地板长度 // pnlOnToolbar.Width:=pnlOnToolbar.Width+60; end; pnlCancelArray[arrayIndex_]:=TMyPanel.Create(pnlBackArray[arrayIndex_]); with pnlCancelArray[arrayIndex_] do begin Parent:=pnlBackArray[arrayIndex_]; Align:=alRight; Caption:='X'; Width:=20; tag:=currentModhandle_; Hint:=FuncPass; Name:='pnlCancel'+IntToStr(ArrayIndex_); OnClick:=tbtncloseDllFrmClick; borderStyle:=bsNone; bevelOuter:=bvNone; bevelInner:=bvRaised; IsDown:=false; // OnMouseEnter:=MyMouseEnter; //OnMouseMove:= MyMouseMove; // OnMouseLeave:=MyMouseLeave; end; { for i:=low(MyArray) to High(MyArray) do //取出当前句柄索引值 begin if MyArray[i]=LongInt(currentModhandle_) then //重新整理下凹 ,把新创建的下凹 begin pnlLeftArray[I].BevelOuter:=bvNone; pnlLeftArray[I].BevelInner:=bvLowered; pnlLeftArray[I].isDown:=true; TMyPanel(pnlLeftArray[I].Parent).bevelOuter:=bvnone; TMyPanel(pnlLeftArray[I].Parent).bevelInner:=bvLowered; //break; end else begin pnlLeftArray[I].BevelOuter:=bvNone; pnlLeftArray[I].BevelInner:=bvNone; pnlLeftArray[I].IsDown:=false; pnlCancelArray[I].BevelOuter:=bvNone; pnlCancelArray[I].BevelInner:=bvNone; TMyPanel(pnlLeftArray[I].Parent).bevelOuter:=bvnone; TMyPanel(pnlLeftArray[I].Parent).bevelInner:=bvNone; end; end; pnlbackCentrel.bevelOuter:=bvnone; pnlbackCentrel.bevelInner:=bvnone; pnlleftCentrel.bevelOuter:=bvnone; pnlleftCentrel.bevelInner:=bvnone; } { TabSheetArray[arrayIndex_]:=ttabsheet.Create(self); tabsheetArray[arrayIndex_].Caption:=strpas(winname); tabsheetArray[arrayIndex_].PageControl:=pagecontrol1; tabsheetArray[arrayindex_].tag:=currentModhandle_; tabsheetArray[arrayindex_].Hint:=FuncPass; } { tabsheetArray[arrayindex_].Brush.Style:=bsSolid; tabsheetArray[arrayindex_].Brush.Color:=clyellow; tabsheetArray[arrayindex_].Repaint; } //////////////////////////////////////////////////////////// setLength(MenuItemsArray,ArrayIndex_+1); MenuitemsArray[ArrayIndex_]:= menus.NewItem(strpas(winname),TextToShortCut('Ctrl+'+inttostr(ArrayIndex_)),false,true,nil,0,'menuites'+inttostr(ArrayIndex_)); MenuitemsArray[ArrayIndex_].Tag:=currentModHandle_; MenuItemsArray[ArrayIndex_].Hint:=FuncPass; MenuitemsArray[ArrayIndex_].OnClick:=MenuClick; MnuView.Add(MenuItemsArray[ArrayIndex_]); end else ShowMessage('调用非法的模块,在模块内没有指定方法,(CreateDllForm)'); end else ShowMessage('加载程序失败'+LocalPath+' 在(CreateDllForm)'); end;procedure TMainform.myMessage(var Msg:TMessage); var tmpNode:tfcTreeNode; begin MsgCloseBZ:=false; if not CheckDllModHandle(CurrentModhandle_) then begin application.MessageBox('异常错误,当前句柄不存在','错误',MB_OK + MB_DEFBUTTON1); exit; end; if CurrentModHandle_<> 0 then begin deleteMenuItem(CurrentModHandle_); FreePnlLeft(CurrentModHandle_); FreePnlCancel(CurrentModHandle_); FreePnlBack(CurrentModHandle_); pnlOnToolbar.Width:=pnlOnToolbar.Width-60; if FindHandle(currentModHandle_) then begin tmpNode:= GetNode2(CurrentModHandle_); tmpNode.StringData:=''; //删除树的stringData置为零 Treechange(tree,tmpnode.Parent); end; FreeArrayHandle; MsgCloseBZ:=true; //////////////////////////////////////////////////////////////// dec(ArrayIndex_); //由于释放了一个DLLFORM所以 arrayIndex_ 再减去一 if (ArrayIndex_>=0) then begin currentModHandle_:=Myarray[ArrayIndex_]; showDLLForm(pnlLeftArray[arrayindex_].Hint,CurrentModHandle_); end else begin currentModHandle_:=0; mainform.Caption:= '苏源高科系统主控模块'; panel100.SendToBack; paneldb.BringToFront; end; /////////////////////////////////////////////////////////////////////// end else begin ShowMessage('响应消息错误,当前的句柄值为'+inttostr(currentModHandle_)); //application.Terminate; end;procedure TMainForm.FreePnlBack(FreeTabHandle: thandle); var I,J:integer; begin j:=-1; for I:=low(pnlBackArray) to high(pnlBackArray) do begin if pnlBackArray[i].Tag=LongInt(FreeTabHandle) then begin pnlBackArray[i].free; j:=i; break; end; end; if (j=0) and (j=high(pnlBackArray)) then begin pnlBackArray:=nil; exit; end; if j=High(pnlBackArray) then begin SetLength(tmppnlBackArray,high(pnlBackArray)); //设置tmpMyArray的长度,把数据倒入,再灌入MyArray中 for I:=0 to high(pnlBackArray)-1 do // begin // tmppnlBackArray[i]:=pnlBackArray[i]; end; // pnlBackArray:=nil; // setLength(pnlBackArray,high(tmppnlBackArray)+1); for I:=0 to High(tmppnlBackArray) do // begin pnlBackArray[i]:=tmppnlBackArray[i]; // end; tmppnlBackArray:=nil; // exit; end; for I:=j to High(pnlBackArray)-1 do begin pnlBackArray[i]:=pnlBackArray[i+1]; end; SetLength(tmppnlBackArray,high(pnlBackArray)); //设置tmpMyArray的长度,把数据倒入,再灌入MyArray中 for I:=low(pnlBackArray) to high(pnlBackArray)-1 do // begin // tmppnlBackArray[i]:=pnlBackArray[i]; end; // pnlBackArray:=nil; // setLength(pnlBackArray,high(tmppnlBackArray)+1); for I:=low(tmppnlBackArray) to High(tmppnlBackArray) do // begin pnlBackArray[i]:=tmppnlBackArray[i]; // end; end;procedure TMainForm.FreePnlCancel(FreeTabHandle: thandle); var I,J:integer; begin j:=-1; for I:=low(pnlCancelArray) to high(pnlCancelArray) do begin if pnlCancelArray[i].Tag=LongInt(FreeTabHandle) then begin pnlCancelArray[i].free; j:=i; break; end; end; if (j=0) and (j=high(pnlCancelArray)) then begin pnlCancelArray:=nil; exit; end; if j=High(pnlCancelArray) then begin SetLength(tmppnlCancelArray,high(pnlCancelArray)); //设置tmpMyArray的长度,把数据倒入,再灌入MyArray中 for I:=0 to high(pnlCancelArray)-1 do // begin // tmppnlCancelArray[i]:=pnlCancelArray[i]; end; // pnlCancelArray:=nil; // setLength(pnlCancelArray,high(tmppnlCancelArray)+1); for I:=0 to High(tmppnlCancelArray) do // begin pnlCancelArray[i]:=tmppnlCancelArray[i]; // end; tmppnlCancelArray:=nil; // exit; end; for I:=j to High(pnlCancelArray)-1 do begin pnlCancelArray[i]:=pnlCancelArray[i+1]; end; SetLength(tmppnlCancelArray,high(pnlCancelArray)); //设置tmpMyArray的长度,把数据倒入,再灌入MyArray中 for I:=low(pnlCancelArray) to high(pnlCancelArray)-1 do // begin // tmppnlCancelArray[i]:=pnlCancelArray[i]; end; // pnlCancelArray:=nil; // setLength(pnlCancelArray,high(tmppnlCancelArray)+1); for I:=low(tmppnlCancelArray) to High(tmppnlCancelArray) do // begin pnlCancelArray[i]:=tmppnlCancelArray[i]; // end; end;
我把部分代码贴出来了, 问题比较难因为是有时报错,有时正确,谁要是解决了,我给他1500分procedure TMainForm.MyMouseEnter(Sender: Tobject); begin TMyPanel(sender).parent.Perform(CM_MouseEnter,0,0); end;procedure TMainForm.MyMouseLeave(sender: tobject); begin TMyPanel(sender).parent.Perform(CM_MouseLeave,0,0); end;procedure TMainForm.MyMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin TMyPanel(sender).parent.Perform(WM_MOUSEMOVE,0,0); end;procedure TMainForm.MyMouseMoveDB(Sender: TObject; Shift: TShiftState; X, Y: Integer); var I:integer; PnlTemp:TControl; tmpControlName:String;begin for I := 0 to TMyPanel(sender).ComponentCount-1 do begin tmpControlName:=TMyPanel(sender).Components[I].name; pnlTemp:=TMyPanel(sender).FindChildControl(tmpControlName); if TMyPanel(pnlTemp).isdown then begin TMyPanel(sender).bevelOuter:=bvNone; TMyPanel(sender).bevelInner:=bvLowered; TMyPanel(sender).borderstyle:=bsNone; end else begin TMyPanel(pnlTemp).BevelInner:=bvnone; TMyPanel(pnlTemp).BevelOuter:=bvRaised; end; end;end;procedure TMainForm.MyMouseEnterDB(Sender: Tobject); var I:integer; PnlTemp:TControl; tmpControlName:String; begin for I := 0 to TMyPanel(sender).ComponentCount-1 do begin tmpControlName:=TMyPanel(sender).Components[I].name; pnlTemp:=TMyPanel(sender).FindChildControl(tmpControlName); if TMyPanel(pnlTemp).isdown then begin TMyPanel(sender).bevelOuter:=bvNone; TMyPanel(sender).bevelInner:=bvLowered; TMyPanel(sender).borderstyle:=bsNone; end else begin TMyPanel(pnlTemp).BevelInner:=bvnone; TMyPanel(pnlTemp).BevelOuter:=bvRaised; end; end; end;procedure TMainForm.MyMouseLeaveDB(sender: tobject); var I:integer; PnlTemp:TControl; tmpControlName:String; begin TMyPanel(sender).bevelOuter:=bvNone; TMyPanel(sender).bevelInner:=bvNone; TMyPanel(sender).BorderStyle:=bsNone; for I := 0 to TMyPanel(sender).ComponentCount-1 do begin tmpControlName:=TMyPanel(sender).Components[I].name; pnlTemp:=TMyPanel(sender).FindChildControl(tmpControlName); if TMyPanel(pnlTemp).isdown then begin //如果是IsDown 那么就是left TMyPanel(sender).bevelOuter:=bvNone; TMyPanel(sender).bevelInner:=bvLowered; TMyPanel(sender).BorderStyle:=bsNone; end else begin TMyPanel(pnlTemp).BevelInner:=bvNone; TMyPanel(pnlTemp).BevelOuter:=bvNone; end; end; end;
var
//Mname 中文菜单名称 FUNCNAME: 菜单的英文名称 FUNCTYPE:表类型如电费. FUNCPASS:表示路径消息
MyModMain: TModMain;
Path,DllPath,LocalPath:String;
WinName: array[0..144] of char;
I:Integer;
begin
dllModHandle_ := LoadLibrary(Pchar(LocalPath));
if dllModHandle_<> 0 then
begin
@MyModMain := GetProcAddress(dllModHandle_,'ModMain');
if (@MyModMain <> nil) then
begin
//CurrentformHandle_:=MyModMain(inttostr(ssdw),LoginUserid,MYCOLOR,Mname,IME,DbUser,dbPassword,FuncPass,BDEAlias,0,scrollbox1,panelShow.Handle,mainform.handle,Sessions);
currentModhandle_:=DllModhandle_;
MainForm.caption:=MName; Inc(ArrayIndex_); //数组下标加一
setLength(MyArray,ArrayIndex_+1);
MyArray[ArrayIndex_]:=CurrentModHandle_;
GetWindowText(CurrentformHandle_, WinName, 144);
///////////////////////////////////////////////////
setLength(pnlLeftArray,ArrayIndex_+1); //却省界面
setLength(pnlCancelArray,ArrayIndex_+1);
setLength(pnlBackArray,ArrayIndex_+1);
pnlBackArray[arrayIndex_]:=TMyPanel.Create(pnlOnToolbar);
with pnlBackArray[arrayIndex_] do begin
Parent:=pnlOnToolbar;
Align:=alLeft;
Caption:='';
Width:=120;
tag:=currentModhandle_;
Hint:=FuncPass;
borderStyle:=bsNone;
bevelOuter:=bvNone;
bevelInner:=bvLowered;
isDown:=false;
Name:='PnlBack'+IntToStr(ArrayIndex_);
// OnMouseEnter:=MyMouseEnterDB;
// OnMouseLeave:=MyMouseLeaveDB;
//OnMouseMove:=MyMouseMoveDB;
pnlOnToolbar.Width:=pnlOnToolbar.Width+60;
end; pnlLeftArray[arrayIndex_]:=TMyPanel.Create(pnlBackArray[arrayIndex_]);
with pnlLeftArray[arrayIndex_] do begin
Parent:=pnlBackArray[arrayIndex_];
Align:=alclient;
Alignment:=taLeftJustify;
Caption:=strpas(winname);
font.Charset:=GB2312_CHARSET;
font.Name:='宋体';
font.Size:=10;
width:=length(caption)*6;
//Width:=GetTextLen;
tag:=currentModhandle_;
Hint:=FuncPass;
Name:='PnlLeft'+IntToStr(ArrayIndex_);
OnClick:=MyLeftClick;
borderStyle:=bsNone;
bevelOuter:=bvNone;
bevelInner:=bvLowered;
IsDown:=True;
// OnMouseEnter:=MyMouseEnter;
//OnMouseMove:= MyMouseMove;
//OnMouseLeave:=MyMouseLeave;
// pnlBackArray[arrayIndex_].Width:=Width+20; //为地板长度
// pnlOnToolbar.Width:=pnlOnToolbar.Width+60;
end; pnlCancelArray[arrayIndex_]:=TMyPanel.Create(pnlBackArray[arrayIndex_]);
with pnlCancelArray[arrayIndex_] do begin
Parent:=pnlBackArray[arrayIndex_];
Align:=alRight;
Caption:='X';
Width:=20;
tag:=currentModhandle_;
Hint:=FuncPass;
Name:='pnlCancel'+IntToStr(ArrayIndex_);
OnClick:=tbtncloseDllFrmClick;
borderStyle:=bsNone;
bevelOuter:=bvNone;
bevelInner:=bvRaised;
IsDown:=false;
// OnMouseEnter:=MyMouseEnter;
//OnMouseMove:= MyMouseMove;
// OnMouseLeave:=MyMouseLeave;
end;
{
for i:=low(MyArray) to High(MyArray) do //取出当前句柄索引值
begin
if MyArray[i]=LongInt(currentModhandle_) then //重新整理下凹 ,把新创建的下凹
begin
pnlLeftArray[I].BevelOuter:=bvNone;
pnlLeftArray[I].BevelInner:=bvLowered;
pnlLeftArray[I].isDown:=true;
TMyPanel(pnlLeftArray[I].Parent).bevelOuter:=bvnone;
TMyPanel(pnlLeftArray[I].Parent).bevelInner:=bvLowered; //break;
end
else
begin
pnlLeftArray[I].BevelOuter:=bvNone;
pnlLeftArray[I].BevelInner:=bvNone;
pnlLeftArray[I].IsDown:=false;
pnlCancelArray[I].BevelOuter:=bvNone;
pnlCancelArray[I].BevelInner:=bvNone;
TMyPanel(pnlLeftArray[I].Parent).bevelOuter:=bvnone;
TMyPanel(pnlLeftArray[I].Parent).bevelInner:=bvNone; end;
end;
pnlbackCentrel.bevelOuter:=bvnone;
pnlbackCentrel.bevelInner:=bvnone;
pnlleftCentrel.bevelOuter:=bvnone;
pnlleftCentrel.bevelInner:=bvnone;
}
{ TabSheetArray[arrayIndex_]:=ttabsheet.Create(self);
tabsheetArray[arrayIndex_].Caption:=strpas(winname);
tabsheetArray[arrayIndex_].PageControl:=pagecontrol1;
tabsheetArray[arrayindex_].tag:=currentModhandle_;
tabsheetArray[arrayindex_].Hint:=FuncPass;
}
{ tabsheetArray[arrayindex_].Brush.Style:=bsSolid;
tabsheetArray[arrayindex_].Brush.Color:=clyellow;
tabsheetArray[arrayindex_].Repaint;
}
////////////////////////////////////////////////////////////
setLength(MenuItemsArray,ArrayIndex_+1);
MenuitemsArray[ArrayIndex_]:= menus.NewItem(strpas(winname),TextToShortCut('Ctrl+'+inttostr(ArrayIndex_)),false,true,nil,0,'menuites'+inttostr(ArrayIndex_));
MenuitemsArray[ArrayIndex_].Tag:=currentModHandle_;
MenuItemsArray[ArrayIndex_].Hint:=FuncPass;
MenuitemsArray[ArrayIndex_].OnClick:=MenuClick;
MnuView.Add(MenuItemsArray[ArrayIndex_]);
end
else
ShowMessage('调用非法的模块,在模块内没有指定方法,(CreateDllForm)');
end
else
ShowMessage('加载程序失败'+LocalPath+' 在(CreateDllForm)');
end;procedure TMainform.myMessage(var Msg:TMessage);
var tmpNode:tfcTreeNode;
begin
MsgCloseBZ:=false;
if not CheckDllModHandle(CurrentModhandle_) then begin
application.MessageBox('异常错误,当前句柄不存在','错误',MB_OK + MB_DEFBUTTON1);
exit;
end; if CurrentModHandle_<> 0 then
begin
deleteMenuItem(CurrentModHandle_);
FreePnlLeft(CurrentModHandle_);
FreePnlCancel(CurrentModHandle_);
FreePnlBack(CurrentModHandle_);
pnlOnToolbar.Width:=pnlOnToolbar.Width-60; if FindHandle(currentModHandle_) then
begin
tmpNode:= GetNode2(CurrentModHandle_);
tmpNode.StringData:=''; //删除树的stringData置为零
Treechange(tree,tmpnode.Parent);
end;
FreeArrayHandle;
MsgCloseBZ:=true;
////////////////////////////////////////////////////////////////
dec(ArrayIndex_); //由于释放了一个DLLFORM所以 arrayIndex_ 再减去一
if (ArrayIndex_>=0) then
begin
currentModHandle_:=Myarray[ArrayIndex_];
showDLLForm(pnlLeftArray[arrayindex_].Hint,CurrentModHandle_);
end
else
begin
currentModHandle_:=0;
mainform.Caption:= '苏源高科系统主控模块';
panel100.SendToBack;
paneldb.BringToFront;
end;
///////////////////////////////////////////////////////////////////////
end
else
begin
ShowMessage('响应消息错误,当前的句柄值为'+inttostr(currentModHandle_));
//application.Terminate;
end;procedure TMainForm.FreePnlBack(FreeTabHandle: thandle);
var I,J:integer;
begin
j:=-1; for I:=low(pnlBackArray) to high(pnlBackArray) do
begin
if pnlBackArray[i].Tag=LongInt(FreeTabHandle) then
begin
pnlBackArray[i].free;
j:=i;
break;
end;
end; if (j=0) and (j=high(pnlBackArray)) then
begin
pnlBackArray:=nil;
exit;
end; if j=High(pnlBackArray) then
begin
SetLength(tmppnlBackArray,high(pnlBackArray)); //设置tmpMyArray的长度,把数据倒入,再灌入MyArray中
for I:=0 to high(pnlBackArray)-1 do //
begin //
tmppnlBackArray[i]:=pnlBackArray[i];
end; //
pnlBackArray:=nil; //
setLength(pnlBackArray,high(tmppnlBackArray)+1);
for I:=0 to High(tmppnlBackArray) do //
begin
pnlBackArray[i]:=tmppnlBackArray[i]; //
end;
tmppnlBackArray:=nil; //
exit;
end; for I:=j to High(pnlBackArray)-1 do
begin
pnlBackArray[i]:=pnlBackArray[i+1];
end;
SetLength(tmppnlBackArray,high(pnlBackArray)); //设置tmpMyArray的长度,把数据倒入,再灌入MyArray中
for I:=low(pnlBackArray) to high(pnlBackArray)-1 do //
begin //
tmppnlBackArray[i]:=pnlBackArray[i];
end; //
pnlBackArray:=nil; //
setLength(pnlBackArray,high(tmppnlBackArray)+1);
for I:=low(tmppnlBackArray) to High(tmppnlBackArray) do //
begin
pnlBackArray[i]:=tmppnlBackArray[i]; //
end;
end;procedure TMainForm.FreePnlCancel(FreeTabHandle: thandle);
var I,J:integer;
begin
j:=-1;
for I:=low(pnlCancelArray) to high(pnlCancelArray) do
begin
if pnlCancelArray[i].Tag=LongInt(FreeTabHandle) then
begin
pnlCancelArray[i].free;
j:=i;
break;
end;
end; if (j=0) and (j=high(pnlCancelArray)) then
begin
pnlCancelArray:=nil;
exit;
end; if j=High(pnlCancelArray) then
begin
SetLength(tmppnlCancelArray,high(pnlCancelArray)); //设置tmpMyArray的长度,把数据倒入,再灌入MyArray中
for I:=0 to high(pnlCancelArray)-1 do //
begin //
tmppnlCancelArray[i]:=pnlCancelArray[i];
end; //
pnlCancelArray:=nil; //
setLength(pnlCancelArray,high(tmppnlCancelArray)+1);
for I:=0 to High(tmppnlCancelArray) do //
begin
pnlCancelArray[i]:=tmppnlCancelArray[i]; //
end;
tmppnlCancelArray:=nil; //
exit;
end; for I:=j to High(pnlCancelArray)-1 do
begin
pnlCancelArray[i]:=pnlCancelArray[i+1];
end;
SetLength(tmppnlCancelArray,high(pnlCancelArray)); //设置tmpMyArray的长度,把数据倒入,再灌入MyArray中
for I:=low(pnlCancelArray) to high(pnlCancelArray)-1 do //
begin //
tmppnlCancelArray[i]:=pnlCancelArray[i];
end; //
pnlCancelArray:=nil; //
setLength(pnlCancelArray,high(tmppnlCancelArray)+1);
for I:=low(tmppnlCancelArray) to High(tmppnlCancelArray) do //
begin
pnlCancelArray[i]:=tmppnlCancelArray[i]; //
end;
end;
begin
TMyPanel(sender).parent.Perform(CM_MouseEnter,0,0);
end;procedure TMainForm.MyMouseLeave(sender: tobject);
begin
TMyPanel(sender).parent.Perform(CM_MouseLeave,0,0);
end;procedure TMainForm.MyMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
TMyPanel(sender).parent.Perform(WM_MOUSEMOVE,0,0);
end;procedure TMainForm.MyMouseMoveDB(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var I:integer;
PnlTemp:TControl;
tmpControlName:String;begin
for I := 0 to TMyPanel(sender).ComponentCount-1 do
begin
tmpControlName:=TMyPanel(sender).Components[I].name;
pnlTemp:=TMyPanel(sender).FindChildControl(tmpControlName);
if TMyPanel(pnlTemp).isdown then begin
TMyPanel(sender).bevelOuter:=bvNone;
TMyPanel(sender).bevelInner:=bvLowered;
TMyPanel(sender).borderstyle:=bsNone;
end
else begin
TMyPanel(pnlTemp).BevelInner:=bvnone;
TMyPanel(pnlTemp).BevelOuter:=bvRaised;
end;
end;end;procedure TMainForm.MyMouseEnterDB(Sender: Tobject);
var I:integer;
PnlTemp:TControl;
tmpControlName:String;
begin
for I := 0 to TMyPanel(sender).ComponentCount-1 do
begin
tmpControlName:=TMyPanel(sender).Components[I].name;
pnlTemp:=TMyPanel(sender).FindChildControl(tmpControlName);
if TMyPanel(pnlTemp).isdown then begin
TMyPanel(sender).bevelOuter:=bvNone;
TMyPanel(sender).bevelInner:=bvLowered;
TMyPanel(sender).borderstyle:=bsNone;
end
else begin
TMyPanel(pnlTemp).BevelInner:=bvnone;
TMyPanel(pnlTemp).BevelOuter:=bvRaised;
end;
end;
end;procedure TMainForm.MyMouseLeaveDB(sender: tobject);
var I:integer;
PnlTemp:TControl;
tmpControlName:String;
begin
TMyPanel(sender).bevelOuter:=bvNone;
TMyPanel(sender).bevelInner:=bvNone;
TMyPanel(sender).BorderStyle:=bsNone;
for I := 0 to TMyPanel(sender).ComponentCount-1 do
begin
tmpControlName:=TMyPanel(sender).Components[I].name;
pnlTemp:=TMyPanel(sender).FindChildControl(tmpControlName);
if TMyPanel(pnlTemp).isdown then begin //如果是IsDown 那么就是left
TMyPanel(sender).bevelOuter:=bvNone;
TMyPanel(sender).bevelInner:=bvLowered;
TMyPanel(sender).BorderStyle:=bsNone;
end
else begin
TMyPanel(pnlTemp).BevelInner:=bvNone;
TMyPanel(pnlTemp).BevelOuter:=bvNone;
end;
end;
end;