На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rouse_, jack128, Krid
  
    > приложение на апи , мое первое
      Вот тебе примерчик:

      ExpandedWrap disabled
        ////////////////////////////////////////////////////////////////////////////////
        //
        //  ****************************************************************************
        //  * Unit Name : Access
        //  * Purpose   : демо простого приложения на АПИ.
        //  * Author    : Александр (Rouse_) Багель
        //  * Version   : 1.0
        //  ****************************************************************************
        //
         
        program Access;
         
        uses
          Windows,
          Messages;
         
        resourcestring
          TXT_CAPTION = 'Ввод пароля';
          TXT_INSTALL = 'Принять';
          TXT_CANCEL = 'Отмена';
          TXT_STATUS = 'Введите пароль:';
          TXT_NEWUSER = 'Значение пароля: ';
         
        var
          MainWindow    : TWndClassEx;
          Handle,
          hFontNormal,
          btnOk,
          btnCancel,
          Edit,
          Label1        : HWND;
          Msg           : TMsg;
          Left,
          Top,
          Width,
          Height        : Integer;
         
        const
          BTN_APPLY_ID = 100;
          BTN_CANCEL_ID = 105;
          EDIT_ID = 110;
         
        // Центрирование формы
        // =============================================================================
        procedure CenterMainForm;
        var
          ScrWidth, ScrHeight: Cardinal;
        begin
          ScrWidth := GetSystemMetrics(SM_CXSCREEN);
          ScrHeight := GetSystemMetrics(SM_CYSCREEN);
          Left := (Integer(ScrWidth) - Width) div 2;
          Top := (Integer(ScrHeight) - Height) div 2;
        end;
         
         
        // Главная оконная процедура
        // =============================================================================
        function WindowProc(Wnd: HWND; Msg: Integer;
          WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
        var
          S: String;
          Len: Integer;
          DC: HDC;
        begin
          Result := 0;
          case Msg of
            WM_DESTROY:
            begin
              PostQuitMessage(0);
              Result:=0;
            end;
            WM_COMMAND:
            begin
              case LoWord(WParam) of
                BTN_APPLY_ID: // Нажатие на кнопку "Принять"
                begin
                  Len := SendMessage(Edit, WM_GETTEXTLENGTH, 0, 0);
                  Inc(Len);
                  SetLength(S, Len);
                  SendMessage(Edit, WM_GETTEXT, Len, Integer(@S[1]));
                  MessageBox(Handle, PChar(TXT_NEWUSER + S), PChar(TXT_CAPTION), MB_OK);
                  PostQuitMessage(0);
                  Result := 0;
                end;
                BTN_CANCEL_ID: // Нажатие на кнопку "Отмена"
                begin
                  PostQuitMessage(0);
                  Result := 0;
                end;
                EDIT_ID: // Обработчик Edit-а
                  // В зависимости от кол-ва символов, включаем/отключаем кнопку "Принять"
                  EnableWindow(btnOk, Boolean(SendMessage(Edit, WM_GETTEXTLENGTH, 0, 0)));
              end;
            end;
            WM_CTLCOLORSTATIC: // Изменения цвета STATIC
            begin
              if LParam = Label1 then
              begin
                Result := DefWindowProc(Wnd, Msg, WParam, LParam);
                SetTextColor(WParam, $FF0000);
              end;                                  
            end;
          else
            Result := DefWindowProc(Wnd, Msg, WParam, LParam);
          end;
        end;
         
         
        // Здесь программа стартует
        // =============================================================================
        begin
          // Инициализируем оконный класс
          with MainWindow do
          begin
            cbSize := SizeOf(MainWindow);
            style := CS_HREDRAW or CS_VREDRAW;
            lpfnWndProc := @WindowProc;
            cbClsExtra := 0;
            cbWndExtra := 0;
            hIcon := LoadIcon(0, IDI_APPLICATION);
            hCursor  := LoadCursor(0, IDC_ARROW);
            hbrBackground := COLOR_BTNFACE + 1;
            lpszMenuName := nil;
            lpszClassName := 'TAccessForm';
          end;
          MainWindow.hInstance := HInstance;
         
          // Регистрируем оконный класс
          if RegisterClassEx(MainWindow) = 0 then Exit;
         
          // Подготавливаем координаты для центрирования формы
          Width := 360;
          Height := 130;
          CenterMainForm;
         
          // Создаем форму
          Handle := CreateWindow('TAccessForm',
            PChar(TXT_CAPTION), WS_OVERLAPPED or WS_SYSMENU,
            Left, Top, Width, Height, 0, 0, HInstance, nil);
         
          // Создаем кнопку "Принять"
          btnOk := CreateWindow('BUTTON', PChar(TXT_INSTALL),
            BS_PUSHBUTTON or WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,
            270, 65, 75, 25, Handle, BTN_APPLY_ID, hInstance, nil);
         
          // Отключаем ее до ввода пароля
          EnableWindow(btnOk, False);
         
          // Создаем кнопку "Отмена"
          btnCancel := CreateWindow('BUTTON', PChar(TXT_CANCEL),
            BS_PUSHBUTTON or WS_CHILD or WS_VISIBLE,
            190, 65, 75, 25, Handle, BTN_CANCEL_ID, hInstance, nil);
         
          // Создаем поле ввода
          Edit := CreateWindowEx(WS_EX_CLIENTEDGE, 'EDIT', nil, WS_CHILD or WS_VISIBLE,
            10, 30, 335, 21, Handle, EDIT_ID, HInstance, nil);
         
          // Задаем симфол который будет отображаться ри вводе пароля
          SendMessage(Edit, EM_SETPASSWORDCHAR, Ord('*'), 0);
         
          // Создаем Label
          Label1 := CreateWindow('STATIC', PChar(TXT_STATUS),
            WS_VISIBLE or WS_CHILD, 10, 13, 230, 14, Handle, 0, hInstance, nil);
         
          // Создаем нужный шрифт
          hFontNormal := CreateFont(-11, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET,
                              OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
                              DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');
         
          // назначаем этот шрифт всем оконным элементам
          if hFontNormal <> 0 then
          begin
            SendMessage(btnOk, WM_SETFONT, hFontNormal, 0);
            SendMessage(btnCancel, WM_SETFONT, hFontNormal, 0);
            SendMessage(Edit, WM_SETFONT, hFontNormal, 0);
            SendMessage(Label1, WM_SETFONT, hFontNormal, 0);
          end;
         
          // Показываем окно
          ShowWindow(Handle, SW_SHOW);
          // Ставим его поверх всех
          SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0,
            SWP_NOSIZE or SWP_NOMOVE);
          // Ставим фокус в поле ввода
          SetFocus(Edit);
         
          // Начинаем крутить цикл выборки сообщений
          while GetMessage(Msg, 0, 0, 0) do
          begin
            TranslateMessage(Msg);
            DispatchMessage(Msg);
          end;
          
        end.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0190 ]   [ 16 queries used ]   [ Generated: 28.03.24, 11:36 GMT ]