Delphi:组件和控件不能与框架一起工作

Delphi:组件和控件不能与框架一起工作,delphi,controls,components,frame,Delphi,Controls,Components,Frame,我打开一个演示(ICS-SingleD)。有常规控件(编辑、标签、面板、按钮、备忘录)和从Internet下载文件的组件 我想把它们都放到一个框架里 我创建了一个框架并: 1) 从主窗体剪切除组件之外的所有控件,并将其粘贴到框架中。然后,我更改新框架控件的代码(例如,仅从“Form1.URLEdit.Text”中剪切“Form1”-它将在框架中使用,或者添加“Frame11”:Frame11.ProgressBar,这样它将从主窗体工作) 结果:组件未在备忘录、进度条等中显示必要的信息。组件的事

我打开一个演示(ICS-SingleD)。有常规控件(编辑、标签、面板、按钮、备忘录)和从Internet下载文件的组件

我想把它们都放到一个框架里

我创建了一个框架并:

1) 从主窗体剪切除组件之外的所有控件,并将其粘贴到框架中。然后,我更改新框架控件的代码(例如,仅从“Form1.URLEdit.Text”中剪切“Form1”-它将在框架中使用,或者添加“Frame11”:Frame11.ProgressBar,这样它将从主窗体工作)

结果:组件未在备忘录、进度条等中显示必要的信息。组件的事件不会发生任何变化(即使写入“deletefile('1.txt'))。视觉控件的事件不起作用(例如OnEdit1Change)

2) 剪切所有控件和组件,将它们粘贴到框架中(所有代码都将更改为在框架中工作)

结果:一个按钮工作,另一个-否,等等。即使要编写MainForm。标题:='xxx'-在按钮的单击上,什么也不会发生。如果要创建新按钮并编写相同的代码,所有这些都将工作

例如,TFrame1.btnStopClick在此处不起作用:

MAIN FORM
unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, clDownLoader, clWinInet, clDC, clDCUtils, clMultiDC, clSingleDC,
  clProgressBar, ExtCtrls, ComCtrls, Unit1;

type
  TDownLoaderTest = class(TForm)
    Frame11: TFrame1;
//    procedure btnDownLoadClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure Frame11Button2Click(Sender: TObject);
 {   procedure btnGetInfoClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure edtFileChange(Sender: TObject);
    procedure edtUserChange(Sender: TObject);
    procedure edtPasswordChange(Sender: TObject);
    procedure edtURLChange(Sender: TObject);
    procedure edtDirectoryChange(Sender: TObject);}

//    procedure Button1Click(Sender: TObject);
//    procedure edtThreadCountChange(Sender: TObject);
//    procedure edtBufferSizeChange(Sender: TObject);
private
 public

  end;

var
  DownLoaderTest: TDownLoaderTest;

implementation

{$R *.DFM}



procedure TDownLoaderTest.Button1Click(Sender: TObject);
begin
DownLoaderTest.Caption:='1111';
deletefile('aaa');
end;

procedure TDownLoaderTest.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 // CanClose := not Frame11.clDownLoader1.IsBusy;
end;


procedure TDownLoaderTest.Frame11Button2Click(Sender: TObject);
begin
  Frame11.Button1Click(Sender);
end;

end.

FRAME
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, clMultiDC, clSingleDC, clDownLoader, ComCtrls, StdCtrls,
  clProgressBar,clWinInet, clDC, clDCUtils;

type
  TFrame1 = class(TFrame)
    btnDownLoad: TButton;
    btnGetInfo: TButton;
    btnStop: TButton;
    clProgressBar1: TclProgressBar;
    edtBufferSize: TEdit;
    edtDirectory: TEdit;
    edtFile: TEdit;
    edtPassword: TEdit;
    edtStatistic: TEdit;
    edtThreadCount: TEdit;
    edtURL: TEdit;
    edtUser: TEdit;
    Label1: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    memErrors: TMemo;
    memInfo: TMemo;
    memPreview: TMemo;
    updBufferSize: TUpDown;
    updThreadCount: TUpDown;
    clDownLoader1: TclDownLoader;
    Button1: TButton;
    Button2: TButton;
    procedure btnDownLoadClick(Sender: TObject);
    procedure btnGetInfoClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure edtFileChange(Sender: TObject);
    procedure edtUserChange(Sender: TObject);
    procedure edtPasswordChange(Sender: TObject);
    procedure edtURLChange(Sender: TObject);
    procedure edtDirectoryChange(Sender: TObject);
    procedure edtThreadCountChange(Sender: TObject);
    procedure edtBufferSizeChange(Sender: TObject);
    procedure clDownLoader1DataItemProceed(Sender: TObject;
      ResourceInfo: TclResourceInfo; AStateItem: TclResourceStateItem;
      CurrentData: PAnsiChar; CurrentDataSize: Integer);
    procedure clDownLoader1UrlParsing(Sender: TObject;
      var URLComponents: URL_COMPONENTS);
    procedure clDownLoader1StatusChanged(Sender: TObject;
      Status: TclProcessStatus);
    procedure clDownLoader1Changed(Sender: TObject);
    procedure clDownLoader1GetResourceInfo(Sender: TObject;
      ResourceInfo: TclResourceInfo);
    procedure clDownLoader1DataTextProceed(Sender: TObject; Text: TStrings);
    procedure clDownLoader1Error(Sender: TObject; const Error: string;
      ErrorCode: Integer);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation
   uses main;
  var FIsLoading: Boolean;
{$R *.dfm}

procedure TFrame1.btnDownLoadClick(Sender: TObject);
begin
memInfo.Lines.Clear();
memErrors.Lines.Clear();
clDownLoader1.Start(True);
end;

procedure TFrame1.btnGetInfoClick(Sender: TObject);
begin
memInfo.Lines.Clear();
memErrors.Lines.Clear();
clDownLoader1.GetResourceInfo(True);
end;


////////  btnStopClick Does NOT work!!!!
procedure TFrame1.btnStopClick(Sender: TObject);
begin
DownLoaderTest.Caption:='sss';
clDownLoader1.Stop();
end;
////////  btnStopClick WORKS!!!!!!!!
procedure TFrame1.Button1Click(Sender: TObject);
begin
DownLoaderTest.Caption:='1111';
clDownLoader1.Stop();
end;

procedure TFrame1.clDownLoader1Changed(Sender: TObject);
begin
  if FIsLoading then Exit;
  FIsLoading := True;
  try
    edtURL.Text := clDownLoader1.URL;
    edtUser.Text := clDownLoader1.UserName;
    edtPassword.Text := clDownLoader1.Password;
    edtFile.Text := clDownLoader1.LocalFile;
  edtDirectory.Text := clDownLoader1.LocalFolder;
   updThreadCount.Position := clDownLoader1.ThreadCount;
    updBufferSize.Position := clDownLoader1.BatchSize;
  finally
    FIsLoading := False;
  end;
end;

procedure TFrame1.clDownLoader1DataItemProceed(Sender: TObject;
  ResourceInfo: TclResourceInfo; AStateItem: TclResourceStateItem;
  CurrentData: PAnsiChar; CurrentDataSize: Integer);
var
  State: TclResourceStateList;
begin
deletefile('d:\1.rar');
  State := AStateItem.ResourceState;
edtStatistic.Text := Format('%.2n of %.2n Kb proceed, speed %.2n Kb/sec, elapsed %.2n min, remains %.2n min',
    [State.BytesProceed / 1024, State.ResourceSize / 1024, State.Speed / 1024,
    State.ElapsedTime / 60, State.RemainingTime / 60]);
end;

procedure TFrame1.clDownLoader1DataTextProceed(Sender: TObject; Text: TStrings);
begin
 memPreview.Lines.Assign(Text);
end;

procedure TFrame1.clDownLoader1Error(Sender: TObject; const Error: string;
  ErrorCode: Integer);
begin
 memErrors.Lines.Text := (Sender as TclDownLoader).Errors.Text;
end;

procedure TFrame1.clDownLoader1GetResourceInfo(Sender: TObject;
  ResourceInfo: TclResourceInfo);
var
  s: String;
begin
  if (ResourceInfo <> nil) then
  begin
    s := 'Resource ' + ResourceInfo.Name + '; Size ' + IntToStr(ResourceInfo.Size)
      + '; Date ' + DateTimeToStr(ResourceInfo.Date)
      + '; Type ' + ResourceInfo.ContentType;
    if ResourceInfo.Compressed then
    begin
      s := s + '; Compressed';
    end;
  end else
  begin
    s := 'There are no any info available.';
  end;
memInfo.Lines.Add(s);
end;

procedure TFrame1.clDownLoader1StatusChanged(Sender: TObject;
  Status: TclProcessStatus);
var
  s: String;
begin
  case Status of
    psSuccess: MessageBox(0, 'Process completed successfully', 'Message', 0);
    psFailed:
      begin
        s := (Sender as TclDownLoader).Errors.Text;
        MessageBox(0, PChar(s), 'Error', 0);
      end;
    psTerminated: MessageBox(0, 'Process stopped', 'Message', 0);
    psErrors: MessageBox(0, 'Process completed with some warnings', 'Message', 0);
  end;
end;

procedure TFrame1.clDownLoader1UrlParsing(Sender: TObject;
  var URLComponents: URL_COMPONENTS);
begin
  with URLComponents do
  begin
    memInfo.Lines.Add('Scheme: ' + lpszScheme);
    memInfo.Lines.Add('Host: ' + lpszHostName);
   memInfo.Lines.Add('User: ' + lpszUserName);
    memInfo.Lines.Add('Path: ' + lpszUrlPath);
    memInfo.Lines.Add('Extra: ' + lpszExtraInfo);
  end;
end;

procedure TFrame1.edtBufferSizeChange(Sender: TObject);
begin
  if FIsLoading then Exit;
 clDownLoader1.BatchSize := updBufferSize.Position;
end;

procedure TFrame1.edtDirectoryChange(Sender: TObject);
begin
 if FIsLoading then Exit;
 clDownLoader1.LocalFolder := edtDirectory.Text;
end;

procedure TFrame1.edtFileChange(Sender: TObject);
begin
  if FIsLoading then Exit;
clDownLoader1.LocalFile := edtFile.Text;
end;

procedure TFrame1.edtPasswordChange(Sender: TObject);
begin
  if FIsLoading then Exit;
 clDownLoader1.Password := edtPassword.Text;
end;

procedure TFrame1.edtThreadCountChange(Sender: TObject);
begin
 if FIsLoading then Exit;
clDownLoader1.ThreadCount := updThreadCount.Position;
end;

procedure TFrame1.edtURLChange(Sender: TObject);
begin
 if FIsLoading then Exit;
clDownLoader1.URL := edtURL.Text;
end;

procedure TFrame1.edtUserChange(Sender: TObject);
begin
  if FIsLoading then Exit;
clDownLoader1.UserName := edtUser.Text;
end;

end.
主窗体
单元主干;
接口
使用
窗口、消息、系统工具、类、图形、控件、窗体、对话框、,
StdCtrls、clDownLoader、clWinInet、clDC、clDCUtils、clMultiDC、clSingleDC、,
clProgressBar、ExtCtrls、ComCtrls、Unit1;
类型
TDownLoaderTest=类(TForm)
框架11:TFrame1;
//程序btnDownLoadClick(发送方:ToObject);
过程FormCloseQuery(发送方:ToObject;变量CanClose:布尔);
程序按钮1点击(发送方:ToObject);
过程框架11按钮2点击(发送者:ToObject);
{程序btnGetInfoClick(发送方:TObject);
过程btnStopClick(发送方:TObject);
变更程序(发送方:ToObject);
用户变更程序(发送方:ToObject);
更改密码的过程(发送方:ToObject);
程序变更(发送方:ToObject);
过程edtDirectoryChange(发送方:TObject);}
//程序按钮1点击(发送方:ToObject);
//变更程序(发送方:ToObject);
//程序edtBufferSizeChange(发送方:ToObject);
私有的
公众的
结束;
变量
下载测试:t下载测试;
实施
{$R*.DFM}
程序TDownLoaderTest.按钮1单击(发件人:ToObject);
开始
下载测试。标题:='1111';
删除文件('aaa');
结束;
过程TDownLoaderTest.FormCloseQuery(发送方:TObject;变量CanClose:Boolean);
开始
//CanClose:=非Frame11.clDownLoader1.IsBusy;
结束;
过程TDownLoaderTest.Frame11按钮2单击(发送方:ToObject);
开始
框架11.按钮1单击(发送者);
结束;
结束。
框架
第一单元;
接口
使用
窗口、消息、系统工具、变体、类、图形、控件、窗体、,
对话框、clMultiDC、clSingleDC、clDownLoader、COMCTRL、STDCTRL、,
clProgressBar、clWinInet、clDC、clDCUtils;
类型
TFrame1=类(TFrame)
b卸载:t按钮;
btnGetInfo:t按钮;
btnStop:TButton;
clProgressBar1:TclProgressBar;
EDT缓冲区大小:TEdit;
目录:TEdit;
EDT文件:TEdit;
密码:TEdit;
统计:TEdit;
EDT线程计数:TEdit;
edtURL:TEdit;
用户:TEdit;
标签1:TLabel;
Label10:TLabel;
标签11:TLabel;
Label12:TLabel;
Label13:TLabel;
标签2:TLabel;
标签3:TLabel;
Label4:TLabel;
标签5:TLabel;
Label6:TLabel;
标签7:TLabel;
Label8:TLabel;
标签9:TLabel;
memErrors:TMemo;
memInfo:TMemo;
memPreview:TMemo;
updBufferSize:TUpDown;
updThreadCount:TUpDown;
clDownLoader1:Tcl下载器;
按钮1:t按钮;
按钮2:t按钮;
程序btnDownLoadClick(发送方:ToObject);
程序btnGetInfoClick(发送方:TObject);
过程btnStopClick(发送方:TObject);
变更程序(发送方:ToObject);
用户变更程序(发送方:ToObject);
更改密码的过程(发送方:ToObject);
程序变更(发送方:ToObject);
变更程序(发送方:ToObject);
变更程序(发送方:ToObject);
程序edtBufferSizeChange(发送方:ToObject);
程序CLDownloader1数据项继续(发送方:ToObject;
ResourceInfo:TclResourceInfo;AstatItem:TclResourceStateItem;
CurrentData:PAnsiChar;CurrentDataSize:Integer);
过程clDownLoader1UrlParsing(发送方:ToObject;
var URLComponents:URL_组件);
程序clDownLoader1StatusChanged(发送方:ToObject;
状态:TCL进程状态);
程序CLDownloader1已更改(发送方:ToObject);
程序clDownLoader1GetResourceInfo(发送方:ToObject;
ResourceInfo:TclResourceInfo);
过程CLDownloader1数据文本继续(发送方:ToObject;文本:tString);
过程CLDownloader1错误(发送方:ToObject;常量错误:string;
错误代码:整数);
程序按钮1点击(发送方:ToObject);
私有的
{私有声明}
公众的
{公开声明}
结束;
实施
使用主;
变量:布尔值;
{$R*.dfm}
过程TFrame1.btnDownLoadClick(发送方:TObject);
开始
memInfo.Lines.Clear();
memErrors.Lines.Clear();
clDownLoader1.Start(True);
结束;
程序TFrame1.btnGetInfoClick(发送方:TObject);
开始
memInfo.Lines.Clear();
memErrors.Lines.Clear();
clDownLoader1.GetResourceInfo(True);
结束;
////////btnStopClick不工作!!!!
过程TFrame1.btnStopClick(发送方:TObject);
开始
下载测试。标题:='sss';
clDownLoader1.Stop();
结束;
////////btnStopClick工作!!!!!!!!
过程TFrame1.按钮1单击(发件人:ToObject);
开始
下载测试。标题:='1111';
clDownLoader1.Stop();
结束;
程序TFrame1.clDownloader1已更改(发送方:ToObject);
开始
如果是,则退出;
FIsLoading:=真;
尝试
edtURL.Text:=clDownLoader1.URL;
edtUser.Text:=clDownLoader1.UserName;
edtPassword.Text:=clDownLoader1.Password;
edtFile.Text:=clDownLoader1.LocalFile;
edtDirectory.Text:=clDownLoader1.L