Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизПроблемы со сворачиванием вторичных окон в панель задач Найти похожие ветки
← →
GoTo © (2010-02-21 05:07) [0]Приветствую! У меня такая проблема: есть программа, с несколькими формами. Между ними можно переключаться, однако у втроричных форм в панели задач не появляется название т.е кнопка окна пустая, видна только иконка, а если это окно свернуть, то восстановить программу из свернутого положения невозможно - только закрывать. Пробовал исправить это несколькими описанными здесь способами, однако тогда почемуто при сворачивании вторичной формы появляется две кнопки окна - одна пустая как и рашьше, а другая совершенно нормальная (т.е. можно скрывать\востстанавливать, видно название формы и значок). Пожалуйста подсткажите что делать, т.к. если в ПЗ будут постоянно висеть две кнопки будет некрасиво, а если окно невозможно будет восстановить - обидно. Пишу под Delphi2007.
← →
Юрий Зотов © (2010-02-21 11:24) [1]Странный результат. Если все делается правильно, то такого быть не должно. Приводите код или попробуйте в CreateParams включить расширенный стиль WS_EX_APPWINDOW.
← →
GoTo © (2010-02-21 13:02) [2]Код для переключения форм использую такой
procedure TBDB.N4Click(Sender: TObject);
begin
BDB.Hide;
SDB.Show;
end;
От использования вместо Show ShowModal ничего не меняется.
> Приводите код или попробуйте в CreateParams включить расширенный
> стиль WS_EX_APPWINDOW.
Если вы имеете код типа
procedure TMyForm.CreateParams(var Params :TCreateParams); override;
begin
inherited CreateParams(Params); {CreateWindowEx}
Params.ExStyle := Params.ExStyle or WS_Ex_AppWindow;
end;
то такая же простите, фиговина получается. Что делать?
← →
KilkennyCat © (2010-02-21 13:17) [3]а разве у вторичных форм должно выскакивать еще панель в задачах?
В любом случае, результат действительно странный.
Я так понимаю, приложение обычное, не MDI?
И гляньте файл проекта.
← →
GoTo © (2010-02-21 14:04) [4]Просто хочется чтобы если человек переключился из одного окна программы на другое (у меня например 3 "функциональных" окна - окно просмотра, окно редактора и окно поиска) то в панели задач соответственно поменялось название кнопки например с "MyProg" на "Editor". А почемуто кнопки пустые, и не равзворачиваются, если приложение свернуть (при этом если перключиться в главное окно, то все отображается и сворачивается/разворачивается, опять на вторичное - теже грабли). Приложение стандартное не MDI, и что мне надо посмотреть в проекте, можете сказать поподробнее? Я уже извелся весь - диплом ведь. Хотца чтоб все в ажуре было.
← →
KilkennyCat © (2010-02-21 14:14) [5]
> можете сказать поподробнее?
гадать не хочу. такая связка как хайд и шоу уже напрягает, желания что-то менять в панели задач то же и кто знает, что там еще в обработчиках.. выложите куда-нить проект, зипованный, гляну.
← →
GoTo © (2010-02-21 14:31) [6]на депозитфайле
http://depositfiles.com/files/7z3ylx21z
← →
KilkennyCat © (2010-02-21 15:02) [7]
procedure TSDB.N4Click(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
SDB.Hide;
BDB.Show;
end;
непонятно, что это делает. Вы уверены, что нужен именно Hide, и что его нужно вызывать раньше, чем показать другую форму?
Та же фигня с закрытием. Вы закрываете текущую, а потом и остальные. Причем, в одной форме закрываются три, в другой - две... вероятно, считается, что последняя не может быть открыта, пока другие не открыты...
но все неважно, даже то, что в файле проекта прописано пять форм, а на самом деле три (правьте dpr) - что Вы хотите, когда ГЛАВНОЙ форме делаете Hide?
← →
GoTo © (2010-02-21 15:18) [8]
procedure TSDB.N4Click(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
SDB.Hide;
BDB.Show;
end;
честно этот код я взял с Delphi Russian Knowledge Base
И я сам не понимаю что он делает
Полностью он выглядит так:В модуле первого окна:
Code:
uses Unit2, Unit3;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
Form1.Hide;
Form2.Show;
Form3.Show;
end;
В модуле второго окна:
Code:
Uses Unit3;
{$R *.DFM}
procedure TForm2.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE,
GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Form3.Visible = false then
Application.Terminate;
end;
В модуле третьего окна:
Code:
uses Unit2;
{$R *.DFM}
procedure TForm3.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE,
GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
end;
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Form2.Visible = false then
Application.Terminate;
end;
Вы поймите я можно считать нуб в программировании
Вы мне пожалста можете дать какиенибудь практичные советы и указать на мои ошибки?
← →
KilkennyCat © (2010-02-21 15:29) [9]сначала все-таки логику. может ли пользователь открывать окна в произвольном порядке, или есть жесткое правило? Когда он поработал в одном окне, и закрыл его, при следующем открытии нужны ли данные предыдущей работы? и т.д.
← →
GoTo © (2010-02-21 15:58) [10]Открывать окна можно как угодно - т.е. из главного в поиск, из поиска в редактор и т.д. По идее данные предыдущей работы пользователю могут понадобиться только в окне поиска. Что можно сделать?
← →
KilkennyCat © (2010-02-22 03:18) [11]ну, чтобы не сильно переделывать проект, выкинуть все хайды-шоу, все! особенно эту фигню ShowWindow(Application.Handle, SW_HIDE)
вызов нужной формы делать через ShowModal, закрытие, соответственно, modalresult.
← →
GoTo © (2010-02-22 22:28) [12]Спасибо большое. Сейчас попробую.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.081 c