program   NoVCL;
uses
    Windows,
    Messages;
function   WndProc(Window:   HWnd;   AMessage,WParam,LParam:   Longint):   Longint;   stdcall;
var
A : HMENU;
He : HWND;
begin
    Result   :=   0;
      case AMessage of
    WM_DESTROY:
       PostQuitMessage(0);
    WM_LBUTTONDOWN:
       begin
        he := CreateWindow( 'edit', '',WS_VISIBLE OR WS_CHILD OR WS_BORDER OR ES_AUTOHSCROLL OR ES_AUTOVSCROLL,0, 0, 100, 30, Window, A, 0, NIL);
         SendMessage(he, EM_LIMITTEXT, 2, 0)
       end;
    else
       Result := DefWindowProc(Window,   AMessage,   WParam,   LParam);
  end;
end;
const
    ClassName   =   'Pascal   No   Vcl ';
function   WinRegister:   Boolean;
var
    WindowClass:   TWndClass;
begin
    with   WindowClass   do
    begin
        Style   :=   CS_HRedraw   or   CS_VRedraw;
        lpfnWndProc   :=   @WndProc;
        cbClsExtra   :=   0;
        cbWndExtra   :=   0;
        hInstance   :=   SysInit.HInstance;
        HIcon   :=   LoadIcon(0,   IDI_Application);
        hCursor   :=   LoadCursor(0,   IDC_Arrow);
        hbrBackground   :=   HBrush(Color_Window);
        lpszMenuName   :=   nil;
        lpszClassName   :=   ClassName;
    end;
    Result   :=   RegisterClass(WindowClass)   <>   0;
end;
function   WinCreate:   HWnd;
var
    HWindow:   HWnd;
begin
    HWindow   :=   CreateWindow(ClassName,   'Delphi ',   WS_OverlappedWindow,   50,   50,
                                                    600,   400,   0,   0,   HInstance,   nil);
    if   HWindow   <>   0   then
    begin
        ShowWindow(HWindow,   CmdShow);
        UpdateWindow(HWindow);
    end;
    Result   :=   HWindow;
end;
var
    AMessage:   TMsg;
    HWindow:   HWnd;
begin
    if   not   WinRegister   then
    begin
        MessageBox(0,   'Register   Class   Error ',   'Delphi ',   MB_OK);
        Exit;
    end;
    HWindow   :=   WinCreate;
    if   HWindow   =   0   then
    begin
        MessageBox(0,   'CreateWindowError ',   'Delphi ',   MB_OK   or   MB_ICONERROR);
        Exit;
    end;
    while   GetMessage(AMessage,   0,   0,   0)   do
    begin
        TranslateMessage(AMessage);
        DispatchMessage(AMessage);
    end;
end.

解决方案 »

  1.   

    问题已经解决,UNICODE带来的问题主要是写单片机程序的问题,应为单片机多处理ANSI字符,特别是界面交互的时候,要输入的主要还是ANSI,好处容易处理汉字与字母的问题,汉字2个字节,字母1个字节。控制写入通信,那么就不要多写代码U->A的转换了,让WINDOWS本身做输入控制处理。返回用ANSI,当然不能返回UNICODE了,不然,哼哼主要还是因为2009以后编译器做了UNICODE的处理,不如VC,编译器可以选择编译为UNICODE,或者ANSI,当然我只知道VC6可以这样,现在的VC 2005以后的情况就不清楚了,我用了vc2010mfc,默认是UNICODE,不知道是否可以选择为ANSI编译。但delphi 2009以后不能选择编译为ANSI,特别是VCL,底层就是基于UNICODE,主要是封装了WINDOWS控件为unicode,那么返回值就是UNICODE,当然参数也是unicode,不是绝对。看DELPHI公司的说明吧,也许做单片机不应该选择DELPHI 2009以后的版本,也是给自己添麻烦,这个问题就是刚用了2010才知道的,弄了3天才搞明白到底原因在哪,如果只是说UNICODE,很迷糊。做单片机就别用了,呵呵,我的感觉,转换来转换去的,给自己添麻烦。
      

  2.   

    我用D2010 好像要设置什么也可以使默认用ANSI
    反正用不上 没记住