-
Подскажите пожалуйста..
Мне необходимо создать компонент состоящий из двух МЕМО и одного СКРОЛЛБАРА. При движении СКРОЛЛБАРА оба МЕМО должны двигаться синхронно.
Вопрос вот в чем. Как организовать наследование? Создать класс, включающий оба МЕМО, тогда от кого наследовать? Или как-то иначе, например наследника от TMemo, включающего другой MEMO?
Как лучше?
-
Наследоваться от TCustomPanel? Рисовать на них два мемо пропорционально размером панели? Справа общий скроллбар. Обрабатывать события от скроллбара и двигать мемо
-
А МЕМО создавать на панели динамически в конструкторе?
А в дизайнере как такой компонент будет выглядеть или как некая панель? Действительно, как два мемо?
-
>А МЕМО создавать на панели динамически в конструкторе? да
>А в дизайнере как такой компонент будет выглядеть или как некая панель? Действительно, как два мемо? Думаю, как два мемо со скроллбаром. Пробовать надо...
-
Можно другой контейнер использовать, не панель, и на нем выводить.
А почему именно компонент? Почему не фрейм?
-
Как на счёт ScrollBox вместо панели?
-
можно и ScrollBox
-
Попробовал через фрейм - то что надо. Щас попробую наследоваться от панели...
-
чегой-то не отображается мое мемо (на форме выглядит как чистая панель):
// это сам компонент type TTestPanel = class(TCustomPanel) Memo1 : TMemo; public constructor Create(AOwner: TComponent); end;
implementation
{ TTestPanel }
constructor TTestPanel.Create; begin Memo1 := TMemo.Create(AOwner); Memo1.Parent := Self; end;
// это использование type TForm1 = class(TForm) TestPanel1: TTestPanel; end;
Конструктор почему-то не выполняется??
-
>Попробовал через фрейм - то что надо Вот и пользуйся на здоровье ;-)
-
> TTestPanel = class(TCustomPanel) > Memo1 : TMemo; > public constructor Create(AOwner: TComponent); > end;
Ужасная запись. Расставляте секции правлино
constructor TTestPanel.Create;
begin
Memo1 := TMemo.Create(AOwner);
Memo1 А координаты и ширину задал?
-
> А координаты и ширину задал?
Да они вообще-то уже заданы в предках.... Что-то он(автор) темнит в [8]... так как там синтаксически верно написано.... кроме, конечно, вот этого:
> // это использование > type > TForm1 = class(TForm) > TestPanel1: TTestPanel; > end;
Какое-ж это использование :) Это описание....
Подозреваю, что это все пробывалось автором без установки компонента, ручным созданием своего "детища" и не указав ему родителя....
> logslava А нужен он вообще этот компонент, зачем писать "никчемные" компоненты, все что в [0] написано - все это именно так и решаеться, т.е. взять пару Мемо и скролбар и все, зачем их лепить в один компонент? В соседней ветке наподобие компонент "лепился", т.н. "переляпывался"... наподобие - это к тому, что "никчемный"...)
-
> Подозреваю, что это все пробывалось автором без установки > компонента, ручным созданием своего "детища" и не указав > ему родителя....
Хотя говорит, что
> чегой-то не отображается мое мемо (на форме выглядит как > чистая панель):
Тогда фик его знает, что там у него не так....(
-
type
TMyControl = class(TWinControl)
private
Memo1,Memo2: TMemo;
Scroll: TScrollBar;
public
constructor Create(AOwner: TComponent);override;
end;
constructor TMyControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Memo1 := TMemo.Create(self);
Memo1.Align := alLeft;
Memo1.Parent := self;
Memo2 := TMemo.Create(self);
Memo2.Align := alClient;
Memo2.Parent := self;
Scroll := TScrollBar.Create(self);
Scroll.Kind := sbVertical;
Scroll.Align := alRight;
Scroll.Parent := self;
SetBounds(0,0,300,200);
end;
-
Отчет о проделанной работе: :)
Вся проблема была в том, что я не указал оверрайд для конструктора (а в посте [8] еще и инхеритед).
После добавления компонент кидается на форму и выглядит действительно как два мемо, т.к. тело конструктора выполняется в момент "кидания" на форму.
Спасибо DimaBr, ваш пример показал в каком месте я дурак, Darvin, спасибо за ответы!
2 {RASkov} > зачем писать "никчемные" компоненты затем, я полагаю, чтобы потом уметь написать "кчемные" :)
2 Kolan За стиль уж простите, ляпил на скорую руку
-
В принципе, я тоже думаю что компонент вряд ли будет жить. Первое что приходит на ум - допустим в первом мемо 10000 строк а во втором 100. Корректно спозиционироваться с помощью сколера будет тяжеловато
-
2 DimaBr согласен полностью - все это далеко от совершенства, но повторюсь "я ведь енто не для денег, я ведь енто для души" (цитируя Л.Филатова)
-
> [14] logslava (27.07.07 13:08) > 2 {RASkov} > зачем писать "никчемные" компоненты > затем, я полагаю, чтобы потом уметь написать "кчемные" :)
Хорошо.... тогда напиши этот по полной.... например учитывай, что одно из Мемо(ы):) можно проскролировать с, например, клавиатуры... или мышью в режиме выделения, или еще как.... вообщем чтоб второй скролировался синхронно.... Так же по поводу разницы кол-ва Lines из [15] (совет: можно скролинг сделать процентным и со значением у скролбара Мин=0 и Макс=100 делать соответствующий скрол обоим Мемо), и еще много другого учти..... Или всего этого не надо? Тогда лучше возьми более полезную задумку для написания и изучения......
ЗЫ Ну сам посмотри.... ничего "полезного" или нового в твоем компоненте реально нет, более того, такой компонент нигде практически не используется, а если понадобится, то все реализуется с уже готовыми компонентами в программе... Удачи.
|