Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Handle объекта в документе html [D6, D7, Win2k, WinXP]


Строгов Артем ©   (2004-10-21 13:30:00) 

Есть документ HTML. В теге <object> указан flash-файл. Собственно нужно получить его handle в окне документа.

Очень нужно, прошу помочь кто знает.


Строгов Артем   (2004-10-22 15:33:00) [1]

Огвомное спасибо, сейчас буду тестить.


easy   (2004-10-22 11:02:00) [2]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, OleCtrls, SHDocVw, StdCtrls;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   WebBrowser1: TWebBrowser;
   procedure FormCreate(Sender: TObject);
   procedure WebBrowser1DocumentComplete(Sender: TObject;
     const pDisp: IDispatch; var URL: OleVariant);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function EnumChildProc(Window: HWND; LParam: Longint): Bool; stdcall;
var
 ClassName: array [0..255] of Char;
const
 FLASH_AX = 'MacromediaFlashPlayerActiveX';
begin
 Result := True;
 GetClassName(Window, ClassName, SizeOf(ClassName));
 if not (TStringList(LParam) is TStringList) then
   raise Exception.Create('EnumChildProc was not passed a TStringList');
 if ClassName = FLASH_AX then
   TStringList(LParam).Add('$'+IntToHex(Window, 8) + ' -> ' + ClassName);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 with Memo1 do begin
   Clear;
   Height:=150;
   Align:=alBottom;
   ScrollBars:=ssBoth;
 end;
 with WebBrowser1 do begin
   Align:=alClient;
   Navigate('чтототама.htm');
 end;
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
 const pDisp: IDispatch; var URL: OleVariant);
var
 Captions: TStringList;
 ErrCode: DWORD;
begin
 Captions := TStringList.Create;
 try
   SetLastError(0);
   if EnumChildWindows(WebBrowser1.Handle, @EnumChildProc,
     Longint(Captions)) then
     Captions.Add('End of child list')
   else if GetLastError = NO_ERROR then
     Captions.Add('No child windows were found')
   else
     begin
     ErrCode := GetLastError;
     Captions.Add('EnumChildWindows failed - ' +
       SysErrorMessage(ErrCode));
     end;
 finally
   Memo1.Clear;
   Memo1.Lines.Assign(Captions);
   Captions.Free;
 end;
end;

end.


Строгов Артем   (2004-10-21 23:33:00) [3]

Большое спасибо. С одним файлом работает, а как получить если есть фреймы?


easy   (2004-10-21 16:30:00) [4]

var
 h,flash:HWND;
begin
 h := GetWindow(GetWindow(WebBrowser1.Handle, GW_CHILD), GW_CHILD);
 flash:=FindWindowEx(h,0,'MacromediaFlashPlayerActiveX','');
 if flash<>0 then
   caption:='$'+inttohex(h,8)
 else
   caption:='Not Found';


VMcL   (2004-10-21 14:34:00) [5]

> Собственно нужно получить его handle в окне документа.

А откуда сведения, что у object'а есть некий handle?


Наверх

Титульная страница Поиск, карта сайта Написать письмо