有一個很複雜的應用程序,我嘗試建立。DLL,形式和主題(所有的)問題,德爾福
還有就是我建立一個DLL庫。我在裏面放了一個表格,並且在裏面放了一個線程。
在DLL我有一個函數:
procedure ShowForm; stdcall;
var
Form1 : TFormSNVFL7;
begin
Form1 := TFormSNVFL7.Create(nil);
Form1.Show;
end;
我創建了一個表格,並顯示它。這裏沒有問題。 我添加一個線程到這個DLL。 我在窗體上放了一個定時器。幾秒鐘後,我創建一個線程並運行它。一切正常,但當我嘗試改變任何形式的東西時,什麼也沒有發生。
在同步功能我試圖改變它的標籤,但沒有發生。
以下是文件:
DLL PAS:
library uploader;
uses
SysUtils,
Classes,
Forms,
UploaderForm in 'UploaderForm.pas' {FormUploader},
ThreadUpload in 'ThreadUpload.pas';
{$R *.res}
procedure ShowForm; stdcall;
var
upForm: TFormUploader;
begin
upForm := TFormUploader.Create(nil);
upForm.Show;
end;
exports
ShowForm;
begin
end.
形式PAS:
unit UploaderForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, acPNG, ExtCtrls, JvExExtCtrls, JvImage, JvExControls, JvLabel,
JvAnimatedImage, JvGIFCtrl, ComCtrls, JvExComCtrls, JvProgressBar, StdCtrls,
FileCtrl, JvDriveCtrls;
type
TFormUploader = class(TForm)
imgRunning: TJvImage;
imgReady: TJvImage;
imgUpdate: TJvImage;
JvLabel1: TJvLabel;
JvLabel2: TJvLabel;
imgConnect: TJvImage;
imgUpload: TJvImage;
imgCheck: TJvImage;
JvLabel3: TJvLabel;
JvLabel4: TJvLabel;
JvLabel5: TJvLabel;
JvLabel6: TJvLabel;
imgRun: TJvImage;
imgOK: TJvImage;
imgDone: TJvImage;
JvProgressBar1: TJvProgressBar;
JvLabel7: TJvLabel;
fileList: TJvFileListBox;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormUploader: TFormUploader;
implementation
{$R *.dfm}
Uses ThreadUpload;
procedure TFormUploader.FormCreate(Sender: TObject);
begin
imgUpdate.Picture := imgReady.Picture;
imgConnect.Picture := imgReady.Picture;
imgUpload.Picture := imgReady.Picture;
imgCheck.Picture := imgReady.Picture;
imgRun.Picture := imgReady.Picture;
imgOK.Picture := imgReady.Picture;
fileList.Directory := ExtractFilePath(Application.ExeName) + 'csvexport/';
end;
procedure TFormUploader.Timer1Timer(Sender: TObject);
var
UpThread: TThread;
begin
Timer1.Enabled := False;
UpThread := UploadThread.Create(true);
UpThread.Create;
UpThread.Resume;
end;
end.
主題PAS:
unit ThreadUpload;
interface
uses
Classes, UploaderForm;
type
UploadThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
implementation
{ UploadThread }
procedure UploadThread.Execute;
begin
With FormUploader do
begin
imgUpdate.Picture := imgRunning.Picture;
end;
end;
end.
我解決不了這個問題。
你爲什麼打電話Upload.Create您已經創建的線程對象後?我看不到在您的代碼中聲明imgRunning。你爲什麼使用線程來完成這樣的任務? – Linas 2011-04-26 15:33:58
imgRunning是一個表單對象。它正在創建窗體上創建。我在窗體上放置了一個jvImage組件,並將其重命名爲imgRunning。它沒關係。當我嘗試這樣做時,同樣的問題:Label1.Caption:='anything';順便說一下,這是任務的開始。沒有任何變化... – mrtakdnz 2011-04-26 15:37:34
。我將使用IndyFTP上傳數據庫文件。我會從interbase服務器獲取數據,然後將它們轉換爲csv文件,將它們上傳到服務器並在服務器上運行它們(我的服務器生產商不支持MySQL的遠程連接)等。 – mrtakdnz 2011-04-26 15:50:07