2011-07-10 3 views
2

デモ(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. 

フレームとは何ですか?コンポーネントやコントロールの問題ではありません。

ありがとうございます!

答えて

4

cut &貼り付けの結果、ボタンとそのクリックハンドラはフレームの.dfmに関連付けられていません。

デザインエディタでフレームの 'btnStop'を選択し、OIの 'Events'タブをクリックし、 'OnClick'を選択して右側の下向き矢印をクリックし、リストから 'btnStopClick'を見つけて選択します。

+0

関連付けはすべて問題ありません。確認しました。 – maxfax

+0

それは私のせいでした。私は必要なものを手作業で作りました。今はすべてOKです。ありがとう! – maxfax

+0

これを行うと、.dfmをテキストとして表示し、そのway.tをコピーしてそのようにコピーできます。 –

関連する問題