|
Вопрос # 3 349/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Подскажите пожалуйста.Программа ищет все родительские окна,затем по двойному клику на окне она показывает картинку окна на отдельной форме.Затем ищет дочерние окна у заданного родительского окна,находит,далее при двойном клике должна показать картинку элемента этого окна и вот здесь начинает косячить: показывает форму для вывода картинки или полностью свернутой(без клиентской части)или пустой,хотя окно видимо и элементы тоже.Код плный и EXE прилагаются
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ComCtrls, StdCtrls,ShellApi, ImgList,FileCtrl,Menus;
-
- type
- TForm1 = class(TForm)
- ListView1: TListView;
- Button1: TButton;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Edit1: TEdit;
- Edit2: TEdit;
- Edit3: TEdit;
- Label4: TLabel;
- ListView2: TListView;
- Button2: TButton;
- Button3: TButton;
- BalloonHint1: TBalloonHint;
- ImageList1: TImageList;
- procedure GetAllWindow;
- procedure Button1Click(Sender: TObject);
- procedure ListView1DblClick(Sender: TObject);
- procedure ListView1Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure GetSubChild;
- procedure Button3Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure ListView2Click(Sender: TObject);
- procedure ListView2DblClick(Sender: TObject);
- procedure ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- procedure ListView2MouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
- uses Unit3, Unit2;
- {$R *.dfm}
- var
- WDD:HDC;
- function EnumProc(Wd: HWnd;Param: LongInt):Boolean;stdcall;
- var
- Nm: Array[0..255] of Char;
- Cs: Array[0..255] of Char;
- begin
- GetWindowText(Wd,Nm,255);
- GetClassName(Wd,Cs,255);
- if (WD<>Form1.Handle) or (WD<>Form3.Handle) then
- with Form1.ListView1.Items.Add do
- begin
- SubItems.Add(string(Nm));
- SubItems.Add(string(Cs));
- SubItems.Add(IntToStr(Wd));
- end;
- EnumProc:= True;
- end;
-
-
- function EnumProc1(WD: HWnd;Param: LongInt):Boolean;stdcall;
- var
- Nm: Array[0..255] of Char;
- Cs: Array[0..255] of Char;
- begin
- GetWindowText(Wd,Nm,255);
- GetClassName(Wd,Cs,255);
- if (WD<>Form1.Handle) or (WD<>Form3.Handle) then
- with Form1.ListView2.Items.Add do
- begin
- SubItems.Add(string(Nm));
- SubItems.Add(string(Cs));
- SubItems.Add(IntToStr(Wd));
- end;
- EnumProc1:= True;
- end;
- { TForm1 }
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- Form1.GetAllWindow;
-
- ListView1.Visible:= True;
- ListView2.Visible:= False;
- Button1.Visible:= False;
- Button3.Visible:= True;
- end;
-
-
-
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- ListView1.Visible:= True;
- ListView2.Visible:= False;
- Button1.Visible:= True;
- Button3.Visible:= False;
- Edit1.Clear;
- Edit2.Clear;
- Edit3.Clear;
- end;
-
- procedure TForm1.Button3Click(Sender: TObject);
- begin
- if ListView1.SelCount = 0 then
- begin
-
-
- end
- else
- begin
- Form1.GetSubChild;
- ListView1.Visible:= False;
- ListView2.Visible:= True;
- Edit1.Clear;
- Edit2.Clear;
- Edit3.Clear;
- end;
- end;
-
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- ListView1.Visible:= True;
- ListView2.Visible:= False;
- Button1.Visible:= True;
- Button3.Visible:= False;
- end;
-
-
- procedure TForm1.GetAllWindow;
- begin
- ListView1.Items.Clear;
- EnumWindows(@EnumProc,0);
- end;
-
-
- procedure TForm1.GetSubChild;
- begin
- ListView2.Items.Clear;
- EnumChildWindows(WDD,@EnumProc1,0);
- end;
-
- procedure TForm1.ListView1Click(Sender: TObject);
- begin
- if ListView1.SelCount = 0 then
- begin
-
-
- end
- else
- begin
- WDD:= FindWindow(PChar(ListView1.Selected.SubItems[1]),nil);
- Edit1.Text:= ListView1.Selected.SubItems[0];
- Edit2.Text:= ListView1.Selected.SubItems[1];
- Edit3.Text:= ListView1.Selected.SubItems[2];
- end;
- end;
-
- procedure TForm1.ListView1DblClick(Sender: TObject);
- var
- R: TRect;
- WinDC: HDC;
- begin
- if ListView1.SelCount = 0 then
- begin
-
-
- end
- else
- begin
- Form3.Show;
- SetForegroundWindow(WDD);
- Sleep(50);
- GetWindowRect(WDD,R);
- WinDC:= GetWindowDC(WDD);
- Form3.SetBounds(0,0,R.Right-R.Left,R.Bottom-R.Top);
- BitBlt(Form3.Canvas.Handle,0,0,Form3.Width,Form3.Height,WinDC,0,0,SRCCOPY);
- end;
- end;
-
- procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- begin
-
- end;
-
- procedure TForm1.ListView2Click(Sender: TObject);
- begin
- if ListView2.SelCount = 0 then
- begin
-
-
- end
- else
- begin
- Edit1.Text:= ListView2.Selected.SubItems[0];
- Edit2.Text:= ListView2.Selected.SubItems[1];
- Edit3.Text:= ListView2.Selected.SubItems[2];
- end
- end;
-
- procedure TForm1.ListView2DblClick(Sender: TObject);
- var
- R: TRect;
- WinDC: HDC;
- CW: HDC;
- begin
- if ListView2.SelCount = 0 then
- begin
-
-
- end
- else
- begin
- CW:=
FindWindowEx(WDD,0,PChar(ListView2.Selected.SubItems[1]),PChar(ListView2.Selected.SubItems[0]));
- SetForegroundWindow(CW);
- Sleep(50);
- GetWindowRect(CW,R);
- WinDC:= GetWindowDC(CW);
- Form3.SetBounds(0,0,R.Right-R.Left,R.Bottom-R.Top);
- BitBlt(Form3.Canvas.Handle,0,0,Form3.Width,Form3.Height,WinDC,0,0,SRCCOPY);
- Form3.Show;
- end;
- end;
-
- procedure TForm1.ListView2MouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- begin
-
- end;
-
- end.
 |
Вопрос задал: igoriy (статус: Посетитель)
Вопрос отправлен: 2 ноября 2009, 09:15
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 25; последнее сообщение — 2 ноября 2009, 13:46; участников в обсуждении: 4.
Страницы: [« Предыдущая] [1] [2]
|
min@y™ (статус: Доктор наук), 2 ноября 2009, 12:18 [#21]:
Кстати, проверяй, что функция GetWindowRect() выполнилась успешно:
if not GetWindowRect(...)
then ShowMessage('Чо то тут не так!');
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
igoriy (статус: Посетитель), 2 ноября 2009, 12:19 [#22]:
GetWindowRect(CW,R)-GetClientRect(CW,R)Между ними не минус,а тире
|
|
igoriy (статус: Посетитель), 2 ноября 2009, 12:33 [#23]:
Нашел ошибку - буду разбираться.У меня в
CW:= FindWindowEx(WDD,0,PChar(ListView2.Selected.SubItems[1]),PChar(ListView2.Selected.SubItems[0]));
CW равно нулю(как хорошо с дебургером!!!)
|
|
igoriy (статус: Посетитель), 2 ноября 2009, 12:33 [#24]:
Спасибо всем!
|
|
Вадим К (статус: Академик), 2 ноября 2009, 13:46 [#25]:
по поводу "F4 - от курсора"
Правильно формулировка звучит так: отладчик будет выполнять код, пока не остановиться в строке, где находиться курсор или на любой другой строке с брекпоинтом или исключении. То есть можно считать, что F4 как бы ставит временную невидимую точку останова.
Галочка "подтверждения прочтения" - вселенское зло.
|
Страницы: [« Предыдущая] [1] [2]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|