Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.01.08;
Скачать: [xml.tar.bz2];

Вниз

Узнать какой из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
2-1317593235
я
2011-10-03 02:07
2012.01.08
Как сделать множественный фильтр с использованием ClientDataSet


2-1317480831
Mishanja
2011-10-01 18:53
2012.01.08
Выделение строки в ListView


2-1317290569
я
2011-09-29 14:02
2012.01.08
ClientDataSet как записать произвольный массив в базу данных (cds


2-1310979425
D_2010
2011-07-18 12:57
2012.01.08
Как обработать приход нескольких одинаковых TMessage как одно?


2-1317392685
Сергей
2011-09-30 18:24
2012.01.08
Как выполнить репликацию Access c помощью Delphi?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский