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

Вниз

Программная установка события у компонента....   Найти похожие ветки 

 
Lex_! ©   (2006-07-04 05:20) [0]

Имеется код:
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-04 05:22) [1]

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


 
Leonid Troyanovsky ©   (2006-07-04 07:18) [2]


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


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

--
Regards, LVT.


 
Lex_! ©   (2006-07-04 09:38) [3]

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


 
Reindeer Moss Eater ©   (2006-07-04 09:39) [4]

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


 
Lex_! ©   (2006-07-04 09:47) [5]

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

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


 
Reindeer Moss Eater ©   (2006-07-04 09:51) [6]

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


 
ЮЮ ©   (2006-07-04 09:54) [7]

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


 
Lex_! ©   (2006-07-04 09:57) [8]

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

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


 
Мефисто   (2006-07-04 09:58) [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 10:04) [10]

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


 
Lex_! ©   (2006-07-04 10:12) [11]

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


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

а в процедуре

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

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


 
Lex_! ©   (2006-07-04 10:30) [12]

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


 
ЮЮ ©   (2006-07-04 10:49) [13]

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

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


 
Lex_! ©   (2006-07-04 11:33) [14]

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


 
Lex_! ©   (2006-07-04 12:08) [15]

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

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


 
ЮЮ ©   (2006-07-05 04:50) [16]


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

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


 
Lex_! ©   (2006-07-05 05:13) [17]

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



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

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

Наверх




Память: 0.51 MB
Время: 0.09 c
15-1153583478
Nic
2006-07-22 19:51
2006.08.20
Мой первый проект под заказ


3-1150018686
cosmos
2006-06-11 13:38
2006.08.20
Как физически удалить записи из dbf?


4-1145516275
Dimich1978
2006-04-20 10:57
2006.08.20
Программно нажать на кнопку закрытия формы(крестик)


15-1153479703
ddddd
2006-07-21 15:01
2006.08.20
Относит ли кто-нибудь квитанции об оплате штрафов в ГАИ?


15-1153421716
Vendict
2006-07-20 22:55
2006.08.20
Клиент