Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Transporent, растворение в воздухе 
:(
    Опции темы
Гость_welt
Дата 7.11.2005, 09:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Такая проблема. Нужно сделать на winapi, чтобы окно с картинкой (или картинка) расворялось в воздухе. После того, как растворится, появляется основное окно программы. Короче, это типо заставки получается. Знаю, как написать без winapi.
Вот
Код

procedure (); 
var i, cavb : 0..255; 
 begin 
  if AlphaBlend=False then 
   begin 
     AlphaBlendValue:=255; 
     AlphaBlend:=True; 
   end; 
 cavb:=AlphaBlendValue; 
 for i := cavb downto 0 do 
  begin 
   AlphaBlendValue := i; 
   Application.ProcessMessages; 
  end; 
 end;



  Вверх
_hunter
Дата 7.11.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



наверху страницы ссылка по теме...
http://forum.vingrad.ru/index.php?showtopic=54390

P.S.
что такое Transporent?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
rsm
Дата 7.11.2005, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я в этой теме выкладывал маленький пример. Посмотри его и сразу решишь свою задачу наиболее простым и оптимальным способом smile
PM MAIL   Вверх
Quadr0
Дата 7.11.2005, 20:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 02:41
  Вверх
Гость_welt
Дата 8.11.2005, 00:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата

Я в этой теме выкладывал маленький пример. Посмотри его и сразу решишь свою задачу наиболее простым и оптимальным способом

rsm !?????? Причем здесь это. Я тебе про прозрачность формы....
а ты мне про какое-то свертывание в правый нижний угол (трей)....
  Вверх
rsm
Дата 8.11.2005, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
rsm !?????? Причем здесь это. Я тебе про прозрачность формы....

Слов нет, одно шипение... smile
ПОСТАВЬ ТОЛЬКО ОДНУ ГАЛОЧКУ AW_BLEND!!!
PM MAIL   Вверх
welt
Дата 9.11.2005, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



rsm, я перевел твою программу в делфи вот
Код

const
IDD_MAIN = 1001;
IDD_CHILD = 1002;
IDC_AW_SLIDE = 4003;
IDC_AW_BLEND = 4004;
IDC_AW_CENTER = 4005;
IDC_AW_HOR_POS = 4006;
IDC_AW_HOR_NEG = 4007;
IDC_AW_VER_POS = 4008;
IDC_AW_VER_NEG=  4009;
IDC_EXIT = 4011;

IDC_SHWIN = 4001;
IDC_INTERV = 4013;
IDC_TEXT = 4002;

var
  Form1: TForm1;
  hInst:longword;
  hChildDlg, hShWin:HWND;
 hBrush:LongWord;
 hFont:integer;
fShow:boolean = TRUE;
Params: TCreateParams;


function GetAnimateFlags(hDlg:HWND):DWORD;
var
 dwResult:DWORD;
begin


    if(IsDlgButtonChecked(hDlg, IDC_AW_SLIDE))<>0  then
        dwResult :=dwResult or AW_SLIDE;

    if(IsDlgButtonChecked(hDlg, IDC_AW_BLEND))<>0 then
        dwResult :=dwResult or AW_BLEND;

    if(IsDlgButtonChecked(hDlg, IDC_AW_CENTER))<>0 then
        dwResult :=dwResult or AW_CENTER;

    if(IsDlgButtonChecked(hDlg, IDC_AW_HOR_POS))<>0 then
        dwResult :=dwResult or AW_HOR_POSITIVE;

    if(IsDlgButtonChecked(hDlg, IDC_AW_HOR_NEG))<>0 then
        dwResult :=dwResult or AW_HOR_NEGATIVE;

    if(IsDlgButtonChecked(hDlg, IDC_AW_VER_POS))<>0 then
        dwResult :=dwResult or AW_VER_POSITIVE;

    if(IsDlgButtonChecked(hDlg, IDC_AW_VER_NEG))<>0 then
        dwResult :=dwResult or AW_VER_NEGATIVE;

    result :=dwResult;
end;


function ChildDialogProc( hwndDlg:hwnd; uMsg:uint; WPARAM: wParam; LPARAM: lParam) :boolean; stdcall;
begin
  case (uMsg) of
     WM_INITDIALOG:
       begin
        hBrush:=GetStockObject(NULL_BRUSH);
    hFont:=CreateFont(20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Verdana');
    SendDlgItemMessage(hwndDlg, IDC_TEXT, WM_SETFONT, hFont, 1);
    result:= TRUE;
       end;
     WM_CLOSE:
       begin
       DeleteObject(hBrush);
       DeleteObject(hFont);
       EndDialog(hwndDlg, 0);
       exit;
       end;
     WM_CTLCOLORSTATIC:
       begin
    SetTextColor( wParam, RGB(255, 0, 0));
    SetBkMode( wParam, TRANSPARENT);
    result:=  boolean(hBrush);
       end;
    end;//case
Result:=FALSE;

end;



function MainDialogProc( hwndDlg:hwnd; uMsg:uint; WPARAM: wParam; LPARAM: lParam) :boolean; stdcall;
//{
var
        UINT :LongWord;
    fTrans:LongBool;
begin
    case uMsg of   //

         WM_CLOSE:
            begin
                     EndDialog(hChildDlg, 0);
            EndDialog(hwndDlg, 0);
            exit;
                    end;
         WM_INITDIALOG:
                      begin
            hShWin:= GetDlgItem(hwndDlg, IDC_SHWIN);
                hChildDlg := CreateDialog(hInst, MAKEINTRESOURCE(IDD_CHILD), 0, @ChildDialogProc);
            SetDlgItemInt(hwndDlg, IDC_INTERV, 500, FALSE);
            SetWindowPos(hwndDlg, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
            result:= TRUE;
                      end;
         WM_COMMAND:
                   BEGIN  ////////
            case LOWORD(wParam) of  ////

                 IDC_EXIT:
                                       begin
                    SendMessage(hwndDlg, WM_CLOSE, 0, 0);
                    exit;
                                       end;
                 IDC_SHWIN:
                                       begin
                    uInt := GetDlgItemInt(hwndDlg, IDC_INTERV, fTrans, FALSE);
                    if ( uInt=0) or (fTrans=false)  then
                           begin
                        MessageBox(hwndDlg, 'Invalid interval value!', 'Error', MB_ICONERROR);
                        exit;
                      end;
                    if(fShow)  then
                      begin
                        SetWindowText(hShWin, '&Hide');
                        fShow:=FALSE;
                        AnimateWindow(hChildDlg, uInt, GetAnimateflags(hwndDlg) + AW_ACTIVATE);
                        ShowWindow(hChildDlg, SW_SHOW);
                     end
                                       else
                                         begin
                        SetWindowText(hShWin, '&Show');
                        fShow:=TRUE;
                        AnimateWindow(hChildDlg, uInt, GetAnimateFlags(hwndDlg) + AW_HIDE);
                        ShowWindow(hChildDlg, SW_HIDE);
                    end;
                                       exit;
                                 end;//IDC_SHWIN

                        End;//case LOWORD(wParam)
                   exit;
         end; // WM_COMMAND
    end; //case uMsg

result:=FALSE;
end;


Только у меня возник вопрос. Как ты создал окно? С помощью DIALOGEX ??
А как для Делфи быть? Куда мне внедрить переведенный мною код?
Я попробовал создать окно с CreateWindow.
Вот
Код

program CreateWindow;

uses
  Windows,messages;

{$R *.res}

var
  WindowClass: WndClassEx;
  Wnd: HWnd;
  Msg: TMsg;

function MainWinProc(hWnd : HWND; msg : uInt; wParam : WPARAM; lParam : LPARAM) : LRESULT; stdcall;

begin
case msg of
 WM_Paint   : exit;
 WM_DESTROY : PostQuitMessage(0);
end;
result := DefWindowProc(hWnd,msg,wParam,lParam);


end;

begin
WindowClass.cbSize:=sizeof(WndClassEx);
WindowClass.style:=CS_DBLCLKS or CS_OWNDC or CS_HREDRAW or CS_VREDRAW;
WindowClass.lpfnWndProc:= @MainWinProc ;
WindowClass.cbClsExtra:=0;
WindowClass.cbWndExtra:=0;
WindowClass.hInstance:=hinstance;
WindowClass.hIcon:=LoadIcon(0,IDI_APPLICATION);
WindowClass.hCursor:=LoadCursor(0, IDC_ARROW);
WindowClass.hbrBackground:=GetStockObject(GRAY_BRUSH);
WindowClass.lpszMenuName:=0;
WindowClass.lpszClassName:='WindowClass';
WindowClass.hIconSm:=LoadIcon(0,IDI_APPLICATION);



RegisterClassEx(WindowClass);
Wnd:= CreateWindowEx(0, 'WindowClass',
'Окно', WS_OVERLAPPEDWINDOW+WS_VISIBLE, 100, 100, 500, 400, 0, 0, HInstance, nil);
ShowWindow(Wnd, CmdShow);
UpdateWindow(Wnd);
while GetMessage(Msg, 0, 0, 0) do
begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
end;
//result:=msg.wParam;

end.


КАк мне внедрить твой код в программку для создания окна, что приведена выше.. Короче, хочу чтобы твой пример запускался на делфи. Т.е полностью перевести его... Помоги.
PM MAIL   Вверх
p0s0l
Дата 9.11.2005, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Код

function MainWinProc(hWnd : HWND; msg : uInt; wParam : WPARAM; lParam : LPARAM) : LRESULT; stdcall;    
begin    
case msg of    
 WM_Paint   : exit;
 WM_DESTROY : PostQuitMessage(0);
 WM_CLOSE   : AnimateWindow(Wnd, 200, AW_HIDE or AW_BLEND);
end;

...

Wnd:= CreateWindowEx(0, 'WindowClass',    
'Окно', WS_OVERLAPPEDWINDOW, 100, 100, 500, 400, 0, 0, HInstance, nil);
AnimateWindow(Wnd, 200, AW_ACTIVATE or AW_BLEND);    
while GetMessage(Msg, 0, 0, 0) do    
begin    
  TranslateMessage(Msg);    
  DispatchMessage(Msg);    
end;    



--------------------
С уважением, г-н Посол.
PM   Вверх
rsm
Дата 9.11.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(welt @ 9.11.2005, 04:25)
Т.е полностью перевести его... Помоги.

Enjoy! smile

Это сообщение отредактировал(а) rsm - 9.11.2005, 13:46

Присоединённый файл ( Кол-во скачиваний: 19 )
Присоединённый файл  aniwin_delphi.zip 12,70 Kb
PM MAIL   Вверх
welt
Дата 9.11.2005, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



rsm, Спасибо. Расскажи еще как ты создал .res файл.
Я открыл его Restorator'ом. А как создавать такие файлы не знаю. Попробовал-не получилось.
PM MAIL   Вверх
rsm
Дата 9.11.2005, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(welt @ 9.11.2005, 20:59)
Расскажи еще как ты создал .res файл.

Использовал стандартный компилятор ресурсов rc.exe из Visual C++. Пишешь "rc rsrc.rc" и получаешь rsrc.res.
PM MAIL   Вверх
welt
Дата 9.11.2005, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
Пишешь "rc rsrc.rc" и получаешь rsrc.res

rsm! Так то оно так. Но ведь ты как-то создавал диалог, добавлял кнопки и CheckBox'ы. Как?. А где ты написал обработчики для кнопок (Exit, Show) и для Edit?????
PM MAIL   Вверх
rsm
Дата 9.11.2005, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(welt @ 9.11.2005, 22:51)
создавал диалог, добавлял кнопки и CheckBox'ы

Лучше и проще всего взять для этого ResEd (395 Кб).

Цитата(welt @ 9.11.2005, 22:51)
А где ты написал обработчики для кнопок (Exit, Show) и для Edit?

В коде однако.
Код

      WM_COMMAND:
         case LOWORD(wParam) of
            IDC_EXIT:
               // обработчик кнопки "Exit"
               SendMessage(hDlg, WM_CLOSE, 0, 0);

            IDC_SHWIN:
               begin 
                  // обработчик кнопки "Show/Hide"

Код

            // текст в текстовом поле = "500"
            SetDlgItemInt(hDlg, IDC_INTERV, 500, false);
...
                  // uInt = число из текстового поля
                  uInt:= GetDlgItemInt(hDlg, IDC_INTERV, fTrans, false);
                  // проверка на корректность числа (не равно 0)
                  if (uInt = 0) or (not fTrans) then
                     begin
                        MessageBox(hDlg, 'Invalid interval value!', 'Error', MB_ICONERROR);
                        exit;
                     end;


Это сообщение отредактировал(а) rsm - 9.11.2005, 23:34
PM MAIL   Вверх
Guest
Дата 10.11.2005, 00:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











rsm Так этот ResEd открывает только *.rc (для С), а не *.res (для Делфи)
А где ты обработчики для CheckBox'ов писал?
  Вверх
rsm
Дата 10.11.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Guest @ 10.11.2005, 02:21)
Так этот ResEd открывает только *.rc

Разумеется, ведь это редактор ресурсов. Создаешь новый диалог, кидаешь на него контролы, сохраняешь, компилируешь с rc.exe и получаешь файл ресурсов *.res, который потом можно подсунуть любому нормальному компилятору.

Цитата(Guest @ 10.11.2005, 02:21)
А где ты обработчики для CheckBox'ов писал?

Код

    if IsDlgButtonChecked(hDlg, IDC_AW_SLIDE) <> 0 then
...


Это сообщение отредактировал(а) rsm - 10.11.2005, 14:53
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

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

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


 




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


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

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