program Project1;
uses
Windows,
Messages, CommCtrl, SysUtils, ShellAPI, Classes;
Const
ButtonID = 100;
BtnID = 101;
LVID = 13;
var
WndClassEx : TWndClassEx;
Form, LV, button, Btn2 : hwnd;
MMsg: Msg;
item : tLVITEM;
{$R *.res}
Function WinProc(Forma: hwnd; Msg: Cardinal;wparam: WParam;LParam: Cardinal): lresult; Stdcall;
Var
Rect: TRect;
lvc : TLVCOLUMN;
I : Integer;
filename : array [0..2000] of Char;
Begin
Result := 0; // Чтобы в случае сбоя программы до последней строки функции Windows правильно определила ошибку
Case Msg Of
WM_CREATE:
begin
DragAcceptFiles(Forma, True);
GetClientRect(Forma, Rect);
button := CreateWindowEx (0, 'BUTTON', 'Изменить путь', WS_CHILD or WS_VISIBLE or BS_PUSHBUTTON, 5, Rect.Bottom - 35,
Rect.Right div 2 - 2, 35, Forma, ButtonID, HInstance, nil);
Btn2 := CreateWindowEx (0, 'BUTTON', 'Изменить путь2', WS_CHILD or WS_VISIBLE or BS_PUSHBUTTON, Rect.Right div 2 + 5, Rect.Bottom - 35,
Rect.Right div 2 - 10, 35, Forma, BtnID, HInstance, NIL);
LV :=CreateWindowEx(WS_EX_CLIENTEDGE,'SysListView32', '1', WS_CHILD or WS_VISIBLE or LVS_REPORT or LVS_SHOWSELALWAYS or
LVS_EX_TWOCLICKACTIVATE or LVS_EX_ONECLICKACTIVATE or WM_LBUTTONDOWN , 5, 5, Rect.Right -10 ,Rect.Bottom - 40,Forma, LVID, HInstance,nil);
SendMessage(lv, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT or LVS_EX_GRIDLINES or LVS_EX_INFOTIP);
lvc.fmt := LVCFMT_CENTER;
lvc.mask := LVCF_TEXT + LVCF_WIDTH;
lvc.pszText := '0';
lvc.cx := 250;
ListView_InsertColumn(lv, 0, lvc);
lvc.mask := lvc.mask or LVCF_FMT or LVCF_SUBITEM;
lvc.pszText := '1';
lvc.cx := 60;
lvc.iSubItem := 1;
ListView_InsertColumn(LV, 1, lvc);
lvc.pszText := '2';
lvc.cx := 50;
lvc.iSubItem := 1;
ListView_InsertColumn(LV, 2, lvc);
lvc.pszText := '3';
lvc.cx := 100;
lvc.iSubItem := 1;
ListView_InsertColumn(LV, 3, lvc);
lvc.pszText := '4';
lvc.cx := 100;
lvc.iSubItem := 1;
ListView_InsertColumn(LV, 4, lvc);
lvc.pszText := '5';
lvc.cx := 100;
lvc.iSubItem := 1;
ListView_InsertColumn(LV, 5, lvc);
lvc.pszText := '6';
lvc.cx := 100;
lvc.iSubItem := 1;
ListView_InsertColumn(LV, 6, lvc);
lvc.fmt := LVCFMT_LEFT;
lvc.pszText := 'Путь к файлу';
lvc.cx := LVSCW_AUTOSIZE_USEHEADER;//250;
lvc.iSubItem := 1;
ListView_InsertColumn(LV, 7, lvc);
// EnableWindow(button,False);
// FormAdd;
{ // for I := 0 to 10 do
// begin
FillChar( item, sizeof(item), 0 );
item.mask := LVIF_TEXT;
//item.iItem := 0;
item.pszText := ('СЕРГЕЙ СЕРГЕЕВ');
ListView_InsertItem(LV, Item);
// end;
// SendMessage(lv, LVM_INSERTCOLUMN, 2, LongInt(@Item));
//LVM_INSERTITEM;
// item.mask := LVIF_TEXT or LVIF_IMAGE;
// item.iItem := Item;
item.iSubItem := 1;
item.pszText := '123456789'; // listview_seti
ListView_SetItem(LV, item); }
end;
{WM_NOTIFY: If HiWord (WParam) = WM_LBUTTONDOWN then
// if HWND(WPARAM) = LVID then
// SetWindowLong(LV,GWL_USERDATA,SetWindowLong(LV, GWL_WNDPROC, LPARAM(@NewListProc)));
MessageBox(0,'','',0); }
WM_rBUTTONDOWN:
// if HWND(WPARAM) = LVid then
MessageBox(0,'','',0);
WM_COMMAND:
begin
// If LoWord (WParam) = ButtonID Then
//И если это было нажатие
{ If HiWord (wParam) = WM_LBUTTONDOWN then
// if HWND(WPARAM) = LVID then
case hwnd(WParam) of//
// SetWindowLong(LV,GWL_USERDATA,SetWindowLong(LV, GWL_WNDPROC, LPARAM(@NewListProc)));
LVID:
MessageBox(0,'','',0);
end; }
// If HiWord (WParam) = BN_CLICKED then
case {hwnd(WParam)}LOWORD(wParam) of//
Buttonid:
begin
// ListView_SetSelectionMark(LV,1);
// ListView_SetItemState(LV, 11 , LVIS_SELECTED or LVIS_FOCUSED, LVIS_SELECTED or LVIS_FOCUSED); // я выделяю строку
i := ListView_getSelectionMark(LV); //выделенная строка
ListView_GetItemText(LV, {0}i, {7}1, filename, SizeOf(filename)) ; //получение содержимого колонки путь
SetWindowText(Form, PChar(IntToStr(i)+ ' - ' + filename) );
// ListView_SetItemCountEx(LV, 1, lv);
end;
BtnID:// MessageBox(0, '','',0);
begin
FillChar( item, sizeof(item), 0 );
item.mask := LVIF_TEXT;
item.pszText := PChar('aaaa');
ListView_InsertItem(LV, Item);
item.iSubItem := 1;
item.pszText := PChar('fff');
ListView_SetItem(LV, item);
item.iSubItem := 2;
item.pszText := PChar('kkk');
ListView_SetItem(LV, item);
end;
// LVID: MessageBox(0,'yaaaa','Сообщение',MB_OK);
end;
end;
WM_SIZE: // Посылается после изменения размеров окна (формы)
Begin
GetClientRect(Form, Rect);
SetWindowPos(LV, 0, 5, 5, Rect.Right-10, Rect.Bottom - 40, SWP_NOZORDER);
SendMessage(LV,LVM_SETCOLUMNWIDTH, 7, LVSCW_AUTOSIZE_USEHEADER);
SetWindowPos(button, 0, 5, Rect.Bottom - 35, Rect.Right div 2 - 2, 35, SWP_NOZORDER);
SetWindowPos(Btn2, 0, Rect.Right div 2 + 5, Rect.Bottom - 35, Rect.Right div 2 - 10, 35, SWP_NOZORDER);
// setwindowpos
End;
WM_DESTROY:
begin
DragAcceptFiles(Forma, False);
PostQuitMessage(0);
end;
Else // Если пришедщее сообщение мы не определили:
Result := DefWindowProc(Forma, Msg, WParam, LParam);
End;
End;
Procedure WinMain;
Begin
// Заполняем запись информацией:
FillChar(WndClassEx, SizeOf(TWndClassEx), 0);
WndClassEx.cbSize := SizeOf(TWndClassEx); // Размер структуры
WndClassEx.lpszClassName := 'APIWindow'; // Имя класса окна (для примера - второй параметр функции FindWindow)
// WndClassEx.hbrBackGround := GetSysColorBrush(COLOR_BTNFACE);
WndClassEx.style := CS_HREDRAW Or CS_VREDRAW; // Стили окна - в данном случае окно будет перерисовываться при изменении как горизонтальных, так и вертикальных размеров
WndClassEx.hInstance := HInstance; // Ищи описание выше
WndClassEx.lpfnWndProc := @WinProc; // адрес окнной процедуры
WndClassEx.cbClsExtra := 0;
WndClassEx.cbWndExtra := 0;
WndClassEx.hIcon := LoadIcon(HInstance, MakeIntResource('MAINICON')); // Икнока окна
WndClassEx.hIconSm := LoadIcon(HInstance, MakeIntResource('MAINICON')); // Тоже иконка (но маленькая :)
WndClassEx.hCursor := LoadCursor(0, IDC_ARROW); // Курсор мыши для окна (у нас - стрелка)
WndClassEx.hbrBackground := COLOR_BTNFACE + 1; // Фон окна
WndClassEx.lpszMenuName := NIL; // Указатель на меню (у нас меню нет)
//registerclassex(WndClassEx);// регистрируем в системе новый класс окна
// Теперь регистрируем класс окна в системе
If RegisterClassEx(WndClassEx) = 0 Then
MessageBox(0, 'Невозможно зарегистрировать класс окна1', 'Ошибка', MB_OK Or MB_ICONHAND)
Else
Begin
// Создаём окно
Form := CreateWindowEx( 0, WndClassEx.lpszClassName, 'mp3player', WS_OVERLAPPEDWINDOW {or ws_ex_appwindow {or ws_ex_acceptfiles} {WS_SYSMENU} ,
500,100, //CW_USEDEFAULT, 0, // Позиция относительно экрана (CW_USEDEFAULT означает, что размеры будут определяться Windows)
420, 400, 0, 0, HInstance, NIL); // Дополнительные параметры
If Form = 0 Then // Если окно не создалось:
MessageBox (0, 'Окно1 не создалось!',
'Ошибка', MB_OK Or MB_ICONHAND)
Else
Begin
ShowWindow (Form, SW_SHOWNORMAL); // Показывем окно
While GetMessage(MMsg, 0, 0, 0) Do // Эта функция извлекает очередное сообщение из очереди сообщений,
Begin
TranslateMessage(MMsg); // Переводит нажатия клавиш, чтобы их можно было обработать оконной процедуре
DispatchMessage(MMsg); // Отправляем мессагу оконной процедуре
End;
Halt(MMsg.WParam); // Завершение работы при получении мессаги WM_QUIT (при выходе из цикла жизни программы)
End;
End;
End;
Begin
WinMain;
End.