デモ(ICS - SingleD)を開きます。定期的なコントロール(編集、ラベル、パネル、ボタン、メモ)とインターネットからファイルをダウンロードするコンポーネントがあります。Delphi:フレームでコンポーネントとコントロールが動作しない
私はそれらをすべてフレームに移動したいと思います。
Iフレームを作成して:
1)メインフォームからコンポーネントを除いてすべてのコントロールをカットし、フレームに貼り付けます。次に、新しいフレームのコントロールのコードを変更します(Form1.URLEdit.Textから "Form1"を切り取るなど)。これはフレームで使用されるか、 "Frame11"を追加するためにFrame11.ProgressBarが追加されます。メインフォームから)。
結果:コンポーネントはメモ、進行状況バーなどに必要な情報を表示しません。コンポーネントのイベントで何も起こりません(「deletefile( '1.txt')」と書かれていても)。作業(例えばOnEdit1Change)
2)(すべてのコードがフレームで動作するように変更された)フレームに貼り付け、すべてのコントロールとコンポーネントをカット
結果:1つのボタンの仕事、別 - なしとMainForm.Caption:= 'xxx'と書いても、ボタンをクリックしても何も起こりません。新しいボタンを作成して同じコードを書くことができれば、すべて動作します -
E.G. 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.
フレームとは何ですか?コンポーネントやコントロールの問題ではありません。
ありがとうございます!
関連付けはすべて問題ありません。確認しました。 – maxfax
それは私のせいでした。私は必要なものを手作業で作りました。今はすべてOKです。ありがとう! – maxfax
これを行うと、.dfmをテキストとして表示し、そのway.tをコピーしてそのようにコピーできます。 –