Форум: "Основная";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
ВнизНужен совет по созданию компонента (если не жалко) Найти похожие ветки
← →
Begin (2002-09-24 00:54) [0]Хочу вот попробовать на базе стандартной панельки сделать более навороченную путем добавления к ней Bevel"я и переноса дефолтного Caption в верхний левый угол. Соответственно вознокло вопросов :
1. Можно ли (как ?) сделать копию стандартного компонента и поместить ее в палитру под другим именем?
2. Могу ли я визуално создавать/править внешний вид компонента, а потом прописывать его св-ва и методы, или же все только в коде ?
3. Как в одном новом компоненте совместить несколько стандартных (сделать что то типа TLabeledEdit)
4. Имеет ли место быть ситуация - положили на панельку несколько компонетов, выделили их и по нажатию некой последовательности кнопок(пунктов меню) получили новый компонент с лицом в виде созданного набора. Если имеет, то как ???
Или книжку какую посоветуйте, где эта тема хорошо расписана.
Спасибо заранее.
← →
MBo (2002-09-24 06:26) [1]1. Делаешь из меню Component-New Component - выбираешь предка из имеющихся, страницу палитры, пакет (DCLUSR50 по умолчанию)
2. Нет, только с помощью редких платных пакетов
3. В композитном компоненте создаешь подкомпоненты
4. Выделяешь несколько компонентов на форме - создать Template - помещаешь в палитру
Познакомься также с фреймами (Frame). Многие задачи можно решить с их помощью
← →
Separator (2002-09-24 06:50) [2]>4.
Выделил, нажал правую кнопку мыши и выбра "Add to Repository..."
← →
KSergey (2002-09-24 07:03) [3]Вначале "лирическое отступление".
Сказать по-правде, компоненты я тоже по началу писал "методом тыка". Потом, когда "почуял" что оказывается получается и не так это страшно, попер дальше (спасибо Анатолию Подгорецкому, он мне в другом форуме тогда все растолковал, где были заблуждения). Так что идейно тема "потыкаться" в таписании компонент мне близка... ;)
Значит сразу: компоненты не имеют design time. Вернее, процесс их разработки такого не имеет.
Отсюда:
> 4. Имеет ли место быть ситуация - положили на панельку несколько
> компонетов, выделили их и по нажатию некой последовательности
> кнопок(пунктов меню) получили новый компонент с лицом в
> виде созданного набора. Если имеет, то как ???
Нет. Вообще-то тут, думаю, вам поможет скорее фрейм (начиная с D5). Вот там как раз это можно: накидал на него все что угодно, повязал все кодом - а потом на любую форму уже готовый набор в виде фрейма кидаешь. Это к тому же все можно еще и подвигать относительно друг друга.
Ну и попутно
> 2. Могу ли я визуално создавать/править внешний вид компонента,
> а потом прописывать его св-ва и методы, или же все только
> в коде ?
Нет, все тольео в коде.
Причем напугаю еще больше: когда компонент будет скомпилирован и добавлен в палитру Delphi, то Delphi начнет использовать сожержащую его bpl-ку в процессе своей работы (для отрисовки в design-time и вычитывания published-свойств). Так вот если в компоненте есть ошибочки - все IDE начнет понятно страшно пучить и кривить. Отсюда золотой правило создания компонент: сначала на тестовом примере добиваемся стабильной работы компонента при динамическом его создании, и только после отладки всех замеченых ошибок его можно добавлять в палитру IDE.
> 3. Как в одном новом компоненте совместить несколько стандартных
> (сделать что то типа TLabeledEdit)
Ну во-первых, опять же чем фрейм плох?
Нет у меня к сожалению D6, посмотреть бы, но так понимаю, что в create компонента создается 2 элемента, которые потом и отрисовываются совместно. Вот только интересно, что взято тогда за основу... Впрочм, что гадать? Посмотрите в VCL- вот и все!
> 1. Можно ли (как ?) сделать копию стандартного компонента
> и поместить ее в палитру под другим именем?
Запросто!
Но сперва замечание: не всегда есть смысл и достаточная возможность наследовать от "конечного" компонента, часто приходится брать за основу промежоточный (например, вместо TLabel брать TCustomLabel). Ну и обязательно почитайте конечно книжку. Уж хоть какую-нибудь про написание компонент - там много всяких нюансов. Того же Тейксеру с Паченко, второй том.
Ну а теперь каркас "компонета". Т.е. создается просто копия без дополнительной функционатьности.
О, даже нет. Попался тут как раз под руку примерчик - очень удачный на мой взгляд. Тут и каркас просматривается, т.к. доп. кода мало, и в то же время можно посмотреть как что делается. Значит это недольшое расширение стандартного CheckBox с доп. свойством. (хотя зачем оно - я так и не понял: тоже самое срабатывает и в OnClick)
Заколовок модуля оставлен "фирменный", а наименование компонента я переделал из TAdvCheckBox в TЕхCheckBox.
{******************************************************************************}
{* TAdvCheckBox *}
{*----------------------------------------------------------------------------*}
{* Author: Alexander Markus, maxx@linznet.at *}
{* Last Change: 14.12.2000 *}
{*----------------------------------------------------------------------------*}
{* This small Component fires an Event every time the State of the Checkbox *}
{* changes. *}
{*----------------------------------------------------------------------------*}
{* new Event: *}
{* OnChange: TNotifyEvent *}
{******************************************************************************}
unit ExCheckBox;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TExCheckBox = class(TCheckBox)
private
FOnChange: TNotifyEvent;
protected
procedure Toggle; override;
published
property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("KSM", [TExCheckBox]);
end;
procedure TExCheckBox.Toggle;
begin
inherited Toggle;
if Assigned(FOnChange) then
FOnChange(Self);
end;
end.
← →
KSergey (2002-09-24 07:11) [4]Даааа, народ то как всегда знает намого больше и пишет быстрее... ;) Что же, будем тянуться ;)
← →
TTCustomDelphiMaster (2002-09-24 22:18) [5]http://interface.ru/borland/d5_2prraz1.htm
← →
Begin (2002-09-25 00:13) [6]Большое всем спасибо ! :) Буду дальше учиться ...
P.S. Все ж таки странно, что нет ничего визуального для создания хотя бы внешнего вида компонента. Я не ленивый, просто так удобнее. :)
← →
Юрий Зотов (2002-09-25 00:17) [7]> Буду дальше учиться ...
И это правильно. Только я бы посоветовал учиться все же по книгам, а не только на практике. Иначе будет и слишком долго, и много пробелов останется. Полуучеба получится.
← →
Begin (2002-09-25 00:31) [8]> Юрий Зотов
Да я и не возражаю, более того, прошу - посоветуйте еще чего ни будь... :) (на данный момент желательно именно по данному вопросу)
P.S. KSergey спасибо за совет, а название можно ? По фамилиям Яндех выдает только 3 ссылки .... :)
← →
Юрий Зотов (2002-09-25 00:48) [9]По написанию компонентов самая лучшая книга из всего, что я видел - Рэй Конопка. "Создание оригинальных компонентов в среде Delphi". Она издавалась уже давно, достать, наверное, будет непросто, но если достанете - хватайте и не отпускайте.
Из других - книга Тейксейры и Пачеко по Delphi 4 (возможно, и по другим Delphi тоже, но тех я подробно не читал, поэтому точно сказать не могу). Там не только создание компонентов, там много всего (кстати, много ценного), но и эта тема изложена очень неплохо. Во всяком случае, более полно, чем в других неспециализированных книгах, которые мне довелось видеть.
А учиться писать компоненты без книг - это примерно как самостоятельно учиться летать на самолете. Может, конечно, и взлетишь. Может, даже и сядешь. Но синяков будет очень много.
← →
KSergey (2002-09-26 12:50) [10]
> Юрий Зотов © (25.09.02 00:48)
Ну сядешь не сядешь, а приземлишься - это точно в любом случае!
> Begin © (25.09.02 00:31)
Название чего? Книги Тейксеры и Паченко?!! Да оно "одно", так сказать ;) (говорят ими или каждым в отдельности написано много, но эта пожалуй самая популярная) "Delphi X Руководство разработчика" (вместо X подставляется 4 или 5, впрочем особых различий между ними нету)
Но опять же кнга, упомянутая Юрием Зотовым более хвалится по компонентам, пожалуй.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c