-
> MSDN уже в курсе.
тогда видимо пора сделать заполнение комбо через переменную
-
> и какова они остались в форме это вопрос к мск, тк в редакторе > свойств они пустые...
Это вопрос к Delphi. MCK здесь не причем.
-
> Это вопрос к Delphi. MCK здесь не причем.
еслиб делфи был причем, это былобы не только у тулбара логично предположить
-
> > Это вопрос к Delphi. MCK здесь не причем.еслиб делфи был > причем, это былобы не только у тулбара логично предположить
Версия Delphi какая? до 7-й включительно ни разу такого не видел. А выше никто толком и не реализовывал, насколько знаю. Хотя не знаю, не устанавливал ни разу старше Delphi7, смысла нет.
-
7я , и тупняк этот только в кол и только у тулбар причем извращение в том что существующий онклик от несуществующего в тексте формы по формату описания ничем не отличается при этом делфи видит только существующий а мск все...
-
ище хотел спросить это нормалино что при UNICODE_CTRLS добавляется от 3 до 10 килобайт , в зависимости от размера софта? даже если просто пустой от кода проект есть подозрение что подключается куча лишних преобразований строк ведь все апишные функции имеют псевдонимы под уникод и их вызов не должен на столько увеличивать код
-
Увеличение на несколько К - нормально. Часть ассемблерного кода для UNICODE_CTRLS отключается.
Исправление можно добавить, чтобы строки добавлялись в комбобокс с обязательным переприсваиванием переменной. Нужно ли - не знаю, исправление добавляет немного, и только для UNICODE_CTRLS, и только при наличии комбобокса.
Чтобы тулбар забывал про назначавшиеся события, надо удалять не событие, а всю кнопку. В MCK приходится хранить имя события, как хранить ссылку на событие другим способом и стирать ее при удалении, мне неизвестно.
-
я прошу прощения что оффтоплю, сайт kolnmck.net показывает 404, что-то случилось?
-
Разбираемся.
-
ошибка в procedure TList.SetCapacity( Value: Integer );
asm
CMP EDX, [EAX].fCount
CMOVL EDX, [EAX].fCount
JGE @@1
MOV EDX, [EAX].fCount
@@1:
CMP EDX, [EAX].fCapacity
JE @@exit
MOV [EAX].fCapacity, EDX
SAL EDX, 2
LEA EAX, [EAX].fItems
CALL System.@ReallocMem
@@exit:
end; выдает EoutOfMemory после добавления 68044 итема "лечица" заданием больших значений Capacity но после его превышения один фиг вылетает например если задать Capacity:=100000 то вылетет после 120932 итема ватафака? я не против сразу ставить Capacity:=10000000 но наскока это влияет на память?
-
procedure TForm1.KOLForm1Show(Sender: PObj);
var L: PList;
i: Integer;
begin
L := NewList;
for i := 1 to 100000 do
begin
L.Add( Pointer( i ) );
end;
ShowMessage( Int2Str( L.Count ) );
L.Free; Ничего не вылетает, пишет 100000 и работает дальше. ТАк что давайте минимальный проект, на котором вылетает.
-
При использовании файла справки в процедуре AssignHtmlHelp или методе TControl.SetHelpPath выделяется память в переменную HelpFilePath, которая никак не освобождается при выходе из приложения. Предлагаю исправить метод TControl.ProcessMessage примерно так:
if (Msg.message = WM_QUIT) then
begin
AppletTerminated := True;
if HelpFilePath <> '' then
FreeMem(HelpFilePath);
ExitCode := Msg.wParam;
end
-
Моим тапочкам даже не смешно. Даже в win95, когда завершается работа приложения, вся память гарантированно освобождается, если это не был GlobalAlloc из системы. В NT-based системах вообще вся память освобождается. Начиная с Win2K гарантируется освобождение уже не только всей памяти, но и всех дескрипторов gdi, user и kernel.
-
FastMM тоже не смеется. Сколько читал про выделение\освобождение памяти, про такие гарантии не знал. Спасибо, буду знать.
-
-
Достижимость SBPosition = SBMax могу продемонстрировать сейчас, программно. Немного переделанный ваш же пример: http://kolmck.net/demos/scrollbartest2.rar Жать на числа в listview (особенно после 20) и смотреть на значения текущей позиции в заголовке формы (это значение, которое возвращает SetScrollInfo в мемо) и в нижней Label3 (значение, полученное GetScrollInfo из того же мемо). Окна не ограничиваются мемо. Если мемо умеет визуально корректировать позицию скроллбара, это не значит, что все контролы в windows такие умные. По крайней мере, траблы с пересчетом скролл-позиций я имел немаленькие, когда делал ScrollBox. Далее, вы прекрасно продемонстрировали, что левый дополнительный скроллбар, хотя и называется SBAPI, как раз удовлетворяет требованиям KOL. В нем применена корректировка, которая как раз и нужна для правильного отображения. Ни о чем не говорит? И чем не устраивает такая корректировка, если она приводит к желаемому результату?
-
> Достижимость SBPosition = SBMax
для этого существует тракбар, а скролбар существует чтоб прокручивать чтолибо в области отображения, и в нем SBMax=число элементов, а Page=число видимых элементов и неважно строки это или попиксельный прокрут картинки все логично и работает как надо
> траблы с пересчетом скролл-позиций я имел немаленькие
траблы были видимо изза того, что Вы считали,что если есть Max то Position обязан его достигать,но это не так, этим кокраз ведает Page
> И чем не устраивает такая корректировка, если она приводит > к желаемому результату?
да тем что это антикоректировка Вашей коректировки и тем что не надо трогать святое, как в винде сделано так и должно быть,а уш если приспичило чтоб было SBPosition = SBMax то Page:=1 и будет Вам счастие без всяких корекций или делайте чисто для своих целей,а не глобально
-
> и в нижней Label3 (значение, полученное GetScrollInfo из > того же мемо).
а вот тут неправда получается кокраз из SBKOL т.к. он последний procedure TForm1.ListView1LVStateChange(Sender: PControl; IdxFrom,
IdxTo: Integer; OldState, NewState: Cardinal);
var i: Integer;
procedure UpdScr( Ctl: PControl; F: DWORD );
var j: Integer;
begin
GetScrollInfo( Ctl.Handle, F, si );
si.nPos := i;
j := SetScrollInfo( Ctl.Handle, F, si, TRUE );
Form.Caption := 'Current pos = ' + Int2Str(j);
GetScrollInfo( Ctl.Handle, F, si );
Label3.Caption := 'nMax=' + Int2Str(si.nMax) +
' nPage=' + Int2Str(si.nPage) +
' nPos=' + Int2Str(si.nPos);
end;
begin
i := ListView1.LVCurItem;
if i < 0 then Exit;
UpdScr( Memo1, SB_VERT );
UpdScr( SBAPI, SB_CTL );
UpdScr( SBKOL, SB_CTL );
end;
-
такчто "Достижимость SBPosition = SBMax могу продемонстрировать сейчас" не удалось
-
|