На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
В этом разделе можно создавать темы, которые относятся к поколению 32-битных компиляторов.
Здесь решаются вопросы портирования кода из старого доброго Турбо Паскаля в FPC, TMT, VP, GPC компиляторы, а также особенностей программирования на них для Windows/Linux и других ОС.
Указывайте тип компилятора, его версию, а также платформу (Windows/Linux/..) компиляции, другими словами, Target.
Модераторы: volvo877
  
> dcc32.exe ANSI и UNICODE
    Здравствуйте.
    Мне както сделать так чтобы програму можно-бы скомпилоровать для 8 битной (ANSI) и 16 битной (UNICODE) кодировок.
    Сам точно незнаю что тут точно имееться ввиду (условие такое)
    Вот такой код
    ExpandedWrap disabled
      program A1;
      uses
       WinProcs, WinTypes;
       
      var
       cyClient, cxCaps, cyChar, cyDesc : Integer;
       
      const
       iNumTypes = 5;
       show: array [0 .. iNumTypes] of
       record
          li : LongInt;
          sz : PChar;
       end =
       (
          (li:HS_BDIAGONAL;  sz:'HS_BDIAGONAL'),
          (li:HS_CROSS;      sz:'HS_CROSS'),
          (li:HS_DIAGCROSS;  sz:'HS_DIAGCROSS'),
          (li:HS_FDIAGONAL;  sz:'HS_FDIAGONAL'),
          (li:HS_HORIZONTAL; sz:'HS_HORIZONTAL'),
          (li:HS_VERTICAL;   sz:'HS_VERTICAL')
       );
       
       
      function WndProc(myWnd : HWND; Msg : Word;
       myWParam : Word; myLParam: LongInt) : LongInt; export;
      var
       Ps: TPaintStruct;
       NewBrush: HBRUSH;
       fm: TTextMetric;
       brsh: HBRUSH;
       i, h, w: Integer;
       rect: TRect;
       
       {hhres: LongBool;}
       myDC : HDC;
      begin
       WndProc := 0;
       
       case Msg of
          WM_CREATE:
          begin
             myDC := GetDC(myWnd);
             GetTextMetrics(myDC, fm);
             cxCaps := 20;
             cyChar := fm.tmHeight + 100;
             cyDesc := fm.tmDescent;
             ReleaseDC(myWnd, myDC);
          end;
       
          WM_PAINT:
          begin
             myDC := BeginPaint(myWnd, Ps);
             for i := 0 to iNumTypes do
             begin
                brsh := CreateHatchBrush(show[i].li, 0);
                rect.top := 20 + (cyChar div 4) + (i mod 3)*(cyChar);
                rect.left := (i div 3)*250 + 10;
                rect.bottom := rect.top + cyChar;
                rect.right:= rect.left + 120;
                SelectObject(myDC, brsh);
                DrawText(myDC, show[i].sz, -1, rect, DT_RIGHT);
                h := rect.left + 130;
                w:= 10 + (i mod 3)*(cyChar);
                Rectangle(myDC, h + 10, w, h + cyChar - 10, w + cyChar -20 );
                DeleteObject(brsh);
             end;
             EndPaint(myWnd, Ps);
          end;
       
          WM_CLOSE:
          begin
             DestroyWindow(myWnd);
          end;
       
          WM_DESTROY:
          begin
             PostQuitMessage(0);
          end;
       
          else
             WndProc := DefWindowProc(myWnd, msg, myWParam, myLParam);
       end;
      end;
       
      const
       szClientClass = 'Patterns';
       flFrameFlags =
          WS_CAPTION or WS_SYSMENU or WS_SIZEBOX or
          WS_MINIMIZEBOX or WS_MAXIMIZEBOX;
       
      var
       wc : TWndClass;
       MainWnd : HWND;
       Msg : TMsg;
      begin
       wc.style := 0;
       wc.lpfnWndProc := @WndProc;
       wc.cbClsExtra := 0;
       wc.cbWndExtra := 0;
       wc.hInstance := hInstance;
       wc.hIcon := LoadIcon(0, IDI_APPLICATION);
       wc.hCursor := LoadCursor(0, IDC_ARROW);
       wc.hbrBackground := COLOR_WINDOW + 1;
       wc.lpszMenuName := nil;
       wc.lpszClassName := szClientClass;
       
       if not RegisterClass(wc) then
       begin
          MessageBox(0, 'RegisterClass Failed!', 'Error!',
                     MB_ICONEXCLAMATION or MB_OK);
          Exit;
       end;
       
       MainWnd := CreateWindow(szClientClass, szClientClass, flFrameFlags,
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               580, 360, 0, 0, 0, nil);
       if MainWnd = 0 then
       begin
          MessageBox(0, 'CreateWindow Failed!', 'Error!',
                     MB_ICONEXCLAMATION or MB_OK);
          Exit;
       end;
       
       ShowWindow(MainWnd, SW_SHOW);
       UpdateWindow(MainWnd);
       
       while GetMessage(Msg, 0, 0, 0) do
       begin
          TranslateMessage(Msg);
          DispatchMessage(Msg);
       end;
       DestroyWindow(MainWnd);
      end.

    сам компилятор http://depositfiles.com/files/69425hg42
    сами бибилиотеки WinCrt, WinProcs, WinTypes в калоге есть. Отсуда http://pascal.sources.ru/museum/bp7_13.zip
    Можете кто знает чтото по этому поводу?
      P.S.
      Другими словами мне нужно както оформить, что-бы программу можно было скомпилировать для 8 битной (ANSI) и 16 битной (UNICODE) кодировок.

      Добавлено
      С этим делом мне уже прояснилось.
        Кстати можете ктонибудь подсказать как тут лучше вот такой косок кода оформить на pascal
        ExpandedWrap disabled
          #define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
          CreateWindowExA(0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
           
          #define CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
          CreateWindowExW(0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
           
          #ifdef UNICODE
          #define CreateWindow  CreateWindowW
          #else
          #define CreateWindow  CreateWindowA
          #endif

        т.е. что-бы потом можно было указать директиву компилятору UNICODE. Т.е. иметь возможность переключаться компилируя.

        Добавлено
        Сам кусок взял отсуда http://msdn.microsoft.com/en-us/library/ms...v=VS.85%29.aspx
          Цитата ccode10 @
          что-бы потом можно было указать директиву компилятору UNICODE. Т.е. иметь возможность переключаться компилируя.
          Вот так?
          ExpandedWrap disabled
            {$ifdef UNICODE}
            function CreateWindowEx(dwExStyle: integer; lpClassName: PWideChar; lpWindowName: PWideChar;
               dwStyle: integer; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;
               hInstance: HINST; lpParam: Pointer): HWND; stdcall;
            {$else}
            function CreateWindowEx(dwExStyle: integer; lpClassName: PAnsiChar; lpWindowName: PAnsiChar;
               dwStyle: integer; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;
               hInstance: HINST; lpParam: Pointer): HWND; stdcall;
            {$endif}
             
            implementation
             
            {$ifdef UNICODE}
            function  CreateWindowEx; external 'USER32' name 'CreateWindowExW';
            {$else}
            function  CreateWindowEx; external 'USER32' name 'CreateWindowExA';
            {$endif}
          , хотя можно и объединить:

          ExpandedWrap disabled
            {$ifdef UNICODE}
            function CreateWindowEx(dwExStyle: integer; lpClassName: PWideChar; lpWindowName: PWideChar;
               dwStyle: integer; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;
               hInstance: HINST; lpParam: Pointer): HWND; stdcall; external 'USER32' name 'CreateWindowExW';
            {$else}
            function CreateWindowEx(dwExStyle: integer; lpClassName: PAnsiChar; lpWindowName: PAnsiChar;
               dwStyle: integer; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;
               hInstance: HINST; lpParam: Pointer): HWND; stdcall; external 'USER32' name 'CreateWindowExA';
            {$endif}
            volvo877, сейчас делаю.
            У меня вопрос такой возник.
            ВОт в CreateWindowEx я вижу какие параметры идут как ANSI или UNICODE соотвественно.

            А вот какие у этой функции параметры DefWindowProc?
            Например если я например использую DefWindowProcW, то где тут участвует UNICODE? Т.е. это в самой функции окна?
            Описание http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx
              В прототипах нет разницы, но если у тебя приложение Юникодное, то ты должен работать с DefWindowProcW, а не с DefWindowProcA. То есть для таких функций, у которых параметры совпадают, можешь делать:

              ExpandedWrap disabled
                function DefWindowProc(Wnd: HWnd; Msg : UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
                {$ifdef UNICODE}
                external 'USER32' name 'DefWindowProcW';
                {$else}
                external 'USER32' name 'DefWindowProcA';
                {$endif}
                Вот так шас получилось
                ExpandedWrap disabled
                   program b2;
                   
                   uses
                     U_Patterns;
                   
                   var
                     cyClient, cxCaps, cyChar, cyDesc : Integer;
                   
                   const
                     iNumTypes = 5;
                     show: array [0..iNumTypes] of
                     record
                       li : LongInt;
                       {$ifdef UNICODE}
                       sz : PWideChar;
                       {$else}
                       sz : PAnsiChar;
                       {$endif}
                     end =
                     (
                       (li:HS_BDIAGONAL;  sz:'HS_BDIAGONAL'),
                       (li:HS_CROSS;      sz:'HS_CROSS'),
                       (li:HS_DIAGCROSS;  sz:'HS_DIAGCROSS'),
                       (li:HS_FDIAGONAL;  sz:'HS_FDIAGONAL'),
                       (li:HS_HORIZONTAL; sz:'HS_HORIZONTAL'),
                       (li:HS_VERTICAL;   sz:'HS_VERTICAL')
                     );
                   
                   function WndProc(myWnd: hwnd; msg : UINT; mywparam : WPARAM;
                                    mylparam: LPARAM): LRESULT; stdcall; export;
                   var
                     Ps: TPaintStruct;
                     NewBrush: HBRUSH;
                     fm: TTextMetric;
                     brsh: HBRUSH;
                     i, h, w: Integer;
                     rect: TRect;
                   
                     myDC: HDC;
                   begin
                     WndProc := 0;
                   
                     case Msg of
                   
                       WM_CREATE:
                         begin
                           myDC := GetDC(myWnd);
                           GetTextMetrics(myDC, fm);
                           cxCaps := 20;
                           cyChar := fm.tmHeight + 100;
                           cyDesc := fm.tmDescent;
                           ReleaseDC(myWnd, myDC);
                         end;
                   
                       WM_PAINT:
                         begin
                           myDC := BeginPaint(myWnd, Ps);
                           for i := 0 to iNumTypes do
                           begin
                             brsh := CreateHatchBrush(show[i].li, 0);
                             rect.top := 20 + (cyChar div 4) + (i mod 3) * (cyChar);
                             rect.left := (i div 3) * 250 + 10;
                             rect.bottom := rect.top + cyChar;
                             rect.right := rect.left + 120;
                             SelectObject(myDC, brsh);
                             DrawText(myDC, show[i].sz, -1, rect, DT_RIGHT);
                             h := rect.left + 130;
                             w := 10 + (i mod 3) * (cyChar);
                             Rectangle(myDC, h + 10, w, h + cyChar - 10, w + cyChar - 20);
                             DeleteObject(brsh);
                           end;
                           EndPaint(myWnd, Ps);
                         end;
                   
                       WM_CLOSE:
                         begin
                           DestroyWindow(myWnd);
                         end;
                   
                       WM_DESTROY:
                         begin
                           PostQuitMessage(0);
                         end;
                   
                     else
                       WndProc := DefWindowProc(myWnd, Msg, myWParam, myLParam);
                     end;
                   end;
                   
                   const
                     szClientClass = 'Patterns';
                     flFrameFlags = WS_CAPTION or WS_SYSMENU or WS_SIZEBOX or WS_MINIMIZEBOX or
                       WS_MAXIMIZEBOX;
                   
                   var
                     wc: TWndClassEx;
                     MainWnd: HWND;
                     Msg: TMsg;
                   
                   begin
                     wc.cbSize := sizeof(TWndClassEx);
                     wc.style := 0;
                     wc.lpfnWndProc := @WndProc;
                     wc.cbClsExtra := 0;
                     wc.cbWndExtra := 0;
                     wc.hInstance := hInstance;
                     wc.hIcon := LoadIcon(0, IDI_APPLICATION);
                     wc.hCursor := LoadCursor(0, IDC_ARROW);
                     wc.hbrBackground := COLOR_WINDOW + 1;
                     wc.lpszMenuName := nil;
                     wc.lpszClassName := szClientClass;
                     // wc.hIconSm := LoadIcon(0, IDI_APPLICATION);
                   
                   
                     if RegisterClassEx(wc) = 0 then
                     begin
                       MessageBox(0, 'RegisterClass Failed!', 'Error!',
                         MB_ICONEXCLAMATION or MB_OK);
                       Exit;
                     end;
                   
                     MainWnd := CreateWindowEx(0, szClientClass, szClientClass, flFrameFlags,
                       CW_USEDEFAULT, CW_USEDEFAULT, 580, 400, 0, 0, hinstance, nil);
                     if MainWnd = 0 then
                     begin
                       MessageBox(0, 'CreateWindow Failed!', 'Error!',
                         MB_ICONEXCLAMATION or MB_OK);
                       Exit;
                     end;
                   
                     ShowWindow(MainWnd, CmdShow{SW_SHOW});
                     UpdateWindow(MainWnd);
                   
                     while GetMessage(Msg, 0, 0, 0) do
                     begin
                       TranslateMessage(Msg);
                       DispatchMessage(Msg);
                     end;
                     DestroyWindow(MainWnd);
                   
                   end.

                U_Patterns.pas
                ExpandedWrap disabled
                  unit U_Patterns;
                   
                  interface
                   
                  type
                     {$ifdef UNICODE}
                     MakeIntResource = PWideChar;
                     {$else}
                     MakeIntResource = PAnsiChar;
                     {$endif}
                   
                  const
                     hs_Horizontal = 0;       { ----- }
                     hs_Vertical   = 1;       { ||||| }
                     hs_FDiagonal  = 2;       { ///// }
                     hs_BDiagonal  = 3;       { \\\\\ }
                     hs_Cross      = 4;       { +++++ }
                     hs_DiagCross  = 5;       { xxxxx }
                      
                     WM_CREATE  = $0001;
                     WM_PAINT   = $000F;
                     WM_CLOSE   = $0010;
                     WM_DESTROY = $0002;
                      
                     DT_RIGHT       = $0002;
                     WS_CAPTION     = $00C00000;
                     WS_SYSMENU     = $00080000;
                     WS_THICKFRAME  = $00040000;
                     WS_SIZEBOX     = WS_THICKFRAME;
                     WS_MINIMIZEBOX = $00020000;
                     WS_MAXIMIZEBOX = $00010000;
                    
                     IDI_APPLICATION = MakeIntResource(32512);
                     IDC_ARROW       = MakeIntResource(32512);
                     COLOR_WINDOW    = 5;  
                    
                     MB_ICONEXCLAMATION = $0030;
                     MB_OK              = $0000;
                     CW_USEDEFAULT = Integer($8000);
                      
                  type
                     Bool     = WordBool;          { Windows compatible boolean }
                     THandle  = Integer;           { Global memory handle }
                     TFarProc = Pointer;           { Procedure address }
                   
                     HWnd    = THandle;
                     HDC     = THandle;
                     HBrush  = THandle;
                     HIcon   = THandle;
                     HCursor = THandle;  
                     HMenu   = THandle;
                   
                     UINT = Integer;
                     HINST = THandle;
                   
                     LRESULT = LongInt;
                     WPARAM  = LongInt;
                     LPARAM  = LongInt;
                   
                     PRect = ^TRect;
                     TRect = packed record
                        left: Integer;
                        top: Integer;
                        right: Integer;
                        bottom: Integer;
                     end;  
                      
                     PPaintStruct = ^TPaintStruct;
                     TPaintStruct = packed record
                        hdc: HDC;
                        fErase: Bool;
                        rcPaint: TRect;
                        fRestore: Bool;
                        fIncUpdate: Bool;
                        (*
                        rgbReserved: array[0..15] of Byte;
                        *)
                        rgbReserved: array[0..31] of Byte;
                     end;
                      
                     PTextMetric = ^TTextMetric;
                     TTextMetric = packed record
                        tmHeight: Longint;
                        tmAscent: Longint;
                        tmDescent: Longint;
                        tmInternalLeading: Longint;
                        tmExternalLeading: Longint;
                        tmAveCharWidth: Longint;
                        tmMaxCharWidth: Longint;
                        tmWeight: Longint;
                        tmOverhang: Longint;
                        tmDigitizedAspectX: Longint;
                        tmDigitizedAspectY: Longint;
                        tmFirstChar: Char;
                        tmLastChar: Char;
                        tmDefaultChar: Char;
                        tmBreakChar: Char;
                        tmItalic: Byte;
                        tmUnderlined: Byte;
                        tmStruckOut: Byte;
                        tmPitchAndFamily: Byte;
                        tmCharSet: Byte;
                     end;
                      
                     TColorRef = LongInt;
                     TWndClassExA = packed record
                        cbSize: UINT;
                        style: UINT;
                        lpfnWndProc: TFarProc;
                        cbClsExtra: Integer;
                        cbWndExtra: Integer;
                        hInstance: HINST;
                        hIcon: HICON;
                        hCursor: HCURSOR;
                        hbrBackground: HBRUSH;
                        lpszMenuName: PChar;
                        lpszClassName: PChar;
                        hIconSm: HICON;
                     end;
                     TWndClassEx = TWndClassExA;
                    
                     PPoint = ^TPoint;
                     TPoint = packed record
                        x: Integer;
                        y: Integer;
                     end;
                      
                     PMsg = ^TMsg;
                     TMsg = packed record
                        (*
                          hwnd: HWnd;
                          message: Word;
                          wParam: Word;
                          lParam: LongInt;
                          time: Longint;
                          pt: TPoint;
                      *)
                        hwnd: HWND;
                        message: UINT;
                        wParam: WPARAM;
                        lParam: LPARAM;
                        time: Integer;
                        pt: TPoint;
                     end;
                    
                  function BeginPaint(Wnd: HWnd; var Paint: TPaintStruct): HDC; stdcall;
                  function CreateHatchBrush(Index: Integer; Color: TColorRef): HBrush; stdcall;
                  function DeleteObject(Handle: THandle): Bool; stdcall;
                  function DestroyWindow(Wnd: HWnd): Bool; stdcall;
                  procedure EndPaint(Wnd: HWnd; const Paint: TPaintStruct); stdcall;
                  function GetDC(Wnd: HWnd): HDC; stdcall;
                  procedure PostQuitMessage(ExitCode: Integer); stdcall;
                  function Rectangle(DC: HDC; X1, Y1, X2, Y2: Integer): Bool; stdcall;
                  function ReleaseDC(Wnd: HWnd; DC: HDC): Integer; stdcall;
                  function SelectObject(DC: HDC; hObject: THandle): THandle; stdcall;
                  function ShowWindow(Wnd: HWnd; CmdShow: Integer): Bool; stdcall;
                  function TranslateMessage(const Msg: TMsg): Bool; stdcall;
                  function UpdateWindow(Wnd: HWnd) : bool; stdcall;
                   
                  {$ifdef UNICODE}
                  function CreateWindowEx(dwExStyle: integer; lpClassName: PWideChar; lpWindowName: PWideChar;
                      dwStyle: integer; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;
                      hInstance: HINST; lpParam: Pointer): HWND; stdcall; external 'USER32' name 'CreateWindowExW';
                      
                  function DefWindowProc(Wnd: HWnd; Msg : UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; external 'USER32' name 'DefWindowProcW';
                  function DispatchMessage(const Msg: TMsg): LongInt; stdcall; external 'USER32' name 'DispatchMessageW';
                  function DrawText(DC: HDC; Str: PWideChar; Count: Integer; var Rect: TRect; Format: Word): Integer; stdcall; external 'USER32' name 'DrawTextW';
                  function GetMessage(var Msg: TMsg; Wnd: HWnd; MsgFilterMin, MsgFilterMax: integer): Bool; stdcall; external 'USER32' name 'GetMessageW';
                  function GetTextMetrics(DC: HDC; var Metrics: TTextMetric): Bool; stdcall; external 'GDI32' name 'GetTextMetricsW';
                  function LoadCursor(Instance: THandle; CursorName: PWideChar): HCursor; stdcall; external 'USER32' name 'LoadCursorW';
                  function LoadIcon(Instance: THandle; IconName: PWideChar): HIcon; stdcall; external 'USER32' name 'LoadIconW';
                  function MessageBox(WndParent: HWnd; Txt, Caption: PWideChar; TextType: Word): Integer; stdcall; external 'USER32' name 'MessageBoxW';
                  function RegisterClassEx(const WndClass : TWndClassEx) : word; stdcall; external 'USER32' name 'RegisterClassExW';
                   
                  {$else}
                  function CreateWindowEx(dwExStyle: integer; lpClassName: PAnsiChar; lpWindowName: PAnsiChar;
                      dwStyle: integer; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;
                      hInstance: HINST; lpParam: Pointer): HWND; stdcall; external 'USER32' name 'CreateWindowExA';
                      
                  function DefWindowProc(Wnd: HWnd; Msg : UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; external 'USER32' name 'DefWindowProcA';
                  function DispatchMessage(const Msg: TMsg): LongInt; stdcall; external 'USER32' name 'DispatchMessageA';
                  function DrawText(DC: HDC; Str: PAnsiChar; Count: Integer; var Rect: TRect; Format: Word): Integer; stdcall; external 'USER32' name 'DrawTextA';
                  function GetMessage(var Msg: TMsg; Wnd: HWnd; MsgFilterMin, MsgFilterMax: integer): Bool; stdcall; external 'USER32' name 'GetMessageA';
                  function GetTextMetrics(DC: HDC; var Metrics: TTextMetric): Bool; stdcall; external 'GDI32' name 'GetTextMetricsA';
                  function LoadCursor(Instance: THandle; CursorName: PAnsiChar): HCursor; stdcall; external 'USER32' name 'LoadCursorA';
                  function LoadIcon(Instance: THandle; IconName: PAnsiChar): HIcon; stdcall; external 'USER32' name 'LoadIconA';
                  function MessageBox(WndParent: HWnd; Txt, Caption: PAnsiChar; TextType: Word): Integer; stdcall; external 'USER32' name 'MessageBoxA';
                  function RegisterClassEx(const WndClass : TWndClassEx) : word; stdcall; external 'USER32' name 'RegisterClassExA';
                   
                  {$endif}
                   
                  implementation
                   
                  function  BeginPaint; external 'USER32' name 'BeginPaint';
                  function  DeleteObject; external 'GDI32' name 'DeleteObject';
                  function  DestroyWindow; external 'USER32' name 'DestroyWindow';
                  procedure EndPaint; external 'USER32' name 'EndPaint';
                  function  GetDC; external 'USER32' name 'GetDC';
                  function  ReleaseDC; external 'USER32' name 'ReleaseDC';
                  procedure PostQuitMessage; external 'USER32' name 'PostQuitMessage';
                  function  Rectangle; external 'GDI32' name 'Rectangle';
                  function  SelectObject; external 'GDI32' name 'SelectObject';
                  function  ShowWindow; external 'USER32' name 'ShowWindow';
                  function  TranslateMessage; external 'USER32' name 'TranslateMessage';
                  function  UpdateWindow; external 'USER32' name 'UpdateWindow';
                  function  CreateHatchBrush; external 'GDI32' name 'CreateHatchBrush';
                   
                   
                   
                   
                  end.

                компилирую
                Цитата
                dcc32 -b -UC:\BD20min\LIB -DUNICODE b2.pas

                запускаю и вижу
                Цитата

                CreateWindow Failed!


                Добавлено
                А как толком этот уникод задаёться?

                Добавлено
                Потомучто если я делаю эти два файла в UTF-8 кодировке, то
                Цитата
                C:\BD20min\BIN>dcc32 -b -UC:\BD20min\LIB -DUNICODE b2.pas
                Delphi for Win32 Version 9.0 Copyright © 1983,96 Borland International
                b2.pas(1) Error: Illegal character in input file: 'п' ($EF)
                U_Patterns.pas(1) Error: Illegal character in input file: 'п' ($EF)
                U_Patterns.pas(212)
                b2.pas(6) Fatal: Could not compile used unit 'U_Patterns.pas'
                  В TWndClassEx кто будет менять строковые параметры в зависимости от UNICODE? :)

                  ExpandedWrap disabled
                           PTWndClassEx = ^TWndClassEx;
                           TWndClassEx = packed record
                              cbSize: UINT;
                              style: UINT;
                              lpfnWndProc: TFarProc;
                              cbClsExtra: Integer;
                              cbWndExtra: Integer;
                              hInstance: HINST;
                              hIcon: HICON;
                              hCursor: HCURSOR;
                              hbrBackground: HBRUSH;
                              lpszMenuName: {$ifdef UNICODE} PWideChar {$else} PChar {$endif};
                              lpszClassName: {$ifdef UNICODE} PWideChar {$else} PChar {$endif};
                              hIconSm: HICON;
                           end;
                    работает ...
                    так, а теперь как мне если я делаю так
                    ExpandedWrap disabled
                         szClientClass = 'Пробуем так';

                    то
                    user posted image
                    UTF-8 without BOM
                    user posted image
                    UTF-8
                    Цитата
                    b2.pas(1) Error: Illegal character in input file: 'п' ($EF)
                    U_Patterns.pas(212)
                      Не так просто... Дело всё в том, что перед тем, как использовать Юникод-функции, строку надо перевести из кодировки Win1251 (у тебя же она установлена в системе для ANSI-приложений?) в этот самый Юникод. Я вот тут набросал программку, которая корректно компилируется и работает и с -DUNICODE, и без, вот так показывается в версии UNICODE:
                      Прикреплённый файлПрикреплённый файлuni.PNG (7,71 Кбайт, скачиваний: 559)

                      Все исходники - в Win1251, никаких "UTF-8 without BOM" и тому подобных. Разбирайся что я добавил, экспериментируй...
                      ИсходникиПрикреплённый файлsource_uc.zip (3,99 Кбайт, скачиваний: 216)
                        Цитата volvo877 @
                        Все исходники - в Win1251, никаких "UTF-8 without BOM" и тому подобных.

                        тоесть выходит что сам файл нельзя подовать компилятору в UTF-8 кодировке?

                        Добавлено
                        другими словами он не поддерживает файлы с UTF-8 кодировкой вообще?

                        Добавлено
                        Цитата ccode10 @
                        Не так просто...

                        Тут слушай уже какой-то высшый пилотаж :D (ну спасибо реально, то работает)
                        Сообщение отредактировано: ccode10 -
                          Цитата ccode10 @
                          тоесть выходит что сам файл нельзя подовать компилятору в UTF-8 кодировке?
                          В этой версии Дельфи - нет, начиная с D2006 - можно компилировать файлы в любой кодировке, есть ключик --codepage:, задающий кодировку файлов исходника...
                            Это самое, я писал тут это последнее.
                            Но у меня ещё сплыло что нужно сделать
                            ExpandedWrap disabled
                                      WM_SIZE:
                                        begin
                                          cyClient:= LOWORD(LParam);
                                        end;

                            а с LOWORD
                            Цитата
                            Error: Declaration expected but 'INLINE' found

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


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0514 ]   [ 18 queries used ]   [ Generated: 26.04.24, 10:35 GMT ]