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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.05 c
1-1152272654
Stanislav
2006-07-07 15:44
2006.08.20
Определить наличие процесса в памяти


15-1153331373
Юрий Зотов
2006-07-19 21:49
2006.08.20
Что Вы думаете о буквоедах?


3-1150177063
Layner
2006-06-13 09:37
2006.08.20
Locate на 2 поля, возможно?


15-1153309380
Vudu
2006-07-19 15:43
2006.08.20
Старый комп + винт на 250 Гб


1-1152186760
Oleon
2006-07-06 15:52
2006.08.20
Компонент: панель с кнопками открытых MDI окон.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский