Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 349

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Подскажите пожалуйста.Программа ищет все родительские окна,затем по двойному клику на окне она показывает картинку окна на отдельной форме.Затем ищет дочерние окна у заданного родительского окна,находит,далее при двойном клике должна показать картинку элемента этого окна и вот здесь начинает косячить: показывает форму для вывода картинки или полностью свернутой(без клиентской части)или пустой,хотя окно видимо и элементы тоже.Код плный и EXE прилагаются

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ComCtrls, StdCtrls,ShellApi, ImgList,FileCtrl,Menus;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. ListView1: TListView;
  12. Button1: TButton;
  13. Label1: TLabel;
  14. Label2: TLabel;
  15. Label3: TLabel;
  16. Edit1: TEdit;
  17. Edit2: TEdit;
  18. Edit3: TEdit;
  19. Label4: TLabel;
  20. ListView2: TListView;
  21. Button2: TButton;
  22. Button3: TButton;
  23. BalloonHint1: TBalloonHint;
  24. ImageList1: TImageList;
  25. procedure GetAllWindow;
  26. procedure Button1Click(Sender: TObject);
  27. procedure ListView1DblClick(Sender: TObject);
  28. procedure ListView1Click(Sender: TObject);
  29. procedure FormCreate(Sender: TObject);
  30. procedure GetSubChild;
  31. procedure Button3Click(Sender: TObject);
  32. procedure Button2Click(Sender: TObject);
  33. procedure ListView2Click(Sender: TObject);
  34. procedure ListView2DblClick(Sender: TObject);
  35. procedure ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  36. Y: Integer);
  37. procedure ListView2MouseMove(Sender: TObject; Shift: TShiftState; X,
  38. Y: Integer);
  39. private
  40. { Private declarations }
  41. public
  42. { Public declarations }
  43. end;
  44.  
  45. var
  46. Form1: TForm1;
  47.  
  48. implementation
  49. uses Unit3, Unit2;
  50. {$R *.dfm}
  51. var
  52. WDD:HDC;
  53. function EnumProc(Wd: HWnd;Param: LongInt):Boolean;stdcall;
  54. var
  55. Nm: Array[0..255] of Char;
  56. Cs: Array[0..255] of Char;
  57. begin
  58. GetWindowText(Wd,Nm,255);
  59. GetClassName(Wd,Cs,255);
  60. if (WD<>Form1.Handle) or (WD<>Form3.Handle) then
  61. with Form1.ListView1.Items.Add do
  62. begin
  63. SubItems.Add(string(Nm));
  64. SubItems.Add(string(Cs));
  65. SubItems.Add(IntToStr(Wd));
  66. end;
  67. EnumProc:= True;
  68. end;
  69.  
  70.  
  71. function EnumProc1(WD: HWnd;Param: LongInt):Boolean;stdcall;
  72. var
  73. Nm: Array[0..255] of Char;
  74. Cs: Array[0..255] of Char;
  75. begin
  76. GetWindowText(Wd,Nm,255);
  77. GetClassName(Wd,Cs,255);
  78. if (WD<>Form1.Handle) or (WD<>Form3.Handle) then
  79. with Form1.ListView2.Items.Add do
  80. begin
  81. SubItems.Add(string(Nm));
  82. SubItems.Add(string(Cs));
  83. SubItems.Add(IntToStr(Wd));
  84. end;
  85. EnumProc1:= True;
  86. end;
  87. { TForm1 }
  88.  
  89. procedure TForm1.Button1Click(Sender: TObject);
  90. begin
  91. Form1.GetAllWindow;
  92.  
  93. ListView1.Visible:= True;
  94. ListView2.Visible:= False;
  95. Button1.Visible:= False;
  96. Button3.Visible:= True;
  97. end;
  98.  
  99.  
  100.  
  101. procedure TForm1.Button2Click(Sender: TObject);
  102. begin
  103. ListView1.Visible:= True;
  104. ListView2.Visible:= False;
  105. Button1.Visible:= True;
  106. Button3.Visible:= False;
  107. Edit1.Clear;
  108. Edit2.Clear;
  109. Edit3.Clear;
  110. end;
  111.  
  112. procedure TForm1.Button3Click(Sender: TObject);
  113. begin
  114. if ListView1.SelCount = 0 then
  115. begin
  116.  
  117.  
  118. end
  119. else
  120. begin
  121. Form1.GetSubChild;
  122. ListView1.Visible:= False;
  123. ListView2.Visible:= True;
  124. Edit1.Clear;
  125. Edit2.Clear;
  126. Edit3.Clear;
  127. end;
  128. end;
  129.  
  130.  
  131. procedure TForm1.FormCreate(Sender: TObject);
  132. begin
  133. ListView1.Visible:= True;
  134. ListView2.Visible:= False;
  135. Button1.Visible:= True;
  136. Button3.Visible:= False;
  137. end;
  138.  
  139.  
  140. procedure TForm1.GetAllWindow;
  141. begin
  142. ListView1.Items.Clear;
  143. EnumWindows(@EnumProc,0);
  144. end;
  145.  
  146.  
  147. procedure TForm1.GetSubChild;
  148. begin
  149. ListView2.Items.Clear;
  150. EnumChildWindows(WDD,@EnumProc1,0);
  151. end;
  152.  
  153. procedure TForm1.ListView1Click(Sender: TObject);
  154. begin
  155. if ListView1.SelCount = 0 then
  156. begin
  157.  
  158.  
  159. end
  160. else
  161. begin
  162. WDD:= FindWindow(PChar(ListView1.Selected.SubItems[1]),nil);
  163. Edit1.Text:= ListView1.Selected.SubItems[0];
  164. Edit2.Text:= ListView1.Selected.SubItems[1];
  165. Edit3.Text:= ListView1.Selected.SubItems[2];
  166. end;
  167. end;
  168.  
  169. procedure TForm1.ListView1DblClick(Sender: TObject);
  170. var
  171. R: TRect;
  172. WinDC: HDC;
  173. begin
  174. if ListView1.SelCount = 0 then
  175. begin
  176.  
  177.  
  178. end
  179. else
  180. begin
  181. Form3.Show;
  182. SetForegroundWindow(WDD);
  183. Sleep(50);
  184. GetWindowRect(WDD,R);
  185. WinDC:= GetWindowDC(WDD);
  186. Form3.SetBounds(0,0,R.Right-R.Left,R.Bottom-R.Top);
  187. BitBlt(Form3.Canvas.Handle,0,0,Form3.Width,Form3.Height,WinDC,0,0,SRCCOPY);
  188. end;
  189. end;
  190.  
  191. procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  192. Y: Integer);
  193. begin
  194.  
  195. end;
  196.  
  197. procedure TForm1.ListView2Click(Sender: TObject);
  198. begin
  199. if ListView2.SelCount = 0 then
  200. begin
  201.  
  202.  
  203. end
  204. else
  205. begin
  206. Edit1.Text:= ListView2.Selected.SubItems[0];
  207. Edit2.Text:= ListView2.Selected.SubItems[1];
  208. Edit3.Text:= ListView2.Selected.SubItems[2];
  209. end
  210. end;
  211.  
  212. procedure TForm1.ListView2DblClick(Sender: TObject);
  213. var
  214. R: TRect;
  215. WinDC: HDC;
  216. CW: HDC;
  217. begin
  218. if ListView2.SelCount = 0 then
  219. begin
  220.  
  221.  
  222. end
  223. else
  224. begin
  225. CW:= FindWindowEx(WDD,0,PChar(ListView2.Selected.SubItems[1]),PChar(ListView2.Selected.SubItems[0]));
  226. SetForegroundWindow(CW);
  227. Sleep(50);
  228. GetWindowRect(CW,R);
  229. WinDC:= GetWindowDC(CW);
  230. Form3.SetBounds(0,0,R.Right-R.Left,R.Bottom-R.Top);
  231. BitBlt(Form3.Canvas.Handle,0,0,Form3.Width,Form3.Height,WinDC,0,0,SRCCOPY);
  232. Form3.Show;
  233. end;
  234. end;
  235.  
  236. procedure TForm1.ListView2MouseMove(Sender: TObject; Shift: TShiftState; X,
  237. Y: Integer);
  238. begin
  239.  
  240. end;
  241.  
  242. end.


igoriy Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: igoriy (статус: Посетитель)
Вопрос отправлен: 2 ноября 2009, 09:15
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 25; последнее сообщение — 2 ноября 2009, 13:46; участников в обсуждении: 4.

Страницы: [« Предыдущая] [1] [2]

min@y™

min@y™ (статус: Доктор наук), 2 ноября 2009, 12:18 [#21]:

Кстати, проверяй, что функция GetWindowRect() выполнилась успешно:

if not GetWindowRect(...)
then ShowMessage('Чо то тут не так!');
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
igoriy

igoriy (статус: Посетитель), 2 ноября 2009, 12:19 [#22]:

GetWindowRect(CW,R)-GetClientRect(CW,R)Между ними не минус,а тире
igoriy

igoriy (статус: Посетитель), 2 ноября 2009, 12:33 [#23]:

Нашел ошибку - буду разбираться.У меня в
CW:= FindWindowEx(WDD,0,PChar(ListView2.Selected.SubItems[1]),PChar(ListView2.Selected.SubItems[0]));
CW равно нулю(как хорошо с дебургером!!!)
igoriy

igoriy (статус: Посетитель), 2 ноября 2009, 12:33 [#24]:

Спасибо всем!
Вадим К

Вадим К (статус: Академик), 2 ноября 2009, 13:46 [#25]:

по поводу "F4 - от курсора"
Правильно формулировка звучит так: отладчик будет выполнять код, пока не остановиться в строке, где находиться курсор или на любой другой строке с брекпоинтом или исключении. То есть можно считать, что F4 как бы ставит временную невидимую точку останова.
Галочка "подтверждения прочтения" - вселенское зло.

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 22:05
Выполнено за 0.02 сек.