Jump to content
uniGUI Discussion Forums

Search the Community

Showing results for tags 'Multithread'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • uniGUI Public
    • Announcements
    • General
    • Feature Requests
    • Installation
    • Deployment
    • Other Platforms
  • Licensing
    • Licensing
    • Ordering uniGUI
  • Bug Reports
    • Active Reports
    • Closed Reports
    • Old Bug Reports
  • uniGUI Development
    • uniGUI 1.x
    • Beta Releases
    • Utilities
  • Mobile Platform
    • uniGUI Mobile
    • Mobile Browsers
  • Users Area
    • Sample Projects
    • Components and Code Samples
  • Non-English
    • Non-English
  • Miscellaneous
    • Hosting
    • Server Security
    • Jobs

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

Found 1 result

  1. I currently have a VCL form that downloads and extracts a file as soon as it's showed. I have tried converting it to UniGUI but I get the following problems: Progress bar doesn't work. The form caption does not update. It downloads the zip file but gets a access violation when it wants to extract the downloaded zip file. Here is my VCL form unit: unit uOxideModInstaller; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, System.Zip, ActiveX, IdSSLOpenSSL; type TDownload = class; Tfrmoxidemodinstaller = class(TForm) pb1: TProgressBar; btn1: TButton; procedure FormShow(Sender: TObject); procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TDownload = class(TThread) private httpclient: TIdHTTP; url: string; filename: string; maxprogressbar: integer; progressbarstatus: integer; procedure ExtractZip(ZipFile: string; ExtractPath: string); procedure idhttp1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64); procedure idhttp1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64); procedure UpdateProgressBar; procedure SetMaxProgressBar; protected procedure Execute; override; public constructor Create(CreateSuspended: boolean; aurl, afilename: string); destructor Destroy; override; end; var frmoxidemodinstaller: Tfrmoxidemodinstaller; implementation {$R *.dfm} { Thread } constructor TDownload.Create(CreateSuspended: boolean; aurl, afilename: string); begin inherited Create(CreateSuspended); httpclient := TIdHTTP.Create(nil); httpclient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(httpclient); httpclient.HandleRedirects := True; httpclient.OnWorkBegin := idhttp1WorkBegin; httpclient.OnWork := idhttp1Work; url := aurl; filename := afilename; end; procedure TDownload.idhttp1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64); begin progressbarstatus := AWorkCount; Queue(UpdateProgressBar); end; procedure TDownload.idhttp1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64); begin maxprogressbar := AWorkCountMax; Queue(SetMaxProgressBar); end; procedure TDownload.Execute; var Stream: TMemoryStream; begin Stream := TMemoryStream.Create; try httpclient.Get(url, Stream); Stream.SaveToFile(filename); frmoxidemodinstaller.Caption := 'Done Downloading. Extracting...'; //Sleep(2000); ExtractZip('oxide.zip', GetCurrentDir); finally Stream.Free; end; end; procedure TDownload.UpdateProgressBar; var ZipFile: string; begin frmoxidemodinstaller.pb1.Position := progressbarstatus; frmoxidemodinstaller.Caption := 'Downloading...'; { if frmextradownload.pb1.Position = frmextradownload.pb1.Max then begin frmextradownload.Caption := 'Done Downloading. Extracting...'; Sleep(2000); ExtractZip('files.zip', GetCurrentDir); end; } end; procedure TDownload.SetMaxProgressBar; begin frmoxidemodinstaller.pb1.Max := maxprogressbar; end; destructor TDownload.Destroy; begin FreeAndNil(httpclient); inherited Destroy; end; procedure TDownload.ExtractZip(ZipFile, ExtractPath: string); begin if TZipFile.IsValid(ZipFile) then begin TZipFile.ExtractZipFile(ZipFile, ExtractPath); DeleteFile(ZipFile); DeleteFile('HashInfo.txt'); DeleteFile('OpenSSL License.txt'); DeleteFile('openssl.exe'); DeleteFile('ReadMe.txt'); frmoxidemodinstaller.Caption := 'Done.'; frmoxidemodinstaller.btn1.Enabled := True; end else begin frmoxidemodinstaller.Caption := 'Error Extracting files'; end; end; procedure Tfrmoxidemodinstaller.btn1Click(Sender: TObject); begin Close; end; procedure Tfrmoxidemodinstaller.FormShow(Sender: TObject); var DownloadThread: TDownload; link: string; begin pb1.Position := 0; btn1.Enabled := False; frmoxidemodinstaller.Caption := 'Starting Download...'; link := 'https://bintray.com/oxidemod/builds/download_file?file_path=Oxide-Rust.zip'; DownloadThread := TDownload.Create(true, link, 'oxide.zip'); DownloadThread.FreeOnTerminate := true; DownloadThread.Start; end; end. Here is the form unit I made for UniGUI: (I removed the button) unit uOxideModInstaller; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, uniGUITypes, uniGUIAbstractClasses, uniGUIClasses, uniGUIForm, uniGUIBaseClasses, uniProgressBar, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, System.Zip, ActiveX, IdSSLOpenSSL; type TDownload = class; Tfrmoxidemodinstaller = class(TUniForm) pb1: TUniProgressBar; procedure UniFormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; TDownload = class(TThread) private httpclient: TIdHTTP; url: string; filename: string; maxprogressbar: integer; progressbarstatus: integer; procedure ExtractZip(ZipFile: string; ExtractPath: string); procedure idhttp1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64); procedure idhttp1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64); procedure UpdateProgressBar; procedure SetMaxProgressBar; protected procedure Execute; override; public constructor Create(CreateSuspended: boolean; aurl, afilename: string); destructor Destroy; override; end; function frmoxidemodinstaller: Tfrmoxidemodinstaller; implementation {$R *.dfm} uses MainModule, uniGUIApplication; function frmoxidemodinstaller: Tfrmoxidemodinstaller; begin Result := Tfrmoxidemodinstaller(UniMainModule.GetFormInstance(Tfrmoxidemodinstaller)); end; { Thread } constructor TDownload.Create(CreateSuspended: boolean; aurl, afilename: string); begin inherited Create(CreateSuspended); httpclient := TIdHTTP.Create(nil); httpclient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(httpclient); httpclient.HandleRedirects := True; httpclient.OnWorkBegin := idhttp1WorkBegin; httpclient.OnWork := idhttp1Work; url := aurl; filename := afilename; end; procedure TDownload.idhttp1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64); begin progressbarstatus := AWorkCount; Queue(UpdateProgressBar); end; procedure TDownload.idhttp1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64); begin maxprogressbar := AWorkCountMax; Queue(SetMaxProgressBar); end; procedure TDownload.Execute; var Stream: TMemoryStream; begin Stream := TMemoryStream.Create; try httpclient.Get(url, Stream); Stream.SaveToFile(filename); frmoxidemodinstaller.Caption := 'Done Downloading. Extracting...'; ExtractZip('oxide.zip', GetCurrentDir); finally Stream.Free; end; end; procedure TDownload.UpdateProgressBar; var ZipFile: string; begin frmoxidemodinstaller.pb1.Position := progressbarstatus; frmoxidemodinstaller.Caption := 'Downloading...'; end; procedure TDownload.SetMaxProgressBar; begin frmoxidemodinstaller.pb1.Max := maxprogressbar; end; destructor TDownload.Destroy; begin FreeAndNil(httpclient); inherited Destroy; end; procedure TDownload.ExtractZip(ZipFile, ExtractPath: string); begin if TZipFile.IsValid(ZipFile) then begin TZipFile.ExtractZipFile(ZipFile, ExtractPath); DeleteFile(ZipFile); DeleteFile('HashInfo.txt'); DeleteFile('OpenSSL License.txt'); DeleteFile('openssl.exe'); DeleteFile('ReadMe.txt'); frmoxidemodinstaller.Caption := 'Done.'; frmoxidemodinstaller.Close; end else begin frmoxidemodinstaller.Caption := 'Error Extracting files'; end; end; procedure Tfrmoxidemodinstaller.UniFormShow(Sender: TObject); var DownloadThread: TDownload; link: string; begin pb1.Position := 0; frmoxidemodinstaller.Caption := 'Starting Download...'; link := 'https://bintray.com/oxidemod/builds/download_file?file_path=Oxide-Rust.zip'; DownloadThread := TDownload.Create(true, link, 'oxide.zip'); DownloadThread.FreeOnTerminate := true; DownloadThread.Start; end; end.
×