Запрет создания больше одного окна
От: in7rude  
Дата: 26.04.05 09:24
Оценка:
Доброго времрени суток!!!

Есть МДИ форма, на которой создаются дочерние формы. Как сделать, чтобы
можно было открыть не больше одного экземпляра каждого окна.

Заранее благодарен.
Posted via RSDN NNTP Server 1.9
Re: Запрет создания больше одного окна
От: Drago Россия  
Дата: 26.04.05 09:27
Оценка:
Здравствуйте, in7rude, Вы писали:

I>Доброго времрени суток!!!


I>Есть МДИ форма, на которой создаются дочерние формы. Как сделать, чтобы

I>можно было открыть не больше одного экземпляра каждого окна.

перебрать окна и проверить какого класса екземпляры уже открыты. если окно нужного класса уже создано не создавать второго
Re[2]: Запрет создания больше одного окна
От: in7rude  
Дата: 26.04.05 09:29
Оценка:
Если можно, приведите пример кода
Posted via RSDN NNTP Server 1.9
Re[3]: Запрет создания больше одного окна
От: Drago Россия  
Дата: 26.04.05 09:37
Оценка:
Здравствуйте, in7rude, Вы писали:

I>Если можно, приведите пример кода

что-то навроде такого
function IsWindowClassOpen(WindowClass : TClass):boolean
var
  I: Integer;
begin
  Result:=False;
  with Form1 do
    for I := MDIChildCount-1 downto 0 do
      if MDIChildren[I] is WindowClass then
      begin
        Result:=True;
        break;
      end; 
end;
Re[4]: Запрет создания больше одного окна
От: Drago Россия  
Дата: 26.04.05 09:41
Оценка:
Здравствуйте, Drago, Вы писали:

D>что-то навроде такого

D>
D>      if MDIChildren[I] is WindowClass then
D>

тут кстати может быть косяк. IS сработает и в том случае если окно класса WindowClass, И в случае, если это потомок WindowClass. для вящей точности это можно проверить с помощью InheritesFrom
Re: Запрет создания больше одного окна
От: wildwind Россия  
Дата: 26.04.05 10:22
Оценка:
Здравствуйте, in7rude, Вы писали:

I>Доброго времрени суток!!!


I>Есть МДИ форма, на которой создаются дочерние формы. Как сделать, чтобы

I>можно было открыть не больше одного экземпляра каждого окна.

Я в свое время применил следующий подход.

Создается список из описателей дочерних форм. Описатель формы содержит имя, класс, указатель на экземпляр (^TForm), связанный с формой Action. При старте программы этот список заполняется, но сами формы не создаются. Далее, определяются функции для показа конкретной формы; форма может быть найдена как по имени, так и по Action'у. Если экземпляр еще не создан, он создается; если уже есть, то просто показывается. В общем, такая фабрика объектов.

Можно конечно и код привести, но надо же что-то и самому делать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.