
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.75] |
![]() |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Надо спрятать форму + добавить иконку в трей.
Иконку я добавил, но форма не прячеться После прочтения DRKB 2.2 был написан такой код ![]() ![]() type TDisconnectForm = class(TForm) procedure Ic(n:Integer;Icon:TIcon); procedure FormShow(Sender: TObject); protected procedure IconMouse(var Msg: TMessage); message WM_USER + 1; procedure ControlWindow(var Msg: TMessage); message WM_SYSCOMMAND; // WM_SYSCOMMAND = $0112; end; var DisconnectForm: TDisconnectForm; Time:Integer; implementation uses WarningFormU; {$R *.dfm} procedure TDisconnectForm.FormShow(Sender: TObject); var sTime:string; begin sTime:=Paramstr(1); try {Проверка полученных данных} //Time:=strtoint(stime); Time:=2; except ShowMessage('Ошибка в параметре'); Close; application.Terminate; exit; end; if (time<=0) then begin ShowMessage('Не положительное число'); Close; application.Terminate; exit; end; //Праметр задан верно - включаем таймер Inc(time); ic(1,application.Icon); showwindow(handle, SW_hide); showwindow(Application.handle, SW_HIDE); { В DRKB написано что так можно спрятать форму Но она не прячеться - она остаеться видимой } Timer1.Enabled:=true; end; procedure Tdisconnectform.ControlWindow(var Msg: TMessage); begin if (Msg.WParam = SC_MINIMIZE) then begin Ic(1, Application.Icon); showwindow(Handle, SW_hide); //showwindow(Application.handle, SW_HIDE); end else inherited; end; Procedure TDisconnectForm.Ic(n:Integer;Icon:TIcon); Var Nim:TNotifyIconData; begin With Nim do Begin cbSize:=SizeOf(Nim); Wnd:=disconnectform.Handle; uID:=1; uFlags:= NIF_MESSAGE or NIF_ICON or NIF_TIP; hicon:=Icon.Handle; uCallbackMessage:=WM_USER+1; szTip:='Tip' End; Case n OF 1: Shell_NotifyIcon(NIM_ADD,@Nim); // 2: Shell_NotifyIcon(NIM_DELETE,@Nim); // 3: Shell_NotifyIcon(NIM_MODIFY,@Nim); // End; end; procedure Tdisconnectform.IconMouse(var msg:Tmessage); var p: tpoint; begin GetCursorPos(p); if (Msg.LParam = WM_RBUTTONUP) then begin PopupMenu1.Popup(p.X,p.Y); PostMessage(Handle, WM_NULL, 0, 0); end; end; Как спрятать форму? |
Сообщ.
#2
,
|
|
|
У формы вообще то сть свойство Visible и Метод Hide...
|
Сообщ.
#3
,
|
|
|
Хм, а где Application.Minimize?
|
Сообщ.
#4
,
|
|
|
также если хочешь чтобы приложение загрузилось сразу без формы, можно написать application.showmainform:=false в файле проекта
|
Сообщ.
#5
,
|
|
|
Цитата У формы есть свойство Visible Цитата Хм, а где Application.Minimize? I)Пробуем ![]() ![]() Visible:=false 1) В TDisconnectForm.FormShow Получаем: Debugger Exception Notification Project Disconnect.exe raised exception class EInvalidOperation with message 'Cannot change Visible in OnShow or OnHide'. Process stopped. Use Step or Run to continue. ( Нельзя менять visible в OnShow) 2) В TDisconnectForm.FormCreate Получаем: Форма не прячеться ( но иконка в трее есть ) II)Пробуем ![]() ![]() Application.Minimize 1) В TDisconnectForm.FormShow Получаем: Форма отображаеться. Если ее развернуть (из taskbar) и снова свернуть - тогда не отображаеться. 2) В TDisconnectForm.FormCreate Форма все равно не прячеться (она спрятана за остальными окнами) III)Пробуем ![]() ![]() Application.Minimize; Visible:=false; 1) В TDisconnectForm.FormShow Получаем: Debugger Exception Notification Project Disconnect.exe raised exception class EInvalidOperation with message 'Cannot change Visible in OnShow or OnHide'. Process stopped. Use Step or Run to continue. 2) В TDisconnectForm.FormCreate Форма все равно не прячеться (она спрятана за остальными окнами) |
Сообщ.
#6
,
|
|
|
Цитата Delphist @ 1) В TDisconnectForm.FormShow Получаем: Debugger Exception Notification Project Disconnect.exe raised exception class EInvalidOperation with message 'Cannot change Visible in OnShow or OnHide'. Process stopped. Use Step or Run to continue. ( Нельзя менять visible в OnShow) Компилятор понятно написал, в чем ошибка. Visible формы можно поменять в OnCreate или в design-time. Добавлено Только для главной формы нужно делать так: ![]() ![]() procedure TForm1.FormCreate(Sender: TObject); begin Application.ShowMainForm := False; end; |
Сообщ.
#7
,
|
|
|
Цитата s-mike Только для главной формы нужно делать так: Application.ShowMainForm := False; Сделал, но ![]() ![]() TDisconnectForm.FormShow событие OnShow не воникает => код ![]() ![]() ic(1,application.Icon); showwindow(handle, SW_hide); showwindow(Application.handle, SW_HIDE); не выполняеться => прога в трей не прячеться. А по условию (см 1й пост ) Цитата Надо спрятать форму + добавить иконку в трей. |
Сообщ.
#8
,
|
|
|
Давай сделаем маааааленький эксперимент.
Кинь на ужасную форму кнопку и при нажатии на неё вызыви код, делающий махинации в трее и плюс убирает форму, ну примерно так: ![]() ![]() procedure TForm1.Button10OnClick(Sender:TObject); Begin HideToSysTray; // прячемся Form1.Visible:=False End; О результатх скажи. |
Сообщ.
#9
,
|
|
|
2 SPrograMMer
Все работает ![]() Но надо чтобы форма сама пряталась ( без моего вмешательства ) |
Сообщ.
#10
,
|
|
|
Delphist,
Цитата Но надо чтобы форма сама пряталась ( без моего вмешательства ) Поясни, не понемаю какая разница ![]() |
Сообщ.
#11
,
|
|
|
Поясняю
Форму можно спрятать так: ![]() ![]() procedure TForm1.Button1Click begin Visible:=false; end; (Форма прячеться по нажатию на кнопку - после моих действий) Можно спрятать так: ![]() ![]() procedure TForm1.FormShow begin Visible:=false; end; (Такой трюк не пройдет, но тем не менее - форму прячет сама прога) |
Сообщ.
#12
,
|
|
|
Delphist Я знал что после щелчка будет все работать, я просто хотел тебе маааленькую вещь показать - как мне кажется, по крайне мере я так делал когда-то, форма сразу после загрузки ДОЛЖНА показаться, а затем - прячем её. Я имею ввиду то что б можно бвло применить
![]() ![]() Form1.Visible:=False Нужно что б в этот момент форма была видима. Соответственно кидаем на форму таймер, установив ему интервал поменьше, можно 10 мс - тогда эффект может быть такой, что как форма отрисовалась и спраталясь, не будет заметно человеческому глазу. и пишем ему: ![]() ![]() Procedure TForm1.Timer1Timer(Sender:TObject); Begin Timer1.Enabled:=False; // что б больше не реагировал HideToSysTray; // прячемся в трей End; Теперь то работает? Добавлено А то 2SPrograMMer, 2SPrograMMer... |
Сообщ.
#13
,
|
|
|
не самый подходящий способ, но.. =)
в OnCreate гл. формы: сохрани в переменные - положение, длину и ширину формы ![]() ![]() form1.top:=3000; form1.left:=3000; или ![]() ![]() form1.Top:=0; form1.Left:=0; form1.Width:=0; form1.Height:=0 в нужный момент присвой форме те переменные которые сохранил. также можно form1.visible=true/false к этому делу подключить. |
Сообщ.
#14
,
|
|
|
Цитата Теперь то работает? Работает. ![]() Цитата не будет заметно человеческому глазу. Заметно. Хотя это уже мелочи. ![]() 2 SPrograMMer,s-mike,мыш: Спасибо |
Сообщ.
#15
,
|
|
|
Цитата SPrograMMer @ У формы вообще то сть свойство Visible и Метод Hide... а если эта форма главная? тогда нужно делать так: ![]() ![]() Application.ShowMainForm:=false; если я, конечно, не ошибаюсь |