掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Threadオブジェクトからformオブジェクトにアクセスできない (ID:33303)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ヤマダです。 にしのさん、ご返信ありがとうございます。 下記にソースを抜粋して添付いたします。 抜粋の仕方が悪かった場合は、お手数ですが ツッコミお願い致します。 unit MAIN; TMainForm = class(TForm) miImportClick(Sender: TObject); procedure miImportClick(Sender: TObject); private { Private declarations } FThreadImport:TImportFileThread; //対象ディレクトリのjpgファイルを取得 procedure getImportList(var sList:TStringList;dir:String); //Import対象のファイル名でtreeNodeを作成しtreeviewに登録する。 procedure addNodeforPic(); procedure importDone(sender:TObject); public { Public declarations } fileList:TStringList; end; procedure TMainForm.miImportClick(Sender: TObject); begin AppInfo.ImportDir := BrowseForFolder('ディレクトリ選択','',true); if AppInfo.ImportDir <> '' then begin self.getImportList(fileList,appInfo.ImportDir); self.addNodeforPic; ShowMessage(IntToStr(self.fileList.Count)); //ここで8を出力 self.FThreadImport := TImportFileThread.Create(false); self.FThreadImport.Priority := tpLowest; self.FThreadImport.OnTerminate := self.importDone; self.FThreadImport.FreeOnTerminate := true; self.StatusBar.Panels[0].Text := 'Import中です・・・・'; end; end; //対象ディレクトリのjpgファイルを取得 procedure TMainForm.getImportList(var sList: TStringList;dir:String); var rec:TSearchRec; begin self.fileList.Clear; if (FindFirst(dir + '\*.jpg', faAnyFile, Rec) = 0) then begin repeat if ( (Rec.Name <> '.') and (Rec.Name <> '..') and ((rec.Attr and faDirectory) = 0)) then fileList.Add(rec.Name); until (FindNext(Rec) <> 0); end; end; //Import対象のファイル名でtreeNodeを作成しtreeviewに登録する。 procedure TMainForm.addNodeforPic; var i:Integer; Node:TTreeNode; childNode:TTreeNode; begin Node := self.treeView.Selected; repeat if Node.Parent <> nil then Node := Node.Parent; until (Node.Parent = nil); for i := 0 to self.sList.Count - 1 do begin childNode := Self.treeView.Items.AddChild(Node.getFirstChild,Self.fileList.Strings[i]); childNode.ImageIndex := 3; end; self.treeView.SaveToFile(AppInfo.workSpaceDir+'app.conf'); end; procedure TMainForm.importDone(sender: TObject); begin self.StatusBar.Panels[0].Text := 'Import完了'; end; *************************************************** unit UThreadImport; interface uses Classes,UAppClass,Windows,Dialogs; type TImportFileThread = class(TThread) private { Private declarations } FSourceDir:TStringList; FDistiDir:String; protected procedure SetDir(); procedure Execute; override; end; implementation uses SysUtils,Main; { TImportFileThread } procedure TImportFileThread.Execute; var i:Integer; begin { Place thread code here } self.Synchronize(self.SetDir); end; procedure TImportFileThread.SetDir; begin ShowMessage(MainForm.fileList); //ここではなぜか0 end; 以上 宜しくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.