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

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

Подмена функций


Chum ©   (2005-10-13 19:22:00) 

Значит появилась такая мысля: Есть TabControl. Новая вкладка представляет из себя панель (посмотрел как работает, вызывается NewPanel). Так вот, есть желание (даже потребность) - заменит Panel на GroupBox. Попытался так:

Сделал свою функцию MyNewPanel по аргументам и возвращаемому значению совпадающую с NewPanel. пишу в коде

p:=@NewPanel
@NewPanel:=@MyNewPanel.

P-указатель. Ну компилятор ругается и говорит, что так незя. Это первое, что пришло в голову, ну и ясно, что работать не бует. как можно????

P.S. Аналогичная ситуация с KolFrame - он вроде тоже основан на Panel. И хотелось бы иметь возможность TabControl`y подсунуть Frame.

Есть у кого нить идейки????

Спасибо


Vladimir Kladov   (2005-10-23 20:27:00) [1]

нет, я ответил, что в этом нет надобности. Я и сейчас не вижу в подмене никакого интереса кроме спортивного. У себя я предпочитаю использовать TabControl с обрезанными табами, а выбирать закладку из листвью где-нибудь слева. Особенно когда табов много - при использовании табов тогда начинается то, что мне особенно не нравится: все сразу не видны, делать многострочными - это маразм. В листвью все ясно и понятно, и все закладки сразу видно.


chum   (2005-10-23 20:16:00) [2]

В принципе, можно и так, но это, если так можно выразиться, спортивный интерес. если вкладки так реализованы, то можно ли как-то всё это подстроить под себя. В итоге получается что можно, но то что это самый правильный подход - я не настаиваю. Хотя вот, была у меня задачка с табами (все разные), но на каждой закладке размещалася одна GroupBox панель. так вот, можно ли заменить  в табе Panel на GroupBox? Но Владимир уже ответил - что нет. Ну вобщем Всем спасибо, интерес удовлетворён :)


ECM   (2005-10-23 13:56:00) [3]

Согласен со SPeller [10], действительно зачем размножать один и тот же фрейм еще и на одном и том же месте?
Хотел добавить- если все же хочется иметь вкладки - их можно оставить
(один заголовок с кнопками-вкладками) и использовать как кнопки переключения содержимого фрейма.


SPeller   (2005-10-22 20:33:00) [4]

А не проще ли сделать одно окно без всяких табов, в котором разместить фрейм, а рядом разместить, например, тулбар, который будет переключать, по всей видимости, содержимое фрейма, и не морочаться с подменами функций?


chum   (2005-10-22 17:05:00) [5]

Я разработаю фрейм, который должен повтаряться на всех вкладка (т.е. вкладки имеют один набор элементов) и подменяя это своей функцией, я делаю это красиво и экономлю на панели (память есественно)


Vladimir Kladov   (2005-10-16 11:12:00) [6]

Нк попробуйте тогда так: пишете свой TC_Insert1 с аналогичными параметрами, но не как метод, а как обычную функцию. И вызывайте для вставки таба. Хотя, может объясните, что это даст. Какие преимущества, кроме дополнительных манипуляций?


chum   (2005-10-15 22:53:00) [7]

Ну как не панель???? Вот код добавления вкладки:

function TControl.TC_Insert(Idx: Integer; const TabText: String;
 TabImgIdx: Integer): PControl;
var TI: TTCItem;
begin
 Result := NewPanel( @Self, esNone );
 Result.FAlign := caClient;
 Result.fNotUseAlign := True;
 Result.fVisibleWoParent := TRUE;
 Result.Visible := Count = 0;
 TI.mask := TCIF_TEXT or TCIF_IMAGE or TCIF_PARAM;
 TI.iImage := TabImgIdx;
 TI.pszText := PChar( TabText );
 TI.lParam := Integer( Result );
 Perform( TCM_INSERTITEM, Idx, Integer( @TI ) );
 Result.BoundsRect := TC_DisplayRect;
end;


Vladimir Kladov   (2005-10-15 16:19:00) [8]

и фрейм так же надо создавать как дочерний - как же еще иначе-то? Закладка в табе - это не панель. Это - закладка.


chum   (2005-10-15 13:46:00) [9]


> если бы это была обычная панель, ее можно было бы (например)
> выровнять по какому-нибудь краю. Или еще что-нибудь такое
> сделать. Это не панель, хотя функционально мало чем отличается
> от панели. Так что не надо выдумывать. Кладите на нее свой
> групбокс как обычно.
>


Ну допустим, с групбоксом ясно. А вот по поводй фрейма. ведь он вобщем то и есть панель? Просто надо создать кучу вкладок, одинаковых по содержанию.


Vladimir Kladov   (2005-10-14 16:18:00) [10]

если бы это была обычная панель, ее можно было бы (например) выровнять по какому-нибудь краю. Или еще что-нибудь такое сделать. Это не панель, хотя функционально мало чем отличается от панели. Так что не надо выдумывать. Кладите на нее свой групбокс как обычно.


SPeller   (2005-10-14 05:07:00) [11]

Добавлю, что я описанным мной способом свой тулбар создавал.


Thaddy   (2005-10-13 21:44:00) [12]

p:=@NewPanel means pointer to pointer.
Try
p:=NewPanel;

since PControl = ^TControl;// i.e. is already a pointer to the object


SPeller   (2005-10-13 20:29:00) [13]

Если они создаются в inc-файле, то объявляешь у себя в модуле, где таб-контрол, функцию NewPanel, и компилятор подхватит именно её. Если они создаются в kol.pas - то ничего ты не сделаешь. (я уже и забыл, как там таб-контрол то создаётся..:)


Наверх

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