Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Проблемы со сворачиванием вторичных окон в панель задач   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.098 c
15-1273239416
Kerk
2010-05-07 17:36
2010.08.27
Да здравствует копирайт!


15-1267479001
Юрий
2010-03-02 00:30
2010.08.27
С днем рождения ! 2 марта 2010 вторник


4-1234757954
spkors
2009-02-16 07:19
2010.08.27
сообщения Windows и Hooks


2-1269347442
12
2010-03-23 15:30
2010.08.27
Выделяю память. Освобождать Пушкин или сам?


2-1274384328
pro_xaoc
2010-05-20 23:38
2010.08.27
Ошибка с процедурой