Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [VCL] VCL Forms & ShowWindow(), При отправке сообщения ничего не происхо 
:(
    Опции темы
MuForum
  Дата 4.8.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



Доброе время суток!
- Столкнулся со следующей проблемой: Если отправить VCL форме сообщение 'ShowWindow(hWnd, SW_HIDE)', то форма не прячется. Но если сделать 'Minimize', и затем отправить сообщение 'ShowWindow(hWnd, SW_HIDE)', то тогда с 'Панели задач' исчезнет вкладка.
- Что за мистика и как исправить, понять не могу.
- Протестировал на 8 программах, результат одинаковый =(


# IDE: 'C++ Builder 6.0';

Это сообщение отредактировал(а) MuForum - 4.8.2008, 22:14


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
THandle
Дата 4.8.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



MuForum, у меня все нормально прячется. Можно кусочек кода?
PM   Вверх
MuForum
Дата 4.8.2008, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



Код

Process newProcess = new Process();
if (File.Exists(TFileList.FileList[_index].Path))
{
    try
    {
        newProcess.StartInfo.FileName = TFileList.FileList[_index].FileName;
        newProcess.StartInfo.Arguments = TFileList.FileList[_index].Parameters;
        newProcess.StartInfo.WorkingDirectory = TFileList.FileList[_index].ShortPath;
        newProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
        if (newProcess.Start())
        {
            TFileList.FileList[_index].PID = newProcess.Id;
            TFileList.FileList[_index].Status = 0x01;
            // ----
            newProcess.WaitForInputIdle();
            // ----
            Thread.Sleep(TFileList.FileList[_index].Delay);
            // ----
            newProcess.Refresh();
            TFileList.FileList[_index].Handle = newProcess.MainWindowHandle;
        }
        else
        {
            TFileList.FileList[_index].Status = 0x02;
        }
    }
    catch (Exception) { }
}



--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
VICTAR
Дата 4.8.2008, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А где собственно ShowWindow? smile 
PM MAIL   Вверх
MuForum
Дата 4.8.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



упс, забыл код скинуть =)

Код

        static public class SW
        {
            [DllImport("user32.dll")]
            public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
            [DllImport("user32.dll")]
            public static extern bool ShowWindow(int hWnd, int nCmdShow);
            // ----
            public const int SW_HIDE = 0;
            public const int SW_SHOWNORMAL = 1;
            public const int SW_NORMAL = 1;
            public const int SW_SHOWMINIMIZED = 2;
            public const int SW_SHOWMAXIMIZED = 3;
            public const int SW_MAXIMIZE = 3;
            public const int SW_SHOWNOACTIVATE = 4;
            public const int SW_SHOW = 5;
            public const int SW_MINIMIZE = 6;
            public const int SW_SHOWMINNOACTIVE = 7;
            public const int SW_SHOWNA = 8;
            public const int SW_RESTORE = 9;
            public const int SW_SHOWDEFAULT = 10;
            public const int SW_FORCEMINIMIZE = 11;
            public const int SW_MAX = 11;
        }
...
        private void VisibleChange(TFileList.FileInfo FileItem, int _index)
        {
            Process ProId = null;
            try
            {
                ProId = Process.GetProcessById(FileItem.PID);
                SW.ShowWindow(FileItem.Handle, (ProId.MainWindowHandle == IntPtr.Zero) ? SW.SW_SHOW : SW.SW_HIDE);
            }
            catch (Exception) { AccessDeny(_index); }
        }


Это сообщение отредактировал(а) MuForum - 4.8.2008, 23:16


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
mrbrooks
Дата 5.8.2008, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



попробуй так  smile коряво конечно - но с твоей проблемой я как то сталкивался.
Код

ShowWindow(Handle,SW_HIDE);
ShowWindow(Application->Handle,SW_HIDE);


хотя конечно более гуманное использовать метод формы Hide()
PM MAIL   Вверх
MuForum
Дата 5.8.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



Цитата(mrbrooks @ 5.8.2008,  07:40)
попробуй так  smile коряво конечно - но с твоей проблемой я как то сталкивался.
Код

ShowWindow(Handle,SW_HIDE);
ShowWindow(Application->Handle,SW_HIDE);


хотя конечно более гуманное использовать метод формы Hide()

Программа, которая сворачивает написана на C#.
- Она является мэнеджером провессов(Маленьким).


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
mrbrooks
Дата 5.8.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(MuForum @ 5.8.2008,  12:08)
Программа, которая сворачивает написана на C#.
- Она является мэнеджером провессов(Маленьким).

Да хоть на brainfuck. Я тебе написал про VCL-форму.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

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


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.