Доброго времрени суток!!!
Есть МДИ форма, на которой создаются дочерние формы. Как сделать, чтобы
можно было открыть не больше одного экземпляра каждого окна.
Заранее благодарен.
Posted via RSDN NNTP Server 1.9
Если можно, приведите пример кода
Posted via RSDN NNTP Server 1.9
Здравствуйте, 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;
Здравствуйте, Drago, Вы писали:
D>что-то навроде такого
D>D> if MDIChildren[I] is WindowClass then
D>
тут кстати может быть косяк. IS сработает и в том случае если окно класса WindowClass, И в случае, если это потомок WindowClass. для вящей точности это можно проверить с помощью InheritesFrom
Здравствуйте, in7rude, Вы писали:
I>Доброго времрени суток!!!
I>Есть МДИ форма, на которой создаются дочерние формы. Как сделать, чтобы
I>можно было открыть не больше одного экземпляра каждого окна.
Я в свое время применил следующий подход.
Создается список из описателей дочерних форм. Описатель формы содержит имя, класс, указатель на экземпляр (^TForm), связанный с формой Action. При старте программы этот список заполняется, но сами формы не создаются. Далее, определяются функции для показа конкретной формы; форма может быть найдена как по имени, так и по Action'у. Если экземпляр еще не создан, он создается; если уже есть, то просто показывается. В общем, такая фабрика объектов.
Можно конечно и код привести, но надо же что-то и самому делать