Это кто знает как зделать на винапи в ListView,чтобы новые записи при добавлении добавлялись сверху вниз ? Или Снизу вверх?
PHP: //Определение колличества пунктов в ListBox function ListBox_GetItemCount(hListBox: HWND): Integer; begin Result := SendMessage(hListBox, LB_GETCOUNT, 0, 0); end; //Удаление определенного пункта в ListBox procedure ListBox_DeleteItem(hListBox: HWND; Index: Integer); begin SendMessage(hListBox, LB_DELETESTRING, Index, 0); end; //Удаление всех пунктов в ListBox procedure ListBox_ClearItems(hListBox: HWND); begin SendMessage(hListBox, LB_RESETCONTENT, 0, 0); end; //Добавление пункта в ListBox procedure ListBox_AddItem(hListBox: HWND; NewItem: String); begin SendMessage(hListBox, LB_ADDSTRING, 0, Integer(NewItem)); end; //Добавление пункта в определенное место в ListBox procedure ListBox_InsertItem(hListBox: HWND; Index: Integer; NewItem: String); begin SendMessage(hListBox, LB_INSERTSTRING, Index, Integer(NewItem)); end; //Определение имени выделеного пункта в ListBox function ListBox_GetSelectedItem(hListBox: HWND): string; var Index, len: Integer; s: string; buffer: PChar; begin Index := SendMessage(hListBox, LB_GETCURSEL, 0, 0); len := SendMessage(hListBox, LB_GETTEXTLEN, wParam(Index), 0); GetMem(buffer, len + 1); SendMessage(hListBox, LB_GETTEXT, wParam(Index), lParam(buffer)); SetString(s, buffer, len); FreeMem(buffer); Result := s; end; //Определение номера выделеного пункта в ListBox function ListBox_GetCountSelectedItem(hListBox: HWND): Integer; var Index, len: Integer; s: string; buffer: PChar; begin Index := SendMessage(hListBox, LB_GETCURSEL, 0, 0); len := SendMessage(hListBox, LB_GETTEXTLEN, wParam(Index), 0); GetMem(buffer, len + 1); SendMessage(hListBox, LB_GETTEXT, wParam(Index), lParam(buffer)); SetString(s, buffer, len); FreeMem(buffer); Result := Index; end; //Определение имени пункта по номеру в ListBox function ListBox_GetItem(hListBox: HWND; LbItem: Integer): string; var l: Integer; buffer: PChar; begin l := SendMessage(hListBox, LB_GETTEXTLEN, LbItem, 0); GetMem(buffer, l + 1); SendMessage(hListBox, LB_GETTEXT, LbItem, Integer(buffer)); Result := StrPas(buffer); FreeMem(buffer); end; //Выделение всех пунктов в ListBox procedure ListBox_SelAllItems(hListBox: HWND); var CountItems, i: Integer; begin CountItems := SendMessage(hListBox, LB_GETCOUNT, 0, 0); if CountItems = 0 then exit; for i := 0 to CountItems do SendMessage(hListBox, LB_SETSEL, Integer(true), i); end; //Выбор пункта procedure ListBox_SelectedItem(hListBox: HWND; Index: Integer); begin SendMessage(hListBox, LB_SETCURSEL, Index, 0); end; (c) Lenin_Inc
PandoraBox Реально попробуй сам найти ошибку как говорит Ni0x -Все просто!!! // P.S. Просто реально отпадут очевидные вопросы и многие непонятные проблемы, которые покажет отладчик в виде возврата из функций невалидного значения, по которому ТЫ сможешь судить о валидности параметров и ещё .....
PandoraBox, хмм... API и дельфи... просто суешь после каждой строчки(подозрительной) мессаджбокс. тупо компилишь, запускаешь.. если не вылетает мессаджбокс - знач в пред строчке бага... ВСЕ
Так я эт уже закоментировал проблема именно где то здесь между Code: var OpenStr, SaveStr, DelemStr, BtnStart: PChar; FullF, ClearF: TextFile; i: integer; s: String; begin {Clear process} CurUpTimeHr := 0; CurUpTimeMin := 0; CurUpTimeSec := 0; Stop := False; SetTimer(hWnd, 1, 1000, @TimerWork); GetDlgItemText(hWnd, 1, @OpenStr, MAX_PATH-1); GetDlgItemText(hWnd, 3, @SaveStr, MAX_PATH-1); GetDlgItemText(hWnd, 5, @DelemStr, MAX_PATH-1); и Code: AssignFile(FullF, OpenStr); Reset(FullF); AssignFile(ClearF, SaveStr); ReWrite(ClearF); try UpdateWindow(hWnd); while not EOF(FullF) do begin if Stop = True then begin CloseFile(FullF); CloseFile(ClearF); SetDlgItemText(hWnd, 8, 'Старт'); KillTimer(hWnd, 1); EnableWindow(GetDlgItem(hWnd,1), True); EnableWindow(GetDlgItem(hWnd,2), True); EnableWindow(GetDlgItem(hWnd,3), True); EnableWindow(GetDlgItem(hWnd,4), True); Exit; end; i := i + 1; SetDlgItemText(hWnd, 6, PChar(IntToStr(i))); UpdateWindow(hWnd); ReadLn(FullF, s); if pos(DelemStr, s) > 0 then WriteLn(ClearF, Copy(s, 0, pos(DelemStr, s) - 1)); UpdateWindow(hWnd); end;
Code: var OpenStr, SaveStr, DelemStr, BtnStart: PChar; // BtnStart-? FullF, ClearF: TextFile; i: integer; s: String; begin {Clear process} CurUpTimeHr := 0; CurUpTimeMin := 0; CurUpTimeSec := 0; Stop := False; SetTimer(hWnd, 1, 1000, @TimerWork); GetDlgItemText(hWnd, 1, OpenStr, MAX_PATH-1); GetDlgItemText(hWnd, 3, SaveStr, MAX_PATH-1); GetDlgItemText(hWnd, 5, DelemStr, MAX_PATH-1); и Code: AssignFile(FullF, OpenStr); Reset(FullF); AssignFile(ClearF, SaveStr); ReWrite(ClearF); try UpdateWindow(hWnd); while not EOF(FullF) do begin if Stop = True then begin CloseFile(FullF); CloseFile(ClearF); SetDlgItemText(hWnd, 8, 'Старт'); KillTimer(hWnd, 1); EnableWindow(GetDlgItem(hWnd,1), True); EnableWindow(GetDlgItem(hWnd,2), True); EnableWindow(GetDlgItem(hWnd,3), True); EnableWindow(GetDlgItem(hWnd,4), True); Exit; end; i := i + 1; SetDlgItemText(hWnd, 6, PChar(IntToStr(i))); UpdateWindow(hWnd); ReadLn(FullF, s); if pos(DelemStr, s) > 0 then WriteLn(ClearF, Copy(s, 0, pos(DelemStr, s) - 1)); UpdateWindow(hWnd); end; [/QUOTE] такс... ну и еще взгляну...
Забыл : stdcall; :B Code: procedure TimerWork; begin CurUpTimeSec := CurUpTimeSec + 1; if CurUpTimeSec = 60 then begin CurUpTimeSec := 0; CurUpTimeMin := CurUpTimeMin + 1; end; if CurUpTimeMin = 60 then begin CurUpTimeMin := 0; CurUpTimeHr := CurUpTimeHr + 1; end; SetDlgItemText(hWnd, 7, PChar(IntToStr(CurUpTimeHr) + ':' + IntToStr(CurUpTimeMin) + ':' + IntToStr(CurUpTimeSec))); end;
Code: function MainDlg(hWnd: HWND; msg: UINT; wParam: WPARAM; lParam: LPARAM): Integer; StdCall; var Open, Save, Delem, Btn: array [0..MAX_PATH-1] of Char; OpenStr, SaveStr, DelemStr, BtnStr: String; procedure TimerWork; stdcall; begin ...... end; ..... begin case msg of ...... WM_COMMAND : begin if LOWORD(wParam) = 8 then begin ..... GetDlgItemText(hWnd, 1, Open, SizeOf(Open)); GetDlgItemText(hWnd, 3, Save, SizeOf(Save)); GetDlgItemText(hWnd, 5, Delem, SizeOf(Delem)); GetDlgItemText(hWnd, 8, Btn, SizeOf(Btn)); OpenStr := Open; SaveStr := Save; DelemStr := Delem; BtnStart := Btn; SetTimer(hWnd, 666666, 1000, @TimerWork); if PChar(BtnStr) = 'Начать' then begin SetDlgItemText(hWnd, 8, 'Стоп'); AssignFile(FullF, OpenStr); Reset(FullF); AssignFile(ClearF, SaveStr); ReWrite(ClearF); try UpdateWindow(hWnd); while not EOF(FullF) do begin ..... UpdateWindow(hWnd); end; end; .... end; begin DialogBox(hInstance, 'MAIN', 0, @MainDlg); end. Зы пришлось мутить такую муть шоб нормально прочитало >:] Куда поместить ProcessMessages for WinAPI? Code: while GetMessage(m, hWnd, 0, 0) do begin TranslateMessage(m); DispatchMessage(m); end;
засовывай после CreateWindow и ShowWindow. Code: hwnd = CreateWindowEx(...); ShowWindow (hwnd, SW_SHOW); while (GetMessage (&messages, 0, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); }
Пандора... честное слово =/ на API же пишешь...я тебе скинул LENIN_INC там есть пример вызова MessageBox'a при событиях окна вплоть до его полного отображения... OnCreate OnPaint OnShow OnActive (что-то вроде этого) посмотри...
Значит так. Я изучаю делфи пару недель... Пока просто читаю и запоминаю))) Но вот хотел написать простую программку, которая бы при нажатии на кнопку выводила второе окно... И нефига не получается... Пишу Code: Form2.Show; А при компилляции он мне ошибку выдает! Один чел с кибер зоны мне дал свой вариант проги, там так же, но все работает! А у мну нет! Вот тут сам исходник - http://slil.ru/24853531 Там в принципе только две формы, на одной есть кнопка, при ее нажатии я хочу чтоб вылазила вторая форма, но у мну не получается...
Killerkod Очевидно у тебя есть два модуля Unit1 и Unit2. Во втором Form2 - чтобы её показать с помошью Form2.Show; Нужно подключить\связать модуль 1 с модулем 2 - жми File -> Use unit -> вибираем Unit2 и должно все работать! // Killerkod лучше писать ошибки компиляции, так тебе быстрее помогут!