Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];

Вниз

Два вопроса на разные темы.   Найти похожие ветки 

 
R   (2003-02-25 01:43) [0]

1.Кидаю иконку при создании окна в трей использую код который здесь неоднократно приводил Юрий Зотов поэтому я его не привожу.Затем я ее убираю из трея командой из того же кода
.....(NIM_Delete,@FIconData) так вот иконка удаляется но главное оконо программы теперь при минимизации сворачивается не на пвнель задач а в угол экрана в маленькое окно как сворачиваются не главные окна. Вопрос- как свернуть его именно на панель задач.
2.Мне надо чтобы при нажатии на кнопу-закрыть находящуюся в верхнем правом углу окна (X) окно не закрывалось бы а минимизировалось, то есть надо перехватить команду закрытия и заменить ее командой минимизации.


 
Palladin   (2003-02-25 01:55) [1]

разная тема №2
вот это добавь в описание главной формы

procedure WMGetSysCommand(var Message: TMessage); message WM_SYSCOMMAND;

и соотвессно

procedure TForm1.WMGetSysCommand(var Message: TMessage);
begin
if (Message.WParam=SC_MINIMIZE) or
(Message.WParam=SC_Close) then
begin
Application.Minimize;
end else Inherited;
end;


 
R   (2003-02-25 03:42) [2]

>Palladin ©
У меня в описании уже находится процедура
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
Когда я добавляю
procedure WMGetSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
пишет
[Ошика] Sypnt_m.pas(251): Duplicate message method index
[Фотальная Ошибка] Sypnt_m.pas(8): Could not compile used unit "Sypnt_m"
Убираю message WM_SYSCOMMAND; Все проходит без ошибок но вот форма
при нажатии кнопки закрыть исчезает вроде как сворачиваясь но
на самом деле приложение закрывается. Написал сумбурно но надеюсь
Вы меня поняли.





 
Nemo   (2003-02-25 03:47) [3]

Попробуй так.

procedure WMSYSCOMMAND(var Msg: TMessage); message WM_SYSCOMMAND;

procedure TForm1.WMSYSCOMMAND(var Msg: TMessage);
begin
if Msg.WParam = SC_CLOSE then
SendMessage(Form1.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0)
else inherited;
end;


 
R   (2003-02-25 04:04) [4]

>Nemo ©
Пишет такую ошибку
[Ошика] Sypnt_m.pas(2782): Undeclared identifier: "WParam"
[Warning] Sypnt_m.pas(2782): Comparison always evaluates to False
[Фотальная Ошибка] Sypnt.dpr(16): Could not compile used unit "Sypnt_m.pas"


 
R   (2003-02-25 04:13) [5]

>Nemo ©
Работае только я переделал его немного(WParam на CmdType)
if Message.CmdType = SC_CLOSE then
SendMessage(Form1.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0)
else inherited;
Palladin © тоже дал верный код только надо было кое что в моей
проге изменить.


 
R   (2003-02-25 04:14) [6]

>Nemo ©
Работае только я переделал его немного(WParam на CmdType)
if Message.CmdType = SC_CLOSE then
SendMessage(Form1.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0)
else inherited;
Palladin © тоже дал верный код только надо было кое что в моей
проге изменить.

Остается открытой первая часть вопроса.


 
Юрий Зотов   (2003-02-25 05:04) [7]

Вот код. Кнопка переключает поведение программы (Tray-обычная),
а цвет показывает ее текущее поведение (красный-обычная, зеленый-Tray). Как видите, этот код практически ничем не отличается от исходного.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Forms, Graphics, ShellAPI, Menus, Controls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FIconData: TNotifyIconData;
FIsTrayApp: boolean;
protected
procedure WndProc(var Message: TMessage); override;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

const
UM_TRAY = WM_USER + 1;
Colors: array[boolean] of TColor = (clRed, clGreen);

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
with FIconData do
begin
cbSize := SizeOf(FIconData);
Wnd := Handle;
uID := 100;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage := UM_TRAY;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, Application.Title)
end;
Application.ShowMainForm := False;
Shell_NotifyIcon(NIM_ADD, @FIconData);
FIsTrayApp := True;
Color := Colors[FIsTrayApp]
end;

procedure TForm1.WndProc(var Message: TMessage);
begin
if FIsTrayApp then
case Message.Msg of
WM_SYSCOMMAND:
if (TWMSysCommand(Message).CmdType and $FFF0 = SC_MINIMIZE) or
(TWMSysCommand(Message).CmdType and $FFF0 = SC_CLOSE) then
begin
Shell_NotifyIcon(NIM_ADD, @FIconData);
Application.MainForm.Visible := False
end
else inherited;
UM_TRAY:
if Message.LParam = WM_LBUTTONDBLCLK then
begin
Application.MainForm.Visible := True;
ShowWindow(Application.Handle, SW_HIDE);
Shell_NotifyIcon(NIM_DELETE, @FIconData)
end;
else inherited
end
else inherited
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FIsTrayApp := not FIsTrayApp;
Color := Colors[FIsTrayApp];
if not FIsTrayApp then Shell_NotifyIcon(NIM_DELETE, @FIconData)
end;

end.

P.S.
> All (на будущее)


При проверке параметра uCmdType в WM_SYSCOMMAND нужно учитывать, что (цитата из справки):
"In WM_SYSCOMMAND messages, the four low-order bits of the uCmdType parameter are used internally by Windows. To obtain the correct result when testing the value of uCmdType, an application must combine the value 0xFFF0 with the uCmdType value by using the bitwise AND operator".

Пример корректной проверки см. выше.


 
R   (2003-02-25 08:58) [8]

>Юрий Зотов ©
Спасибо за комплексный ответ.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
7-17428
Лемур
2003-01-07 07:06
2003.03.06
USB-диск


1-17008
Nemo
2003-02-21 02:08
2003.03.06
Помогите, пожалуйста!


1-17000
Михась
2003-02-24 21:57
2003.03.06
поиск файла по всем каталогам данного диска


9-16844
greenrul
2002-10-09 13:49
2003.03.06
Динамическая загрузка wav в WaveList:


14-17280
panov
2003-02-03 20:11
2003.03.06
Регистрация в Питере





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский