Delphi Programming / Object Pascal
[掲載 2005年11月20日] [更新 2013年10月27日] Delphi サンプルプログラム集 |
350_自分自身のスレッドに関連するウィンドウをリスト |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro |
|
350_ThreadList.zip [549 KB] 2013年10月27日版 (EXE 同梱) |
01_自分自身のスレッドに関連するウィンドウをリスト |
自分自身のスレッドに関連するウィンドウだけをリスト表示する例です.
このサンプルだけでは意味はありせん.開発中のアプリケーションにコードをコピペして利用してみてください. |
|
図1
実行時画面
|
unit ThreadListUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TThreadListForm = class(TForm)
Panel1: TPanel;
Button1: TButton;
Panel2: TPanel;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
ThreadListForm: TThreadListForm;
implementation
{$R *.DFM}
//-----------------------------------------------------------------------------
// EnumThreadWindos関数のコールバック関数
//
// hWindow : ウィンドウのハンドル
// lPar : ユーザ定義の値(EnumThreadWindowsの第3引数)
//-----------------------------------------------------------------------------
function EnumThreadWndProc(hWidow: HWND; lPar : TStringList) : Boolean; stdcall;
var
Buffer : array[0..MAX_PATH - 1] of Char;
begin
Result := True;
FillChar(Buffer, SizeOf(Buffer), #0);
if GetWindowText(hWidow, Buffer, MAX_PATH) > 0 then begin
lPar.AddObject(Buffer, TObject(hWidow));
end;
end;
//=============================================================================
// 列挙開始
//=============================================================================
procedure TThreadListForm.Button1Click(Sender: TObject);
var
SL : TStringList;
i : Integer;
begin
SL := TStringList.Create;
try
EnumThreadWindows(GetCurrentThreadId, Addr(EnumThreadWndProc), LPARAM(SL));
ListBox1.Clear;
//自分自身を除いたスレッドをリスト表示
for i := 0 to SL.Count - 1 do begin
if Cardinal(SL.Objects[i]) <> Self.Handle then begin
ListBox1.Items.Add(SL[i]);
end;
end;
finally
FreeAndNil(SL);
end;
end;
end.
ワード操作フォームEx のテストプログラム,[ReplaceStr] の継承フォームにボタンを追加して,次のコードでテストした結果です.
Form1 は,ワード操作フォームEx を起動するメインフォームです.ウィンドウのタイトルが [文字列操作テスト文書] となっているのが,ワード操作フォームEx の継承フォームで,plWordFormEx が元のワード操作フォームEx のフォームです. |
|
図2
実行画面
- 以下のファイルをプロジェクトフォルダにコピー
ThreadListUnit.dfm
ThreadListUnit.pas
- uses に ThreadListunit を追加
|
procedure TplWordFormEx2.Button3Click(Sender: TObject);
begin
ThreadListForm := TThreadListForm.Create(Self);
try
ThreadListForm.ShowModal;
finally
FreeAndNil(ThreadListForm);
end;
end;
|