Текущий архив: 2007.10.14;
Скачать: CL | DM;
Вниз
TC_Insert Найти похожие ветки
← →
Galkov © (2007-03-13 06:57) [0]1) При вызове этого метода аж никак не меняется CurentIndex
Если входной аргументIdx<=fCurentIndex
, то это несправедливо
Может следует добавить в этот метод строку типа ???if Idx<=fCurentIndex then inc(fCurentIndex);
Ибо мои пользователи неудовольствие выражали на отсутствие события по первому клику на 0-м табе :))
2) Неточность! Лишняя (хоть и не криминальная) строчка затесалась:function TControl.TC_Insert(Idx: Integer; const TabText: KOLString;
.................
Result.BoundsRect := TC_DisplayRect; //!!! Эта
{$IFDEF OLD_ALIGN}
Result.BoundsRect := TC_DisplayRect;//+ Galkov
{$ENDIF}
Perform(WM_SIZE,0,0); //May be changes of margins for TabControl
end;
Увы, не все сразу успеваю заметить :(
← →
Galkov © (2007-03-13 07:00) [1]Пардон, конечно fCurIndex, а не fCurentIndex :(
← →
Galkov © (2007-03-13 18:37) [2]Мда....
Как и раньше: чем дальше в лес, тем толще партизаны :(
Если еще посмотреть и TC_Delete, то становиться гораздо грустнее.
При NEW_ALIGN вообще AV получить без проблем.
Можно удалить и активную страницу. CurIndex после этого честно -1, чего не скажешь о fCurIndex (который и определяет срабатывание OnSelChange)
Последующее TC_Insert делает страницу невидимой, хотя именно этот таб оказывается выбранным...
Весело, в общем :))
Думается мне, надо рихтовать WndProcTabControl примерно так:function WndProcTabControl( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
.............
case Hdr.code of
TCN_SELCHANGING:
Self_.fCurIndex := Self_.Perform( TCM_GETCURSEL, 0, 0 );
TCN_SELCHANGE:
.............
Ну и условие:Result.Visible := Count=0;
в TC_Insert не по делу получается.
Надо:Result.Visible := CurIndex<0;
В общем, Владимир, давайте я намылю Вам комплексный (+asm) патч для рассмотрения.
Если, конечно, Вы не возражаете против такого направления фиксинга
Осталось только понять, от чего, и на что патч :))
учитывая предыдущий...
← →
Vladimir Kladov (2007-03-14 15:52) [3]Никуда спешить не надо. Спокойно, с расстановкой, делайте, и шлите.
← →
Galkov © (2007-03-15 11:28) [4]Дык делов-то - на пяток команд на asm-е...
Сделал UPD (и намылил) на то, чего у меня сейчас есть, относительно этого:
http://www.kolnmck.ru/files/254/kol.7z
Т.е., на все сразу
А в этом "сразу" оказался и альтернативный интерфейс для TabControl-а
Который вынести из под NEW_ALIGN не решился
Вот тест:Program test;
uses windows,messages,kol;
type TMainForm=object
Control,Tabs,B1,B2,P:PControl;
J:integer;
procedure _OnClick1(Obj:PObj);
procedure _OnClick2(Obj:PObj);
procedure _OnChange(Obj:PObj);
end;
var MainForm:TMainForm;
procedure TMainForm._OnClick1;
begin
Tabs.TC_Delete(2);
end;
procedure TMainForm._OnClick2;
begin
P := NewEditBox(Tabs,[eoMultiline,eoNoHideSel]).SetSize(357,147).SetPosition(6,27);
P.Color := clWhite;
Tabs.TC_InsertControl(0,int2str(J),0,P);
inc(J);
end;
procedure TMainForm._OnChange;
begin
Beep(100,100);
end;
begin
Applet := NewApplet("TabTest");
with MainForm do begin
Control := NewForm(Applet,"Test").SetSize(400,300);
B1 := NewButton(Control,"Del2").SetPosition(10,10);
B1.OnClick := _OnClick1;
B2 := NewButton(Control,"Ins0").SetPosition(80,10);
B2.OnClick := _OnClick2;
Tabs := NewTabEmpty(Control,[],nil).SetSize(370,180).SetPosition(10,40);
J := 1; while J<=4 do begin
P := NewGroupbox(Tabs,"").SetSize(357,147).SetPosition(6,27);
Tabs.TC_InsertControl(J,int2str(J),0,P);
inc(J);
end;
Tabs.OnSelChange := _OnChange;
end;
Run(Applet);
end.
Смысл в том, что килобайт от align-а к кодам не притегивается.
Ну не считая "нестандартных" контролов для таба...
Страницы: 1 вся ветка
Текущий архив: 2007.10.14;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.023 c