Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SysListView32 и unicode [D7, Win2k]


IncubuS ©   (2004-07-02 15:25:00) 

Как заставить ListView понимать unicode? Вот попробовал простенькую программку написать, ничего не выходит. Добавляет только первые буквы. Пишу вместо WideString просто String, итемы добавляется. :(


program Test;

uses
 Windows, CommCtrl, Messages;

procedure InitListView(lvHandle: HWND);
const
 stColumns: array [0..1] of WideString = ('Status', 'Filename');
var
 Column: TLVColumnW;
 I: Integer;
begin
 ListView_SetExtendedListViewStyle(lvHandle, LVS_EX_GRIDLINES
   or LVS_EX_FULLROWSELECT);
 with Column do begin
   mask := LVCF_FMT or LVCF_WIDTH or LVCF_TEXT;
   fmt := LVCFMT_LEFT;
   cx := 100
 end;
 for I := 0 to High(stColumns) do begin
   Column.pszText := PWideChar(stColumns[I]);
   ListView_InsertColumnW(lvHandle, I, Column)
 end
end;

procedure AddItem(lvHandle: HWND; const Caption, SubItem: WideString; ImgIndex: Integer);
var
 Item: TLVItemW;
 Index: Integer;
begin
 with Item do begin
   mask := LVIF_TEXT or LVIF_IMAGE;
   pszText := PWideChar(Caption);
   iImage := ImgIndex;
   iSubItem := 0
 end;
 Index := ListView_InsertItemW(lvHandle, Item);
 if Index <> - 1 then
   ListView_SetItemTextW(lvHandle, Index, 1, PWideChar(SubItem));
end;

function OptFunc(Dialog: HWND; Msg: UINT; wParam: WParam; lParam: LParam): Bool; stdcall;
var
 lvHandle: HWND;
 I: Integer;
begin
 Result := True;
 case Msg of
   WM_INITDIALOG:
     begin
       lvHandle := GetDlgItem(Dialog, 101);
       InitListView(lvHandle);
       ListView_SetUnicodeFormat(lvHandle, True);
       for I := 1 to 10 do
         AddItem(lvHandle, 'Test', 'c:\1.exe', I);
       Exit
     end;
   WM_COMMAND:
     case LoWord(WParam) of
       ID_OK:
         begin
           EndDialog(Dialog, 1);
           Exit
         end;
       ID_CANCEL:
         begin
           EndDialog(Dialog, 2);
           Exit
         end
     end
   end;
 Result := False
end;

{$R *.res}

begin
 InitCommonControls;
 DialogBoxW(hInstance, 'MSTOPT_WINDOW', 0, @OptFunc)
end.


IncubuS   (2004-07-02 16:37:00) [1]

Забыл кинуть rc-файл, хотя думаю он не очень нужен.


MSTOPT_WINDOW DIALOGEX 0, 0, 294, 122
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX |
   WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_OVERLAPPEDWINDOW
FONT 8, "MS Sans Serif"
{
   DEFPUSHBUTTON   "OK",IDOK,237,7,50,14
   PUSHBUTTON      "Cancel",IDCANCEL,237,24,50,14
   CONTROL         "",101,"SysListView32",LVS_REPORT | LVS_EDITLABELS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,23,24,158,77
}


Наверх

Титульная страница Поиск, карта сайта Написать письмо