Меню

Mainformontaskbar delphi 7 ошибка

MaCroSs

2 / 2 / 0

Регистрация: 10.04.2012

Сообщений: 18

1

22.04.2012, 23:06. Показов 16659. Ответов 14

Метки нет (Все метки)


Delphi
1
2
3
4
5
6
7
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;                                    Тут ошибка  False не помог :(
  Application.Title := 'Odnoklassniki.ru Account Reger';
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



0 / 0 / 0

Регистрация: 22.03.2012

Сообщений: 5

22.04.2012, 23:28

2

MaCroSs, хм забыл кое что вставить



0



10229 / 6607 / 498

Регистрация: 28.12.2010

Сообщений: 21,159

Записей в блоге: 1

23.04.2012, 00:03

3

Application.MainFormOnTaskbar := True; Тут ошибка False не помог

в вашей версии Delphi нет этого свойства в Application, просто заремьте.



0



54 / 54 / 4

Регистрация: 15.12.2010

Сообщений: 260

25.04.2012, 10:27

4

Цитата
Сообщение от MaCroSs
Посмотреть сообщение

Что это?

«Это» — код тупо скопированный из старшей версии делфей в младшую.
Не знаю как в других версиях, а в семерке не существует свойства MainFormOnTaskbar



0



0 / 0 / 1

Регистрация: 29.01.2013

Сообщений: 81

23.03.2013, 15:51

5

а что можна зделать в таком случае?



0



324 / 316 / 84

Регистрация: 03.03.2010

Сообщений: 1,364

23.03.2013, 16:25

6

Цитата
Сообщение от Saninho
Посмотреть сообщение

а что можна зделать в таком случае?

за комментировать или вообще удалить эту строку и будет тебе счастье



1



Житель Земли

2994 / 2987 / 391

Регистрация: 26.07.2011

Сообщений: 11,456

Записей в блоге: 1

04.11.2013, 19:24

7

ладно, с этим все понятно. но объясните пожалуйста, что означает эта переменная? с ней, либо без нее приложение работает абсолютно одинаково.
Д2010 + Вин7. может, она, имеет смысл при других условиях?



0



120 / 110 / 19

Регистрация: 04.11.2013

Сообщений: 471

04.11.2013, 19:39

8



0



Житель Земли

2994 / 2987 / 391

Регистрация: 26.07.2011

Сообщений: 11,456

Записей в блоге: 1

04.11.2013, 20:02

9

Цитата
Сообщение от Valenth
Посмотреть сообщение

благодарю.

MainFormOnTaskBar must be true to use Windows Vista Aero effects. These include live taskbar thumbnails, Dynamic Windows, Windows Flip, and Windows Flip 3D.

Windows Flip 3D — это переключение окон по Win + Tab, так?
работает в обоих случаях.



0



120 / 110 / 19

Регистрация: 04.11.2013

Сообщений: 471

04.11.2013, 20:06

10

Цитата
Сообщение от DenNik
Посмотреть сообщение

Windows Flip 3D — это переключение окон по Win + Tab, так?

Ага, оно самое.



0



Житель Земли

2994 / 2987 / 391

Регистрация: 26.07.2011

Сообщений: 11,456

Записей в блоге: 1

04.11.2013, 20:12

11

в общем, я понял, что на обычных приложениях эта переменная особого значения не играет



0



Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32444 / 20939 / 8104

Регистрация: 22.10.2011

Сообщений: 36,202

Записей в блоге: 7

04.11.2013, 22:07

12

Цитата
Сообщение от DenNik
Посмотреть сообщение

работает в обоих случаях.

Ничего оно не работает. Если Application.Title был изменен (а это происходит очень часто), то без присвоения MainFormOnTaskbar в True окно не будет фигурировать в Flip3D. Да и live thumbnails начинают глючить.



0



Житель Земли

2994 / 2987 / 391

Регистрация: 26.07.2011

Сообщений: 11,456

Записей в блоге: 1

05.11.2013, 10:31

13

Цитата
Сообщение от UI
Посмотреть сообщение

без присвоения MainFormOnTaskbar в True окно не будет фигурировать в Flip3D

со второго-третьего раза появляется. или если в рунтайме поменять Application.Title



0



Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32444 / 20939 / 8104

Регистрация: 22.10.2011

Сообщений: 36,202

Записей в блоге: 7

05.11.2013, 10:35

14

Цитата
Сообщение от DenNik
Посмотреть сообщение

со второго-третьего раза появляется

И это нормально? Должно появляться сразу. В общем ясно, ты сбил себе в голову, что оно тебе не надо, и теперь будешь находить оправдания этому. Ну, хочешь терять пользователей — не используй. Если я пользуюсь программой, а она не появляется во Flip 3D (или появляется с третьего/четвертого раза, потом на девятый — опять пропадает, и так далее), то программа становится не очень комфортной, и ей находится замена…



0



Житель Земли

2994 / 2987 / 391

Регистрация: 26.07.2011

Сообщений: 11,456

Записей в блоге: 1

05.11.2013, 11:16

15

Цитата
Сообщение от UI
Посмотреть сообщение

И это нормально? Должно появляться сразу. В общем ясно, ты сбил себе в голову, что оно тебе не надо, и теперь будешь находить оправдания этому. Ну, хочешь терять пользователей — не используй. Если я пользуюсь программой, а она не появляется во Flip 3D (или появляется с третьего/четвертого раза, потом на девятый — опять пропадает, и так далее), то программа становится не очень комфортной, и ей находится замена…

ну зачем так строго? я же не отказываюсь от этого свойства



0



HI

I’m using Delphi 2007 and have set the MainFormOnTaskBar property to true.

The issue that I’m having is this.

If you open a child window from the main form and then you show a message dialog from the child window you just opened. When you close the message dialog and then close the child window, the main form will be sent to the back of any other application you have on the screen.

This happens under windows Vista and Windows 7. Does anyone know why this is happens and how can I fix it?

Francesca's user avatar

Francesca

21.4k4 gold badges49 silver badges88 bronze badges

asked Sep 22, 2010 at 22:55

There is no spoon's user avatar

I’ve fixed this in two ways.

Firstly by adding stdcall to the end of DoFindWindow in Forms.pas as described by Andreas Hausladen. This handles when a child form is hidden (CloseAction = caHide) instead of released when closing the form.

Secondly — copied the code from TCustomForm.CMShowingChanged that calls FindTopMostWindow and then activates the window that was returned into TCustomForm.CMRelease.

(Edit: code block needs to be indented by 4 spaces)

procedure TCustomForm.CMRelease;
var
  NewActiveWindow: LongInt;
begin
  if Application.MainFormOnTaskbar then
  begin
    NewActiveWindow := 0;

    if (GetActiveWindow = Handle) and not IsIconic(Handle) then
    begin
      NewActiveWindow := FindTopMostWindow(Handle);
    end;

    if NewActiveWindow <> 0 then
    begin
      SetActiveWindow(NewActiveWindow);
    end;
  end;

  Free;
end;

This seems to have done it, I’ll continue testing to make sure.

Jeroen Wiert Pluimers's user avatar

answered Sep 23, 2010 at 2:52

There is no spoon's user avatar

The PopupMode and PopupParent properties were added specifically to TForm to address this issue. Before showing the child form, set it’s PopupParent to the main form, and it’s PopupMode to pmAuto.

PopupParent specifically affects the Z-order of windows when other windows are shown.

The Delphi 2007 help has some documentation on these two properties, but you have to go through TForm to get to them. Use ‘TForm,Pop’ as your search topic (w/o the quotes, obviously ) to get there. The docs are a little confusing about PopupParent, because it discusses the effect that PopupMode has on the automatic assignment of PopupParent. A little experimentation after reading the docs should pay off, though.

answered Sep 23, 2010 at 15:44

Ken White's user avatar

Ken WhiteKen White

122k14 gold badges219 silver badges437 bronze badges

0

  • Up to Parent: TApplication

Delphi

property MainFormOnTaskBar: Boolean read FMainFormOnTaskBar write SetMainFormOnTaskBar;

C++

__property bool MainFormOnTaskBar = {read=FMainFormOnTaskBar, write=SetMainFormOnTaskBar, nodefault};

Contents

  • 1 Properties
  • 2 Description
    • 2.1 See Also
    • 2.2 Code Examples

Properties

Type Visibility Source Unit Parent
property public

Vcl.Forms.pas

Vcl.Forms.hpp

Vcl.Forms TApplication

Description

Controls how Windows taskbar buttons are handled in a VCL application.

If the MainFormOnTaskBar is True, a taskbar button represents the application’s main form and displays its caption. If False, a taskbar button represents the application’s (hidden) main window and bears the application’s Title.

MainFormOnTaskBar must be True to use Windows Vista or Windows 7 Aero effects, including live taskbar thumbnails, Dynamic Windows, Windows Flip, and Windows Flip 3D.

If a change to the default behavior is required, MainFormOnTaskBar should be set in the project source file after Application.Initialize and before the main form creation. The MainFormOnTaskBar setting is intended to persist for the life of the application; later run-time changes of this property could result in unexpected behavior.

MainFormOnTaskBar defaults to True for applications created in Delphi 2007 and later products, and to False for earlier products.

The MainFormOnTaskBar property can be applied to older applications. Note that it affects the Z-order of your MainForm in case your application depends on this.

To update existing VCL applications, add the following line to the project source file (example includes the application initialization line, which must precede the line that sets MainFormOnTaskBar):

Delphi:

Application.Initialize;
...
Application.MainFormOnTaskbar := True;

C++:

Application->Initialize();
Application->MainFormOnTaskBar = true;

Note that the line is automatically added to new projects.

For further information, see http://www.microsoft.com/windows/products/windowsvista/features/experiences/aero.mspx.

See Also

  • TApplication

Code Examples

  • TAppCreateForm (Delphi)
  • TAppCreateForm (C++)
> Application->MainFormOnTaskBar = false; BC++ 2009 

:(

   

Опции темы

Alca
Дата 12.1.2009, 15:29 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Хочу спрятать окно в таскбаре (BC++ 2009). На шестерке все работало.

Код

#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//...
//---------------------------------------------------------------------------
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) {
    try
    {
         //спрятать окно в таскбаре (так делал в шестерке)
        //DWORD Style=GetWindowLong(Application->Handle, GWL_EXSTYLE);
        //Style|=WS_EX_TOOLWINDOW;
        //SetWindowLong(Application->Handle, GWL_EXSTYLE, Style);

         Application->Initialize();
         Application->MainFormOnTaskBar = false;
         //ShowWindow(Application->Handle, SW_HIDE);

         Application->Title             = L"......";
         Application->CreateForm(__classid(TfrmMain), &frmMain);
         Application->Run();
    }
    catch (Exception &exception)
    {
         Application->ShowException(&exception);
    }
    catch (...)
    {
         try
         {
             throw Exception("");
         }
         catch (Exception &exception)
         {
             Application->ShowException(&exception);
         }
    }
    return 0;
}
//---------------------------------------------------------------------------

Почему не прячется окно в таскбаре?

Это сообщение отредактировал(а) Alca — 12.1.2009, 15:35

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
Rrader
  Дата 12.1.2009, 19:12 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Inspired =)
***

Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191

Код

Application->CreateForm(__classid(TForm1), &Form1);
Application->MainFormOnTaskBar = false;

Добавлено через 1 минуту

Цитата(Help)
If false [MainFormOnTaskBar], a taskbar button represents the application’s (hidden) main window and bears the application’s Title. 

———————

Let’s do this quickly!
Rest in peace, Vit!

PM MAIL Skype   Вверх
Alca
Дата 12.1.2009, 21:54 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Спасибо то что надо, только при старте приложения все-равно видно форму в статус баре.
Можно ли сделать, чтоб оно вообще там не маяковало? 

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 16.1.2009, 10:32 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Может кто-то сталкивался с такими приколами?

Это сообщение отредактировал(а) Alca — 16.1.2009, 10:32

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 16.1.2009, 11:03 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

Код

#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//...
//---------------------------------------------------------------------------
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) {
    try
    {
         Application->Initialize();
         Application->MainFormOnTaskBar = false;
         Application->ShowMainForm = false; 
         Application->CreateForm(__classid(TfrmMain), &frmMain);
         Application->Run();
    }
    catch (Exception &exception)
    {
         Application->ShowException(&exception);
    }
    catch (...)
    {
         try
         {
             throw Exception("");
         }
         catch (Exception &exception)
         {
             Application->ShowException(&exception);
         }
    }
    return 0;
}
//---------------------------------------------------------------------------

PM MAIL   Вверх
Alca
Дата 16.1.2009, 11:08 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Фонарь. НЕА.

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 16.1.2009, 11:12 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

Цитата(Alca @  16.1.2009,  11:08 Найти цитируемый пост)
Фонарь. НЕА. 

Че появляется чтоли?  smile 

PM MAIL   Вверх
Alca
Дата 16.1.2009, 11:13 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Не пропадает. smile 

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 16.1.2009, 11:17 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

Цитата(Alca @  16.1.2009,  11:13 Найти цитируемый пост)
Не пропадает.

Очень странно. 
У меня 

Код

Application->ShowMainForm = false; 

скрывает все. 

Может у тебя что нибудь эдакое в конструкторе формы?

PM MAIL   Вверх
Alca
Дата 16.1.2009, 11:21 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Все убрал с конструктора — тоже самое. Скинь пж тестовый проект, я гляну.

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 16.1.2009, 11:36 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

Держи

Присоединённый файл ( Кол-во скачиваний: 10 )

Присоединённый файл
 test.rar 259,43 Kb

PM MAIL   Вверх
Alca
Дата 16.1.2009, 12:17 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Цитата
test.rar 259,43 Kb

Так форма спрятана же…..
Мне надо чтоб главная форма была видна, а на таскбаре ее не было.

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 16.1.2009, 13:23 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

Цитата(Alca @  16.1.2009,  12:17 Найти цитируемый пост)
Так форма спрятана же…..
Мне надо чтоб главная форма была видна, а на таскбаре ее не было. 

А Семен Семеныч. Я тебя не правильно понял. Смотри так надо?

Присоединённый файл ( Кол-во скачиваний: 19 )

Присоединённый файл
 test.rar 252,17 Kb

PM MAIL   Вверх
Alca
Дата 16.1.2009, 13:39 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Да так!  smile 

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 16.1.2009, 13:42 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

Кидаю исходник  smile

Присоединённый файл ( Кол-во скачиваний: 39 )

Присоединённый файл
 test.rar 252,17 Kb

PM MAIL   Вверх
Alca
Дата 16.1.2009, 13:45 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Там нема его  smile 

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 16.1.2009, 13:48 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

Ой не тот  smile Вот он

Присоединённый файл ( Кол-во скачиваний: 14 )

Присоединённый файл
 test.rar 259,61 Kb

PM MAIL   Вверх
Alca
Дата 16.1.2009, 14:16 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

mrbrooks, спасибо, то что доктор прописал!

Код

WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) {
    try {
        Application->Initialize();
        Application->MainFormOnTaskBar = false;
        Application->ShowMainForm      = false;
        Application->CreateForm(__classid(TfrmMain), &frmMain);
        Application->Run();
    } catch (Exception &exception) {
        Application->ShowException(&exception);
    } catch (...) {
        try {
            throw Exception("");
        } catch (Exception &exception) {
            Application->ShowException(&exception);
        }
    }

    return 0;
}

Код

__fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) {
    ShowWindow(Handle, SW_SHOW);
}

Короче, я в шоке. Интересно борландцы сами додумались до такого 
или им посоветовали парни из мелкософта?  smile  smile

Это сообщение отредактировал(а) Alca — 16.1.2009, 14:20

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 16.1.2009, 14:19 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

Цитата(Alca @  16.1.2009,  14:16 Найти цитируемый пост)
Интересно борландцы сами додумались до такого 
или им посоветовали парни из мелкософта? 

такие неоднозначные подходы — это еще так детские шалости — по сравнению с другими косяками smile 

PM MAIL   Вверх
Alca
Дата 16.1.2009, 14:23 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

P.S.
Некоторые косяки шестёрки они залепили аж тока в 2009 студии.

Если на форме находяться какие-то контролы, то их не видно.
P.S. #2
Нет слов.

Это сообщение отредактировал(а) Alca — 16.1.2009, 15:12

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 16.1.2009, 18:22 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

1
2
3

Это сообщение отредактировал(а) Alca — 16.1.2009, 18:28

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 19.1.2009, 09:07 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

Цитата(Alca @  16.1.2009,  14:23 Найти цитируемый пост)

Да точно есть такой баг. Но я его поборол таким способом. В конструкторе формы:

Код

ShowWindow(Handle, SW_SHOW);
ShowWindow(Button->Handle, SW_SHOW); //если есть кнопка
ShowWindow(Memo->Handle, SW_SHOW);  //если есть мемо
                                                                       //так далее - по всем контролам

PM MAIL   Вверх
mrbrooks
Дата 19.1.2009, 09:41 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

хотя вот более кошерный способ — если компонентов много

Код

__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{

ShowWindow(Handle,SW_SHOW);
for(int i =0; i< ControlCount; i++)
    {
            TWinControl *wc = (TWinControl *)FindComponent(Controls[i]->Name);
            ShowWindow(wc->Handle,SW_SHOW);
    }
}

PM MAIL   Вверх
Sharkfire
Дата 1.2.2009, 17:51 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2

Видать сами)

Это сообщение отредактировал(а) Sharkfire — 1.2.2009, 17:53

PM MAIL ICQ   Вверх
Alca
Дата 2.2.2009, 10:39 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Цитата
Видать сами)

???

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
Sharkfire
Дата 2.5.2009, 16:40 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2

Вообще столкнулся с той же проблемой.
Даже вариант mrbrooks-а не совсем помог.
При переборе в цикле не все контролы становятся видимыми.
В общем проблема дикая ! как убрать кнопку с таскабара так что бы потом не переделывать пол программы!!!!

PM MAIL ICQ   Вверх
Alca
Дата 2.5.2009, 16:47 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

я думаю надо копать исходники шестерки….

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
A5uKa
Дата 2.5.2009, 17:08 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

TЋ♥s F1rȜ iƧ BurȠiƞg
***

Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16

Там очень хороший пример с «всё что надо от трея» лежит прямо в стандартных примерах.
и никуда ходить не надо.

PM   Вверх
Alca
Дата 2.5.2009, 17:20 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50

Цитата
Там очень хороший пример

Как называеться?

———————

C++ cross-platform library

PM WWW ICQ Skype Jabber   Вверх
A5uKa
Дата 3.5.2009, 12:04 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

TЋ♥s F1rȜ iƧ BurȠiƞg
***

Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16

Цитата
Как называеться? 

D:CODE-GEARSourcesCPPAppsTrayIcon

PM   Вверх
Superklug
Дата 2.6.2009, 01:37 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет

Я тоже с этой проблемой столкулся… В 6-м билдере все прекрасно работало. Кто-нибудь нашел приемлемое решение для 2009-го?

PM MAIL   Вверх
Sharkfire
Дата 2.6.2009, 10:01 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2

нет лично я не выкрутился!

был ещё один какой то не испробованный способ на одном из форумов … там на 2 страницы винапишного кода….

У меня посто в программе главное окно убегает в трей и кнопка эта чёртова сама исчезает

Добавлено через 1 минуту и 53 секунды
A5uKa, нема такого (

PM MAIL ICQ   Вверх
mrbrooks
Дата 2.6.2009, 12:54 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

трололомен
****

Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306

из _tWinMain вырезаем Application->MainFormOnTaskBar = true;

в конструкторе формы вставляем Application->MainFormOnTaskBar = true;

Добавлено через 50 секунд

Цитата(Sharkfire @  2.6.2009,  10:01 Найти цитируемый пост)
A5uKa, нема такого ( 

ни чего подобного — в наличии.

PM MAIL   Вверх
Superklug
Дата 2.6.2009, 14:10 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет

mrbrooks, спасибо! На вид конечно очень странное решение, но оно работает.. Единственный недостаток: при сворачивании окна, анимация происходит в нижний-левый угол. Хотелось бы все таки в иконку трея…

И еще теперь не приходит сообщение WM_SIZE при нажатии на кнопку «свернуть все»…  smile

Это сообщение отредактировал(а) Superklug — 2.6.2009, 14:21

PM MAIL   Вверх
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) 0 Пользователей: « Предыдущая тема | C++ Builder | Следующая тема »

I built the code below using Delphi XE2. It creates Form1, and Form1 immediately creates an instance of Form2. When I press the button on Form2 a second Form2 is created.

Now if I hover the mouse over the button on this second, topmost, Form2 and wait for the tooltip to appear, the moment the tooltip appears, the first Form2 comes to the front, stealing focus.

The problem occurs only if Application.MainFormOnTaskbar is True. It also relies on the first Form2 being created from Form1’s FormCreate method. If I use PostMessage() to delay the creation of the first Form2 until the application has finished initialising, the problem goes away.

I’d like to understand why this is happening. I have already learned that Delphi’s Application object handles a lot of things including hint display, and I know that Delphi can recreate a window’s handle during initialisation, but I haven’t been able to follow this through to explain fully the behaviour described above (or indeed whether the above two facts are even relevant).

Project1.dpr

program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True; // False makes problem go away
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Unit1.pas

unit Unit1;
interface
uses
  Vcl.Forms, Unit2;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  public
    procedure CreateForm2;
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  CreateForm2;
end;

procedure TForm1.CreateForm2;
var
  frm : TForm2;
begin
  frm := TForm2.Create(Application); // (Could pass Self - makes no difference)
  frm.Show;
end;

end.

Unit2.pas

unit Unit2;
interface
uses
  Vcl.Forms, System.Classes, Vcl.Controls, Vcl.StdCtrls, WinApi.Windows;

type
  TForm2 = class(TForm)
    Button1: TButton; // This button has a hint
    procedure Button1Click(Sender: TObject);
  end;

var
  Form2: TForm2;

implementation
uses
  System.SysUtils, Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.CreateForm2;
end;

end.

I built the code below using Delphi XE2. It creates Form1, and Form1 immediately creates an instance of Form2. When I press the button on Form2 a second Form2 is created.

Now if I hover the mouse over the button on this second, topmost, Form2 and wait for the tooltip to appear, the moment the tooltip appears, the first Form2 comes to the front, stealing focus.

The problem occurs only if Application.MainFormOnTaskbar is True. It also relies on the first Form2 being created from Form1’s FormCreate method. If I use PostMessage() to delay the creation of the first Form2 until the application has finished initialising, the problem goes away.

I’d like to understand why this is happening. I have already learned that Delphi’s Application object handles a lot of things including hint display, and I know that Delphi can recreate a window’s handle during initialisation, but I haven’t been able to follow this through to explain fully the behaviour described above (or indeed whether the above two facts are even relevant).

Project1.dpr

program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True; // False makes problem go away
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Unit1.pas

unit Unit1;
interface
uses
  Vcl.Forms, Unit2;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  public
    procedure CreateForm2;
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  CreateForm2;
end;

procedure TForm1.CreateForm2;
var
  frm : TForm2;
begin
  frm := TForm2.Create(Application); // (Could pass Self - makes no difference)
  frm.Show;
end;

end.

Unit2.pas

unit Unit2;
interface
uses
  Vcl.Forms, System.Classes, Vcl.Controls, Vcl.StdCtrls, WinApi.Windows;

type
  TForm2 = class(TForm)
    Button1: TButton; // This button has a hint
    procedure Button1Click(Sender: TObject);
  end;

var
  Form2: TForm2;

implementation
uses
  System.SysUtils, Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.CreateForm2;
end;

end.

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    !
    user posted image

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

    Соблюдайте общие правила форума

    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как запустить программу/файл? (и дождаться ее завершения)
    5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры — внедрение в удаленное адресное прстранство)
    … (продолжение следует) …


    Внимание:
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки — бан.
    Мат в разделе — бан на три месяца…


    Полезные ссылки:
    user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


    Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

    >
    Как скрыть значок окна в TaskBar’e

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    11.03.10, 09:45

      Доброго времени суток

      Собственно проблема в сабже
      При переходе со старушки delphi7 на delphi 2010 возникла проблемма при скрытии значка окна в TaskBar’e. Он, гад, не скрывается :(

      Нужно чтобы сама форма была на экране, а зачка — небыло

      подскажите как быть пожалуйста

      Сообщение отредактировано: Krid — 05.04.10, 11:31


      Gonarh



      Сообщ.
      #2

      ,
      11.03.10, 10:00

        ExpandedWrap disabled

          ShowWindow(Application.Handle, SW_HIDE);


        CodeMonkey



        Сообщ.
        #3

        ,
        11.03.10, 10:32

          В Delphi 2010 по-умолчанию нет скрытого окна приложения (Application.Handle). Вместо него — главное окно.
          Дальше сами догадайтесь.

          P.S. Поведение переключается MainFormOnTaskBar.
          P.P.S. Ставить MainFormOnTaskBar := False — плохая идея.


          Maksim V.



          Сообщ.
          #4

          ,
          11.03.10, 12:03

            Member

            **

            Рейтинг (т): 7

            Ну можно выставить форме стиль WS_EX_TOOLWINDOW через SetWindowLong или через эту функцию подменить родительское окно или можно все это проделать через интерфейс ITaskBarList.


            poty



            Сообщ.
            #5

            ,
            12.03.10, 07:14

              Спасибо огромное! Сделал таки :)


              CodeMonkey



              Сообщ.
              #6

              ,
              12.03.10, 07:38

                Цитата Maksim V. @ 11.03.10, 12:03

                Ну можно выставить форме стиль WS_EX_TOOLWINDOW через SetWindowLong

                Ну, сделать-то можно разными способами. Есть несколько правил, согласно которым приложения появляются на панели задач. Нарушьте любое условие и кнопка пропадёт. Весь вопрос в том, над чем это делать, а уж как именно делать — вопрос скорее вкуса.


                Алексей



                Сообщ.
                #7

                ,
                02.04.10, 07:48

                  Senior Member

                  ****

                  Рейтинг (т): 17

                  Цитата CodeMonkey @ 11.03.10, 10:32

                  Ставить MainFormOnTaskBar := False — плохая идея.

                  это с чего это плохая идея? в связке с ShowWindow(Application.Handle, SW_HIDE); отлично работает

                  Сообщение отредактировано: Алексей — 02.04.10, 07:50


                  CodeMonkey



                  Сообщ.
                  #8

                  ,
                  02.04.10, 08:43

                    (вздох) Если что-то работает — это ещё не значит, что это правильно.
                    Вам не приходило в голову, а почему это MainFormOnTaskBar равен True по-умолчанию? Наверное, это не просто так? (это домашнее задание)


                    Алексей



                    Сообщ.
                    #9

                    ,
                    02.04.10, 10:19

                      Senior Member

                      ****

                      Рейтинг (т): 17

                      лучше чем вздыхать, объяснили бы в чём подвох. форум для этого и существует.


                      CodeMonkey



                      Сообщ.
                      #10

                      ,
                      02.04.10, 11:39

                        Это было несложное упражнение на дом, но раз вам так лениво, то жмёте F1:
                        Application.MainFormOnTaskbar:

                        Цитата

                        The MainFormOnTaskBar property controls how Windows taskbar buttons are handled by VCL.

                        If the property is true, a taskbar button represents the application’s main form and displays its caption. If false, a taskbar button represents the application’s (hidden) main window and bears the application’s Title.

                        MainFormOnTaskBar must be true to use Windows Vista Aero effects. These include live taskbar thumbnails, Dynamic Windows, Windows Flip, and Windows Flip 3D.

                        If a change to default behavior is required, MainFormOnTaskBar should be set in the .dpr file after Application.Initialize and before main form creation. The MainFormOnTaskBar setting is intended to persist for the life of the application; later runtime changes of this property could result in unexpected behavior.

                        MainFormOnTaskBar defaults to True for applications created in Delphi 2007 and later products and False for earlier products.

                        The property can be applied to older applications. Note that it affects the Z-order of your MainForm in case your application depends on this.

                        To update existing VCL applications, add the following line to the project’s .dpr file after Application.Initialize;:

                        ExpandedWrap disabled

                          Application.MainFormOnTaskbar := True;

                        This line is automatically added to new projects.

                        For further information, see http://www.microsoft.com/windows/products/windowsvista/features/experiences/aero.mspx

                        На случай, если вам лениво делать перевод:

                        Цитата

                        Свойство MainFormOnTaskBar контролирует, как кнопки в панели задач Windows обрабатываются VCL.

                        Если свойство установлено в True, то кнопка на панели задач ассоциирована с главным окном приложения и показывает его заголовок. Если же свойство установлено в False, то кнопка на панели задач ассоциирована со специальным невидимым окном Application и показывает заголовок объекта Аpplication.

                        MainFormOnTaskBar должна быть установлена в True для работы эффектов Аэро в Windows Vista и выше. Это включает в себя предпросмотр (live thumbnails), Dynamic Windows, Windows Flip и Windows Flip 3D.

                        Если вам нужно сменить поведение, то свойство MainFormOnTaskBar должно устанавливаться в .dpr файле сразу после Application.Initialize и до создания главной формы. Свойство MainFormOnTaskBar не следует менять после начальной установки. В противном случае вы получите неожиданное поведение программы.

                        MainFormOnTaskBar устанавливается в True для новых приложений и равно False для старых приложений по соображениям совместимости.

                        Вы можете менять это свойство и в старых приложениях. Заметьте, что это свойство может менять Z-порядок ваших окон.

                        Для обновления старых VCL-приложений, добавьте следующую строку в ваш файл .dpr сразу после Application.Initialize;:

                        ExpandedWrap disabled

                          Application.MainFormOnTaskbar := True;

                        Эта строка автоматически создаётся у новых проектов.

                        Для дальнейшей информации — см. http://www.microsoft.com/windows/products/windowsvista/features/experiences/aero.mspx

                        Если интересно — см. также http://transl-gunsmoker.blogspot.com/2009/03/windows-vista-delphi-1.html


                        Алексей



                        Сообщ.
                        #11

                        ,
                        02.04.10, 14:28

                          Senior Member

                          ****

                          Рейтинг (т): 17

                          ничего страшного не вижу в этом


                          CodeMonkey



                          Сообщ.
                          #12

                          ,
                          02.04.10, 14:48

                            …ну если вы не видите ничего страшного в том, что программа работает неправильно, то флаг вам в руки…


                            VahaC



                            Сообщ.
                            #13

                            ,
                            02.04.10, 19:01

                              Цитата Алексей @ 02.04.10, 14:28

                              MainFormOnTaskBar должна быть установлена в True для работы эффектов Аэро в Windows Vista и выше. Это включает в себя предпросмотр (live thumbnails), Dynamic Windows, Windows Flip и Windows Flip 3D.

                              Если вы считаете нормальным отказаться от этих трёх примочек(кстати именно из-за них большинство знакомых юзеров перешло с ХР на Vista/7) то я поддерживаю предыдущий пост

                              Цитата CodeMonkey @ 02.04.10, 14:48

                              то флаг вам в руки…

                              ИМХО
                              Отказываясь от поддержки(использования) новых примочек ос, вы заранее обрекаете свои программа на «провал».

                              Сообщение отредактировано: VahaC — 02.04.10, 19:04


                              Riply



                              Сообщ.
                              #14

                              ,
                              03.04.10, 03:25

                                Цитата VahaC @ 02.04.10, 19:01

                                Отказываясь от поддержки(использования) новых примочек ос, вы заранее обрекаете свои программа на «провал».

                                К моему глубокому сожалению, вынуждена согласиться с данным утверждением.


                                CodeMonkey



                                Сообщ.
                                #15

                                ,
                                03.04.10, 08:04

                                  Вообще, если отвлечься от Vista/7, существует доступная и простая концепция: у вас есть окно? -> на панели задач есть его кнопка. Взаимно-однозначное соответствие.

                                  Однако, энцать лет тому назад при разработке Delphi было принято решение, использовать хак для введения иного поведения. Да, это кривой хак, потому что он делает что-то, что не предусматривалось системой (каждое Delphi приложение кидает вам на рабочий стол видимое окно с нулевым размером). Но это как-то работало и потому всех устраивало, не задумываясь о том, что, вообще говоря, это не есть нормально. Хороший пример на тему не идти против системы, кстати.

                                  Так что с MainFormOnTaskBar = True программа получается чуть попрямее, чем без него (вне зависимости от новых фишек ОС).

                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                  0 пользователей:

                                  • Предыдущая тема
                                  • Delphi: Система, Windows API
                                  • Следующая тема

                                  Рейтинг@Mail.ru

                                  [ Script execution time: 0,0495 ]   [ 16 queries used ]   [ Generated: 28.01.23, 21:42 GMT ]  

                                  0 0 голоса
                                  Рейтинг статьи
                                  Подписаться
                                  Уведомить о
                                  guest

                                  0 комментариев
                                  Старые
                                  Новые Популярные
                                  Межтекстовые Отзывы
                                  Посмотреть все комментарии

                                  А вот еще интересные материалы:

                                • Яшка сломя голову остановился исправьте ошибки
                                • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
                                • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
                                • Maine win64 shipping exe grounded системная ошибка
                                • Maine f444c6a7 ubisoft connect ошибка