Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
 Re: Блокировка запуска второй проги.  [new]
Aleksandr_V
Member

Откуда:
Сообщений: 223
_Vasilisk_
Aleksandr_V
Заголовки окон именуются из поля таблицы, данные которой отображены в гриде.
Aleksandr_V
Например в гриде 500 записей плюс применение фильтров, которое тоже меняет количество стро
Определитесь все таки, что Вам нужно


Мне нужна проверка при создании формы - если форма для объекта существует, то ее нужно вытянуть на передний план. Это нужно для грида и для DBTreeView. В таблице из которой заполняются DBGrid и DBTreeView есть поле NAME, из которого присваиваются заголовки форм. Эта же таблица подключена через DataSet к DBTreeView и DBGrid двойной щелчок по которым открывает те самые формы. В DBTreeView поле NAME составляет название узлов (но это сути не меняет). Форм может быть одновременно открыто любое количество, но чтобы все они были в единственном экземпляре. Например как в IBExpert. В нем можно открыть кучу форм свойств каких то объектов, но для каждого объекта форма будет единственная. У меня фантазии или ума не хватает как это можно реализовать).
14 май 15, 07:14    [17637635]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
Aleksandr_V
Member

Откуда:
Сообщений: 223
В интернете множество примеров с различными методами для проверки - не запущен ли экземпляр программы. А вот на счет блокировки запуска одинаковых дочерних форм в интернете вроде ничего нет. Для блокировки повторного запуска приложения например я использую mutex, но прикрутить его к проверке форм, которых может быть много, у меня рука не поднимается). Это нужно где то целый генератор уникальных имен держать). Я даже и не пробовал).
14 май 15, 07:21    [17637641]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
goldmi45
Member

Откуда:
Сообщений: 1054
Aleksandr_V, вот не пойму, зачем пользоваться FindWindow, если можно добавлять в TList (TObjectList) указатели на создаваемые формы, а их искать не по заголовку, а по идентификатору.
14 май 15, 07:56    [17637667]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
Aleksandr_V
Member

Откуда:
Сообщений: 223
goldmi45
Aleksandr_V, вот не пойму, зачем пользоваться FindWindow, если можно добавлять в TList (TObjectList) указатели на создаваемые формы, а их искать не по заголовку, а по идентификатору.


Я согласен что FindWindow не лучший вариант. Подскажите пожалуйста как реализовать с TList.
14 май 15, 10:14    [17638141]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24489
Aleksandr_V
goldmi45
Aleksandr_V, вот не пойму, зачем пользоваться FindWindow, если можно добавлять в TList (TObjectList) указатели на создаваемые формы, а их искать не по заголовку, а по идентификатору.


Я согласен что FindWindow не лучший вариант. Подскажите пожалуйста как реализовать с TList.

На кой все усложнять? (список форм и так уже имеется в Screen).

В каждом модуле с формой есть переменная, которая содержит ссылку на окно. Если она nil, то окна нет и нужно его создавать, если окно есть, но просто показывать его.
14 май 15, 10:20    [17638171]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
Aleksandr_V
Member

Откуда:
Сообщений: 223
wadman
Aleksandr_V
пропущено...


Я согласен что FindWindow не лучший вариант. Подскажите пожалуйста как реализовать с TList.

На кой все усложнять? (список форм и так уже имеется в Screen).

В каждом модуле с формой есть переменная, которая содержит ссылку на окно. Если она nil, то окна нет и нужно его создавать, если окно есть, но просто показывать его.


А если формы создаются динамически Form1 := TForm1.Create(Form1), переменная ведь каждый раз будет меняться при создании окна если я правильно понимаю о чем вы.
14 май 15, 10:54    [17638330]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
goldmi45
Member

Откуда:
Сообщений: 1054
Aleksandr_V
goldmi45
Aleksandr_V, вот не пойму, зачем пользоваться FindWindow, если можно добавлять в TList (TObjectList) указатели на создаваемые формы, а их искать не по заголовку, а по идентификатору.


Я согласен что FindWindow не лучший вариант. Подскажите пожалуйста как реализовать с TList.


Согласен с wadman. Вам просто нужно в форму добавить свойство (к примеру ID). А поиск осуществлять перебором по Screen.Forms[] с проверкой, является ли форма экземпляром искомого класса и с искомым значением свойства.

to wadman: Как я понял, ТСу нужно несколько экземпляров одной и той же формы.
14 май 15, 10:59    [17638363]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
goldmi45
Member

Откуда:
Сообщений: 1054
Aleksandr_V
А если формы создаются динамически Form1 := TForm1.Create(Form1), переменная ведь каждый раз будет меняться при создании окна если я правильно понимаю о чем вы.


форму можно создать и так:
with TForm1.Create(Application) do
, без присвоения переменной, либо присвоив значение локальной переменной процедуры (для удобства).
ЗЫ: не помню, Application вроде не подчищает за собой. Тогда можно в качестве Parent'а использовать главную форму - она освободит занятые ресурсы.
14 май 15, 11:05    [17638406]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24489
goldmi45
Вам просто нужно в форму добавить свойство (к примеру ID).

Tag и так уже есть.
14 май 15, 11:05    [17638412]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
goldmi45
Member

Откуда:
Сообщений: 1054
wadman
goldmi45
Вам просто нужно в форму добавить свойство (к примеру ID).

Tag и так уже есть.

Согласен. Но Tag не всегда удобен. Может, нужно хранить слово или GUID....
14 май 15, 11:08    [17638432]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10598
goldmi45
Может, нужно хранить слово или GUID....
TTagGUID = class
  Value: TGUID;
end;
14 май 15, 13:13    [17639254]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка запуска второй проги.  [new]
Aleksandr_V
Member

Откуда:
Сообщений: 223
goldmi45
Aleksandr_V
пропущено...


Я согласен что FindWindow не лучший вариант. Подскажите пожалуйста как реализовать с TList.


Согласен с wadman. Вам просто нужно в форму добавить свойство (к примеру ID). А поиск осуществлять перебором по Screen.Forms[] с проверкой, является ли форма экземпляром искомого класса и с искомым значением свойства.

to wadman: Как я понял, ТСу нужно несколько экземпляров одной и той же формы.


Да, у меня есть форма-шаблон с кучей контролов, экземпляры которой создаются при выборе определенной строки таблицы бд. Формы именуются в соответствии с полем NAME той же таблицы. Я хотел искать заголовки при помощи FindWindow.

Получается мне нужно где то хранить искомые значения для всех созданных форм (Id или еще что), потом, до динамического создания нового экземпляра формы пробежаться по Screen.Forms[] и сравнить все хранимые Id с уже созданными экземплярами форм. Если ничего не найдено, разрешить создание формы.. Искомое значение конечно должно быть не ссылкой на новую форму, а свое. Сейчас попробую сообразить что то.
14 май 15, 13:28    [17639365]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
Все форумы / Delphi Ответить