На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> События, вызов другого события , потоки и события
    Подскажите пожалуйста.
    Создаётся компонент потомок TComponent, у которого есть событие,
    в нем активизируетсся поток у которого тоже есть событие. то как сделать что бы при возникновении события у потока активизировалось событие у компонента при этом важно чтобы потом поток возобновил работу.
      Цитата V_L @
      возникновении события у потока активизировалось событие у компонента

      присвоить событию потоку обработчик, в котором вызывать событие компоннета.
      Цитата V_L @
      чтобы потом поток возобновил работу.

      а что в твоей теущей реализации он не возобнавляет работу?
      ты лудше обрати внимание в контексе какого потока вызываются все эти события..
        1. Унаследовать компонент от TWinControl.
        2. Завести новое сообщение виндовс, допусти WM_MY_MESSAGE = WM_USER + 2005.
        3. Написать обработчик сообщения для этого компонента. Примерно так
        ExpandedWrap disabled
            // Объявление
            procedure OnMyMsg(var Msg: TMessage); message WM_MY_MESSAGE;
           
            // Многое пропущенно
           
            // Реализация
          procedure TMyComponent.OnMyMsg(var Msg: TMessage);
          begin
            
          end;

        4. При создании потока каким-либо образом передать ему хэндл нашего компонента.
        5. При возникновении нужного события в потоке вызвать следующую конструкцию:
        ExpandedWrap disabled
            // Тут что-то произошло
            PostMessage(Handle, WM_MY_MESSAGE, 0, 0);

        Так как PostMessage - функция асинхронной передачи сообщений, поток спокойно продолжит свою работу.
          Спасибо за совет.
          Но поток создаётся в коде этого компонента и при посылке самому себе сообщения, пишет
          "Инструкция обратилась к 0000000 память не может читаться"
            Можно взглянуть на кусок кода, создающий поток, и на тот, в котором происходит посылка сообщения?
              Был вероятно глюк, сейчас все работает.
              Почему не понятно(в смысле глюка).
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0491 ]   [ 16 queries used ]   [ Generated: 24.04.24, 14:25 GMT ]