Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2016, 18:10   #1
Winexcel
Форумчанин
 
Регистрация: 26.08.2013
Сообщений: 187
По умолчанию Зависание формы при обращении к методу из другого компонента

Привет! Давно борюсь с такой проблемой как нарушение доступа или полное зависание формы(либо вываливание каких либо ошибок связанных с ограничением доступа), хотелось бы разобратся почему я не могу вызывать код создания какого либо VCL объекта за пределами формы, при этом обращаясь точно по нужному методу, и с уверенностью 100%-ой что ссылка на метод правильная, есть след код:

Код:
TForm_record_builder= class(TForm)
...
 procedure Add();
Procedure Add() - добавляет какой-либо визуальный объект на форму, допустим что TPanel, если я вызываю это процедуру с самой формы, например кликом по кнопке TButton(onclick event), то все работает хорошо, но если я вызываю эту процедуру из vcl компонента по событию, например по событию OnDblClick, то форма зависает(на форме видна отрисовка объекта, но на этом все), я понимаю что проблема как-то связана с потоком, метод вызывается не из главного потока, synchronize использовать вроде как нельзя из vcl компонента(имхо только для TThread и его потомков), единственное решение проблемы что я нашёл это - TTimer, он работает, потому что код выполняется в нужном потоке(потоке главной формы, если не прав то поправьте в данном месте ).
Вопрос состоит в следующем - как же правильно делать вызов таких методов если 100% все адреса переданы правильно?

Ещё добавлю - кроме таймера ещё можно использовать SendMessage, PostMessage, но это не облегчает процесс, нужно получать данные которые пришли из процедуры Add(это уже как дополнение, то есть функции или процедуры вызывать и получать от туда результирующие параметры)

Последний раз редактировалось Winexcel; 03.10.2016 в 18:19.
Winexcel вне форума Ответить с цитированием
Старый 04.10.2016, 11:12   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

так покажите ГДЕ поток пытается использовать этот самый add()
Я правильно понимаю, что сия процедура нужна для того чтобы ПОТОК "смог бы общаться" с формой.

Цитата:
Вопрос состоит в следующем - как же правильно делать вызов таких методов если 100% все адреса переданы правильно?
Ответ состоит в том что мы так и не поняли где и зачем используется данный метод и сама форма.
Все что здесь(твой пост) написано это Y. (см. Сагу ). чтобы ответить Z нам нужен X.

ответить Z.
http://programmersforum.ru/showthread.php?t=295305
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание при обращении делегата к удаленному объекту VS C++ CLI Lord_Alexandr Visual C++ 1 13.01.2016 01:19
Зависание при работе с HttpWebRequest при обращении к некоторым сайтам Mishiko C# (си шарп) 0 16.08.2012 12:24
при обращении с одной формы на другую вылетатет ошибка cowboy Общие вопросы Delphi 21 04.09.2009 14:25
зависание excel при постоянном обращении к ячейке iamaxl Microsoft Office Excel 1 07.07.2009 18:02