Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.08;
Скачать: CL | DM;

Вниз

Узнать какой из WebBrowser вызвал процедуру   Найти похожие ветки 

 
Vladimir ©   (2011-09-28 00:29) [0]

Здравствуйте! Есть несколько экземпляров WebBrower на форме во вкладках PageControl. Действия с ним происходят одинаковые и чтобы не плодить код сделал следующее:

procedure TPWM_MainForm.WS_W1DocumentComplete(ASender: TObject;
 const pDisp: IDispatch; var URL: OleVariant);
//переменные
var num: integer; str: string;
begin
//вытаскиваем номер браузера
str := TWebBrowser(ASender).Name;
num := StrToInt(copy(str, 5, Length(str)))
//если идет начальная загрузка или перезагрузка
if WorkState=wsLoad then begin
 //если загрузилась, то
 if (DownLoadFlag[num]=true)
   then begin
     //визуализируем
     WorkStatus_PB.Position := WorkStatus_PB.Position + 1;
     //если нужно, то
     if RememberMe_CB.Checked then
      begin
       //заполняем поля
       FillForm(TWebBrowser(ASender), FieldLogin[num-1],
            String(Accounts[num-1].Login));
                     FillForm(TWebBrowser(ASender),  FieldPass[num-1],
                                                String(Accounts[num-1].Pass));
      end;
     //загрузка окончена
     DownLoadFlag[num] := false;
     //переходим к следующему окну
     Work_PC.SelectNextPage(true);
   end;
end;
end;

Но вот проблема... TWebBrowser(ASender).Name имеет значение "Элемент управления обозревателя Microsoft". А каким образом мне получить name именно WebBrowser? То есть WS_W1 или WS_2 и т.д.? Подскажите пожалуйста!

P.S. Использую Delphi 2009


 
Германн ©   (2011-09-28 00:54) [1]


> Но вот проблема... TWebBrowser(ASender).Name имеет значение
> "Элемент управления обозревателя Microsoft". А каким образом
> мне получить name именно WebBrowser? То есть WS_W1 или WS_2
> и т.д.?

Не надо путать имена переменных со свойством TControl.Name.

В рантайме этих имён нет!


 
Германн ©   (2011-09-28 01:04) [2]


> Не надо путать имена переменных со свойством TControl.Name.

Пардон. Свойство Name - это свойство TComponent. Но это не так важно.


 
Vladimir ©   (2011-09-28 01:23) [3]


> Германн

А как тогда быть?


 
Vladimir ©   (2011-09-28 01:24) [4]


> Германн

Спасибо)


 
Vladimir ©   (2011-09-28 01:25) [5]

Сделал) TComponent(ASender).Name ))) Ночью просто плохо соображается)


 
Германн ©   (2011-09-28 02:01) [6]


> А как тогда быть?
>

Прочитать учебник и написать прогу самому.
Или прочитать учебник и полностью разобраться с данным кодом, найденным неизвестно где и подделать его под ваши нужды.!
Это уже на ваше усмотрение.

P.S.
Если не сможете "сдать учебное задание", то вам лучше уйти в дворники!


 
Vladimir ©   (2011-09-28 02:18) [7]


> Прочитать учебник и написать прогу самому.

Так я её сам и пишу.

> Если не сможете "сдать учебное задание", то вам лучше уйти
> в дворники!

Это не тестовое задание я пишу для себя и возможно пользователей некоторых сайтов, если конечно получится сделать программу, которая все же удовлетворит пользователей.

> Или прочитать учебник и полностью разобраться с данным кодом,
>  найденным неизвестно где и подделать его под ваши нужды.
> !

Всмысле найденным неизвестно где? Я его сам писал)


 
DiamondShark ©   (2011-09-28 11:01) [8]


> Действия с ним происходят одинаковые и чтобы не плодить
> код сделал следующее:

Это правильный ход мысли.


> str := TWebBrowser(ASender).Name;
> num := StrToInt(copy(str, 5, Length(str)))

А это неправильный ход мысли.

У всех компонентов есть свойство Tag. Оно доступно в дизайн-тайм, и предназначено именно для хранения расширенной пользовательской информации. Так что переписываем:

// str := TWebBrowser(ASender).Name;
num := TWebBrowser(ASender).Tag; //StrToInt(copy(str, 5, Length(str)))

И получаем полную независимость от имен компонентов. Теперь у нас в коде нет паразитных зависимостей и мы можем делать всё, что угодно: рефакторить код, переименовывать компоненты, удалить их нафиг, добавить ещё сколько угодно (в том числе динамически!) и т.д., не боясь, что от какого-то изменения сломается говнокод в другом месте.


 
Vladimir ©   (2011-09-28 16:20) [9]


> DiamondShark

Спасибо большое про свойство Tag я и не помнил вообще. С ним намного удобнее.


 
DiamondShark ©   (2011-09-29 12:02) [10]

Следующий логичный шаг -- это создать класс (наследник TWebBrowser или агрегат с TWebBrowser), инкапсулирующий всю требуху, вроде FieldLogin, Accounts и т.п.
Тогда вообще никаких индексов не надо, а достаточно будет ссылки на экземпляр, которая всегда в нужном месте доступна.



Страницы: 1 вся ветка

Текущий архив: 2012.01.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
15-1315398270
Empleado
2011-09-07 16:24
2012.01.08
Конец OLE DB


4-1253715907
trix
2009-09-23 18:25
2012.01.08
Как послать нажатие клавиши F2 а затем клавишу "A"


15-1316516688
KSergey
2011-09-20 15:04
2012.01.08
Как организована продажа игровых артефакт, "вирт. валюты сайтов"


3-1269608174
mefodiy
2010-03-26 15:56
2012.01.08
MySQL запрос


2-1317631902
alexdn
2011-10-03 12:51
2012.01.08
Разложить строку посимвольно