![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программная установка события у компонента.... [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 - в этом месте выпадает ошибка, каким образом произвести установку обработчика?