Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.062 c
15-1272037354
D23
2010-04-23 19:42
2010.08.27
Начать изучение Delphi


2-1271231298
Анна
2010-04-14 11:48
2010.08.27
sp_help доступ к данным второго recordset


15-1269420643
Sergey2
2010-03-24 11:50
2010.08.27
формат с разделителями


15-1271190602
Юрий
2010-04-14 00:30
2010.08.27
С днем рождения ! 14 апреля 2010 среда


15-1268222361
@!!ex
2010-03-10 14:59
2010.08.27
Самый быстрый C++ компилятор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский