Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2010, 18:03   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию "Фоновая" форма

Структура моего кода:
Код:
Некоторые действие перед загрузкой
Регистрация класса
Создание гл. окна
Создание на нем контролов
Обработчик событий
Мне нужно следующее:
Создать "фоновую" форму. Обработчик для неё не требуется, только, чтобы она висела как сплеш на фоне. Следовательно этот "бекграунд" должен находиться сзади mainform.

Надеюсь выразился правильно. Был бы рад не коду (если он конечно стандартный, иначе желательно еще и пояснение ) а структуре, как выше.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 20.04.2010, 22:37   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Все еще актуально...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 21.04.2010, 10:16   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Сделал вот так:
Код:
Unit UNTFRMProc;

Interface

Uses
 UNTFRMTypes,
 UNTFRMVars,
 UNTFRMExp;

Function WindowProc(hwnd, msg, wparam, lparam: longint): longint; StdCall;

Procedure WindowCreate(Var FRM : TShrewForm);
Procedure ImageCreate;
Procedure ShowAnimatedWindow;
Procedure ShutDown;
Procedure FillForms;

Implementation

Function WindowProc(hwnd, msg, wparam, lparam: longint): longint; StdCall;
Begin
  Result := UNTFRMExp.DefWindowProc(hwnd, msg, wparam, lparam);
  Case Msg Of

   (*WM_DESTROY*)$0002: UNTFRMProc.ShutDown;
  End;
End;

Procedure WindowCreate(Var FRM : TShrewForm);
Begin
 FRM.hInst := UNTFRMExp.GetModuleHandle(Nil);
  With FRM.WinClass Do
   Begin
    Style := $80;
    hIcon := UNTFRMExp.LoadIcon(FRM.hInst, PAnsiChar('MAINICON'));
    lpfnWndProc := @UNTFRMProc.WindowProc;
    hInstance := FRM.hInst;
    hbrBackground := 15 + 1;
    lpszClassName := FRM.ClsName;
    hCursor := UNTFRMExp.LoadCursor(0, PAnsiChar(32512));
   End;
 UNTFRMExp.InitCommonControls;
 UNTFRMExp.RegisterClass(FRM.WinClass);
 FRM.Handle := UNTFRMExp.CreateWindowEx(0, FRM.ClsName, 'Shrew',
 Cardinal($80000000) (* WS_POPUP *), FRM.Left, FRM.Top,
 FRM.Width, FRM.Height,
 0, 0,
 FRM.hInst, Nil);
End;

Procedure ImageCreate;
Begin
 FRMMain.IMGMain.Handle := CreateWindow('Static','' ,
  $40000000 or 14 or $10000000 (*WS_CHILD or SS_BITMAP or WS_VISIBLE*),
  0, 0,
  UNTFRMExp.GetSystemMetrics(0), Round(UNTFRMExp.GetSystemMetrics(1)/2),
  FRMMain.Handle, 0, FRMMain.hInst, nil);
End;

Procedure ShowAnimatedWindow;
Begin
 UNTFRMExp.AnimateWindow(FRMMain.Handle, 700, $00080000); {AW_BLEND}
 UNTFRMExp.AnimateWindow(FRMBack.Handle, 700, $00080000); {AW_BLEND}
End;

Procedure ShutDown;
Begin
  UNTFRMExp.UnRegisterClass(FRMMain.ClsName, FRMMain.hInst);
  UNTFRMExp.ExitProcess(FRMMain.hInst);
  UNTFRMExp.UnRegisterClass(FRMBack.ClsName, FRMBack.hInst);
  UNTFRMExp.ExitProcess(FRMBack.hInst);
End;

Procedure FillForms;
Begin
 FRMMain.ClsName := 'TShrew';
 FRMMain.Left := 0;
 FRMMain.Top  := 0;
 FRMMain.Width  := Round(UNTFRMExp.GetSystemMetrics(0)/2);
 FRMMain.Height := Round(UNTFRMExp.GetSystemMetrics(1)/2);
 FRMBack.ClsName := 'TBack';
 FRMBack.Left := Round(UNTFRMExp.GetSystemMetrics(0)/2);
 FRMBack.Top := 0;
 FRMBack.Width := Round(UNTFRMExp.GetSystemMetrics(0)/2);
 FRMBack.Height := Round(UNTFRMExp.GetSystemMetrics(1)/2);
End;

End.
Код:
 UNTFRMProc.FillForms;
 UNTFRMProc.WindowCreate(FRMMain);
 UNTFRMProc.WindowCreate(FRMBack);
 UNTFRMProc.ImageCreate;
 UNTFRMProc.ShowAnimatedWindow;
  While(UNTFRMExp.GetMessage(Msg, 0, 0, 0)) Do
   Begin
     UNTFRMExp.TranslateMessage(Msg);
     UNTFRMExp.DispatchMessage(Msg);
   End;
End.
Вроде все работает. Правильно ли написал или какая-то грубая ошибка идет при создании двух форм на один обработчик?

И такой вопрос: как мне FRMBack переместить за FRMMain?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 21.04.2010, 11:00   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Цитата:
И такой вопрос: как мне FRMBack переместить за FRMMain?
как насчет поиграться с WndParent, как-то так
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 21.04.2010, 11:09   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Поигрался, вроде сработало, спасибо.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
"Мёртвая" форма в QT4. jojahti Общие вопросы C/C++ 4 10.08.2009 03:24
Форма как "Инспектор обьектов" Dj_smart Общие вопросы Delphi 2 09.04.2008 21:01