我创建了一个 TThread 来处理 Excel 文件中的一些关键问题,但是,我目前遇到了一些挑战,因为该线程似乎没有与我的应用程序并行工作。尽管我尽了最大努力来找出问题的根本原因,但到目前为止我还没有成功。为了解决这个问题,我尝试使用重写的 Execute 方法定义 TThread 类型,并尝试从 Synchronize 方法切换到 Queue 方法,但到目前为止,这两种方法都没有产生积极的结果。
procedure TForm2.Button1Click(Sender: TObject);
begin
TThread.CreateAnonymousThread(proc).Start;
end;
procedure TForm2.Proc;
var
refSheet: Integer;
RowCount,varGridRow:Integer;
i, j,k: Integer;
desc, refDesc, refRate: string;
delta: Integer;
OldValue:String;
ws: Variant;
ExcelApp: Variant;
begin
Tthread.Synchronize(nil,procedure ()begin
if OpenDialog1.Execute then
begin
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Workbooks.Open(OpenDialog1.FileName);
end;
end);
Tthread.Synchronize(nil,procedure () begin
refSheet :=StrToInt(InputBox('','','3'));
if (refSheet <= 0) or (refSheet > ExcelApp.Worksheets.Count) then
begin
ShowMessage('Invalid sheet number');
Exit;
end;
end);
Tthread.Queue(nil,procedure ()var i,j,k:Integer; begin
IssamProgressBar1.Max:= ExcelApp.Worksheets[refSheet].UsedRange.Rows.Count;
RowCount:=1; …Run Code Online (Sandbox Code Playgroud) 我有一个像“10011011001”这样的字符串,我希望将该字符串转换为十六进制字符串,最好的方法是什么。
我正在尝试使用单位“outlook2000”,但我的Try 语句出现问题 ,我收到Error: E2021 Class type required。如果我在没有这个单元或没有except 的情况下执行我的应用程序,那么一切都很好。
Uses ...,outlook2000;
procedure TForm1.Button1Click(Sender: TObject);
var
S:string;
begin
try
s:='Hello';
Except On E:Exception do
ShowMessage(E.Message);
end;
end;
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释一下出了什么问题吗?我使用 Delphi 10.1 Berlin,Win 10。