unit frmBreakThreadUnit; {$MODE Delphi} interface uses LCLIntf, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, LResources, ExtCtrls,CEDebugger, debughelper; type { Tfrmbreakthread } Tfrmbreakthread = class(TForm) Label1: TLabel; Panel1: TPanel; Threadlistbox: TListBox; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure ThreadlistboxDblClick(Sender: TObject); private { Private declarations } public { Public declarations } threadhandle: thandle; end; var frmbreakthread: Tfrmbreakthread; implementation uses debugeventhandler; procedure Tfrmbreakthread.Button1Click(Sender: TObject); var i: integer; threadlist: TList; begin if (debuggerthread<>nil) and (threadlistbox.ItemIndex<>-1) then begin threadlist:=debuggerthread.lockThreadlist; try for i:=0 to threadlist.Count-1 do if TDebugThreadHandler(threadlist[i]).ThreadId=strtoint('$'+threadlistbox.Items[threadlistbox.ItemIndex]) then begin threadhandle:=TDebugThreadHandler(threadlist[i]).handle; modalresult:=mrok; end; finally debuggerthread.unlockThreadlist; end; end; end; procedure Tfrmbreakthread.FormCreate(Sender: TObject); var i: integer; threadlist: TList; begin threadlistbox.clear; if debuggerthread<>nil then begin threadlist:=debuggerthread.lockThreadlist; try for i:=0 to threadlist.Count-1 do threadlistbox.Items.Add(inttohex(TDebugThreadHandler(threadlist[i]).ThreadId,8)); finally debuggerthread.unlockThreadlist; end; end; end; procedure Tfrmbreakthread.FormShow(Sender: TObject); begin button1.autosize:=false; button2.autosize:=false; if button2.Width>button1.width then button1.width:=button2.width else button2.width:=button1.width; end; procedure Tfrmbreakthread.ThreadlistboxDblClick(Sender: TObject); begin button1.Click; end; initialization {$i frmBreakThreadUnit.lrs} end.