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

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

Программная установка события у компонента.... [D7, WinXP]


Lex_! ©   (2006-07-04 05:20:00) 

Имеется код:
Function Twww_module.GenerateNewsContent:String;
var n:TStringList;
   s_news:TAdoQuery;
   ppNews:TPageProducer;

 procedure ppNewsHTMLTag(Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string);
 begin
    ReplaceText:=s_news.FieldByName(tagstring).AsString;
 end;

begin

 s_news:=TAdoQuery.Create(nil);
 s_news.Connection:=c_sibom;

 ppNews:=TPageProducer.Create(nil);
 ppNews.HTMLDoc.LoadFromFile(settings.Values['path']+'\'+settings.Values['tpath']+'\'+settings.Values['theme']+'\news.tpl');
 ppNews.OnHTMLTag:=ppNewsHTMLTag; // [Pascal Error] Unit1.pas(160): E2009 Incompatible types: 'method pointer and regular procedure'

 s_news.SQL.Clear;
 s_news.SQL.Add('SELECT     ts, title, text');
 s_news.SQL.Add('FROM       dbo.news');
 s_news.SQL.Add('ORDER BY ts DESC');

 n:=TStringList.Create;
 s_news.Open;
 s_news.First;
 while not s_news.Eof do
      begin
        n.Add(ppNews.Content);
        s_news.Next
      end;
 s_news.Close;
result:=n.Text;
n.Free;
s_news.Free;
end;


Lex_!   (2006-07-05 05:13:00) [1]

Потому и ЛОКАЛЬНО описывал ppNews, чтобы уничтожалось ВСЁ ... и ppNews и соответственно s_news ....


ЮЮ   (2006-07-05 04:50:00) [2]


> Так все равно вне функции будет ...

А толку, что от будет в функции. После завершкния метода s_news будет уничтожен, а обработчик OnHTMLTag у ppNews останется. И какой DataSet он будет юзать??? AV гарантировано.


Lex_!   (2006-07-04 12:08:00) [3]

var
 evhandler: TNotifyEvent;
 TMethod(evhandler).Code := @Click;
 TMethod(evhandler).Data := nil;
 Button1.OnClick := evhandler;

Теоретически мне надо вот это было ...
Пойду пробовать ...


Lex_!   (2006-07-04 11:33:00) [4]

Так все равно вне функции будет ...
Ладно, в принципе все понятно всем спасибо, будем копать дальше..


ЮЮ   (2006-07-04 10:49:00) [5]

Тогда и запрос выносить надо в глобальные  ...

А по чему не в приватные переменные Twww_module ?


Lex_!   (2006-07-04 10:30:00) [6]

т.е. локально это не сделать?...
Тогда и запрос выносить надо в глобальные  ...
Тогда не известно как он себя поведет при одновременном выполнении двух функций .. (мне неизвестно покрайней мере.. может и адекватно .. что не факт .. )


Lex_!   (2006-07-04 10:12:00) [7]

var n:TStringList;
s_news:TAdoQuery;
ppNews:TPageProducer;


вот это локальное .... то что подчеркнуто ...

а в процедуре

ReplaceText:= s_news.FieldByName(tagstring).AsString;

этот запрос используется для генерации контента... и если вынести эту процедуру за " Twww_module.GenerateNewsContent" то запроса видно не будет и не получится вообще что-то сгенерировать ...  что-то я зашол в тупик.. глобальный запрос мне не нужен ...


Lex_!   (2006-07-04 10:04:00) [8]

А куда мне такой вопрос задавать?.. в "Начинающим"? ...
Весь смысл почему процедура была локальная... потому что обращение к запросу идет (s_news) и если её описать вне этой процедуры то работать с этим запросом нельзя ...  т.е. не определенная переменная получается...


Мефисто   (2006-07-04 09:58:00) [9]

Lex _! ©   (04.07.06 09:47) [5]


>  каким образом реализовать метод


Метод некоего класса, например формы:

в public формы:
procedure ppNewsHTMLTag (Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string);

Реализация метода:
procedure TForm1.ppNewsHTMLTag (Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string);
begin
...
end;

Но в ветке основная, такие вопросы не задают :)


Lex_!   (2006-07-04 09:57:00) [10]

ppNews - внутрений объект, и если процедуру описать как внешнюю (вне этой процедуры где она сейчас описана) то не будет видно опять же локальный объект TAdoQuery ... а он должен быть именно локальным  ...

Или я чего то не понимаю, или одно из двух ...


ЮЮ   (2006-07-04 09:54:00) [11]

Function Twww_module.ppNewsHTMLTag(Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string);


Reindeer Moss Eater   (2006-07-04 09:51:00) [12]

все уже сказано.
видать тебе не сильно надо.


Lex_!   (2006-07-04 09:47:00) [13]

Подробнее в этом месте можно?
не доходит до меня... каким образом реализовать метод ... вроде как метод это процедура с заданными параметрами ...

ЗЫ - сильно не пинать, с этой проблемой столкнулся впервые..


Reindeer Moss Eater   (2006-07-04 09:39:00) [14]

реализовать метод.
назначить его.


Lex_!   (2006-07-04 09:38:00) [15]

Так вот каким образом это сделать?


Leonid Troyanovsky   (2006-07-04 07:18:00) [16]


> Lex_! ©   (04.07.06 05:22) [1]
> ppNews.OnHTMLTag:=ppNewsHTMLTag - в этом месте выпадает
> ошибка, каким образом произвести установку обработчика?


Назначить метод, а не регулярную процедуру?

--
Regards, LVT.


Lex_!   (2006-07-04 05:22:00) [17]

ppNews.OnHTMLTag:=ppNewsHTMLTag - в этом месте выпадает ошибка, каким образом произвести установку обработчика?


Наверх

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