Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.10.2006, 16:16
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
Злость Application.Minimize не работает?!

Привет, проблема такова:

Есть форма, обычная такая, но без бордера: BorderStyle := bsNone (с другими бордерами тоже проблема такая же), есть панелька, на ней расположены две кнопки: закрыть и свернуть
При наджатии на закрыть все ок - вызывается метод Close для формы,
а вот при нажатии на свернуть, происходи нечто непонятное:
Код на кнопке такой :

Код:
procedure BtnOnClick...
begin

   Application.Minimize;

end;
Этот код не работает
Пробовал
Код:
ShowWindow(Handle,SW_MINIMIZE);
и
Код:
ShowWindow(Handle,SW_MINIMIZED);
В обоих случаях окно сворачивается, но не так, как надо (остается в левом нижнем углу маленький заголовок с названием программы и только при двойном клике на нем программа разворачивается)
Пробовал
Код:
SendMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);
Вообще никакого эффекта, наверное из-за того, что не работает
Код:
SendMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);
не работает и Application.Minimizе, т.к. в теле ApplicationMinimize присутствует такая вещь:
Код:
DefWindowProc(FHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
и во время отладки именна она и вызывалась...
Вобщем, если кто знает, подскажите, как апишными методами нормально свернуть окно не используя SC_MINIMIZE.

Спасибо.
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
  #2  
Старый 26.10.2006, 22:59
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Странно, у меня Application.Minimize работает нормально, какой бы бордер у формы ни был...
Ответить с цитированием
  #3  
Старый 27.10.2006, 11:11
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

В том-то и проблема,что я создал пустой проект, настроил в нем форму абслоютно так же, как и в том, в котором не работает Application.Minimize, и все работает.
Если ставлю у той формы бордер обычный,то все нормально сворачивается (только кнопкой на виндовзком бордере, моей кнопкой не сворачиватся) =(
Это какой-тотсранный баг с Delphi, похоже, т.е. в том проекте не работает именно API функция, которая используется с SC_MINIMIZE.
Вот я и думаю, есть ли какой альтернативный путь свернуть окно?
Уже второй день мучаюсь, надеюсь, кто-нибудь поможет!
Спасибо!
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
  #4  
Старый 27.10.2006, 11:48
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Спасибо, Decoding, что отозвался, хоть не проигнорил. Хотел тебе повысить репутацию, но она не повышается=(
Вобщем ясам разобралсяс косяком,так и не поняв почему он был.
Создал пустой проект,скопировализглючного в него все контролы иту самую кнопку, что не пахала, и создал еще одну кнопку - новую,на нее повесил код Application.Minimize. Так вот, после переноса всех контролов в новом проекте сворачивание по тойстарой кнопке тоже перестало работать!!! Я попробовал свернуть по новой кнопке (вэтих кнопках - код одинаковый 1 в 1 - Application.Minimize) и свернулось!!! И тут я понял, что не работает только почему-то обработчик старой кнопки (хотя все бряки сраотали вполнеуспешно, даже трэйсил внутрь дельфового кода, что свидетельствовало о том, что компилер не заигнорил обработчик старой кнопки и исправно его выполнял). Поставил таймер с задержкой 1мс и при нажатии на старую кнопку врубаю этот таймер, в котором такой код:

Timer.Enabled := False
Application.Minimize;

И все заработало, хоть и криво, но без глюков....
Жаль, конечно, что я так и не понял, в чем жеименноыла проблема.
Да и ладно =)

PS
А что, репутация не работает чтоли?
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
  #5  
Старый 27.10.2006, 13:22
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Возможная причина в следующем (сам сталкивался). После двойного клика на кнопке Delphi автоматически создает обработчик OnClick, который ты можешь наблюдать на вкладке Events в инспекторе объектов. Теперь, если удалить это событие из Events (Button1Click), то кнопка перестает выполнять это действие, несмотря на то, что в инспекторе кода присутствует код обработки OnClick для этой кнопки.

Скорее всего, каким-то образом (уж не знаю каким), произошло именно это, то есть из Events исчез обработчик OnClick для кнопки.
Ответить с цитированием
  #6  
Старый 27.10.2006, 13:48
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Не, таких ошибок я не допускаю уже (раньше мог).
Дело в том, что эта кнопка находится в ActiveX компоненте (TShockwaveFlash).

Опишу: Есть, допустим, пустая форма (без бордера), на нее располагаем два элемента управления: Button1(TButton) и Flash(TShockwaveFlash).

Флэшка - это две кнопки: свернуть и закрыть.
Сделана в Macromedia Flash'е.
Там на нажатия этих кнопок такие коды:

для свернуть:

...
fscommand('appmini')
...

для закрыть:

...
fscommand('appexit')
...

Код для события OnShow для формы:

Flash.Movie := MainForm.sAppPath + 'Data\buttons.swf';

Код для собыия OnClick для Button1:

Application.Minimize

Код события fscommand для Flash:

procedure TMain.FlashFSCommand(ASender: TObject; const command, args: WideString);
begin
if command = 'appmini' then
begin
Application.Minimize;
ShowMesage(command);
//MinTimer.Enabled := True;
end
else if command = 'appexit' then
Close;
end;

Так вот, при нажатии на Button1, окно сворачивается.
При нажатии на кнопку закрыть из флэшки окно закрывается
При нажатии на кнопку свернутьиз флэшки, показывается пустое сообщение ибольше ничего не происходит (а ведь форма должна была свернуться!)

Вощем пока решил проблему, как и описывал раньше, хоть и криво, но, главное, работает =)

Еще раз спасибо, Decoding за проявленное участие и интерес.

PS
Так что с репутацией?
Она работает или нет? Или это только у меня она не работает?
Попробовал снова добавить отзыв для Decoding, но
"Вы должны добавить отзыв кому-то еще, прежде чем сможете снова добавить ее Decoding."
Сорри за оффтоп.
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
  #7  
Старый 27.10.2006, 16:50
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Не уверен, но попробуй написать так:
Код:
 
procedure TMain.FlashFSCommand(ASender: TObject; const command, args: WideString);
var
  cmd: string;
begin
   cmd := command;
   case cmd[4] of
      'm': begin
         Application.Minimize;
         ShowMesage(command);
      end;
      'e': Close;
   end;
end;
Ответить с цитированием
  #8  
Старый 31.10.2006, 13:11
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Спасибо, но не сработало, так что оставил я свой кривой выход из положения через таймер (
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter