Форум: "Компоненты";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
ВнизСоздание красивой кнопки Найти похожие ветки
← →
Кашперук Иван (2006-03-14 21:12) [0]Замучился, ей богу. До этого компоненты свои не создавал, и что-то совсем не получается.
Хочу кнопку, предок - TPanel, с определенными свойствами, вот как я это сделал:
unit MyBtnComponent;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Grids, Buttons, StdCtrls, ComCtrls, CheckLst;
type TMyBtn = class(TPanel)
private
{ Private declarations }
// fMyProperty: Integer;
fModalResult : TModalResult;
FMouseInPos : Boolean;
procedure CMMouseEnter(var AMsg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var AMsg: TMessage); message CM_MOUSELEAVE;
protected
{ Protected declarations }
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
public
Constructor Create(AOwner: TComponent); Override;
{ Public declarations }
published
{ Published declarations }
// property MyProperty:Integer read fMyProperty write fMyProperty;
property modalResult : TModalResult read fModalResult write fModalResult Default mrNone;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Standard", [TMyBtn]);
// RegisterPropertyEditor(TypeInfo(TPanelBevel), TMyBtn, "BevelInner", nil);
// RegisterPropertyEditor(TypeInfo(TPanelBevel), TMyBtn, "BevelOuter", nil);
end;
procedure TMyBtn.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
BevelInner := bvLowered;
Color := clINActiveBorder;
end;
procedure TMyBtn.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
BevelInner := bvRaised;
Color := clCream;
end;
procedure TMyBtn.CMMouseEnter(var AMsg: TMessage);
begin
FMouseInPos := True;
Color := clCream;
Refresh;
end;
procedure TMyBtn.CMMouseLeave(var AMsg: TMessage);
begin
FMouseInPos := False;
Color := clBtnFace;
Refresh;
end;
constructor TMyBtn.Create(AOwner: TComponent);
begin
inherited;
BevelInner := bvRaised;
BevelOuter := bvLowered;
Height := 25;
TabStop := True;
Width := 75;
FMouseInPos := False;
FullRepaint := False;
Color := clBtnFace;
end;
end.
Вопросы:
1. С горем пополам он у меня влез на панель сверху, хотя это долго пришлось делать - постоянно какие-то ошибки лезли, не хотел он туда, короче. Но! Картинка такая, как у TPanel. Я читал, что нужно создать свою MYBTNCOMPONENT.DCR (Image Editor) и кинуть рядом с MYBTNCOMPONENT.pas. Создал, кинул - картинка не меняется.
Как изменить картинку??
2. Для теста, когда создавал, создал property MyProperty - (в коде закоментировано) - не удаляется. То есть, я уже и перекомпилировал проект, и переBuildил его, и выходил и заходил в Делфи, ничего не помагает.
Добавил новое свойсто - modalResult, оно не появляется.
Как?
3. Хочу спрятать properties Bevel*, прочитал где-то, что это делается так:
// RegisterPropertyEditor(TypeInfo(TPanelBevel), TMyBtn, "BevelInner", nil);
Не рабоатет, просит добавить DesignIntf в Uses (это в хелпе), но при добавлении - ругается на такое имя.
4. Хочу менять цвет при входе и выходе мышки из Контрола - Создал два метода - все работает хорошо - НО это в Run-Time
А вот в Design-Time при создании Create отрабатывает нормально и кнопуля создается с цветом clBtnFace. Но когда мышкой на нее заходим, цвет меняется на clCream, и назад на clBtnFace менятся при выходе с кнопули не хочет, более того, при запуске приложения он так подсвеченным и остается.
5. Пока последнее :)
Вот, на обычном TButton, к примеру, при нажатии на нее текст Caption сдвигается немного вниз и вправо - выглядит очень естественно, что нажата кнопка.
Как они это делают?
Всмысле, как такое же повторить на TMyBtn? :)
И вообще, может у кого есть хорошие кнопочки с исходниками кому не жалко?
Спасибо
← →
Юрий Зотов © (2006-03-14 22:36) [1]http://www.delphikingdom.com/asp/viewitem.asp?catalogid=888
Это если нужна готовая кнопка. А если хочется все же докопаться до глубин самому, то давайте придерживаться принятых здесь правил: одна ветка - один вопрос. Иначе каша получится.
А если докопаться до глубин хочется всерьез, то советую обзавестись книжкой именно по разработке компонентов (Веселов с Головановым, либо Фаронов). Не пожалеете.
← →
DimaBr (2006-03-15 10:19) [2]1. Если изначально компилилось без DCR, то автоматом вряд ли прицепится. Открываем DPK и дописываем {$R "MYBTNCOMPONENT.dcr"}
2. Нужно компилить не проэкт а ПАКЕТ -> Open *.DPK -> Compile
3. Не смыла прятать свойства, если есть предок с неопубликованным свойством -> TCustomPanel.
4. Для обработки в дизайнере лучше перехватывать cm_DesignHitTest
5. Paint (X+1,Y+1)
← →
Кашперук Иван (2006-03-15 20:51) [3]Да, я уже в той или иной степени разобрался, спасибо Юрию за ссылочку - довольно неплохая, натолкнула на много хороших идей.
2 DimaBr
1. Да все дело в том, что я в дизайнере пакета удаляю файл и dcr файл, перекомпилирую, компоненты пропадают. Заново импортирую, в той же папке лежит и dcr, он добавляется автоматом в пакет, но картинка не меняется.
4. А зачем? зачем должен менятся шрифт и текст в дизайнере?? Я не хочу, к примеру, чтобы он менялся вообще. Как-то это можно сделать?
← →
Кашперук Иван (2006-03-15 21:09) [4]Посмотрел только что файлик пакета - там прописан путь к dcr файлу с рисунком.
Может неправильное имя?
Но я только что уже пробовал по-разному называть: и как название юнита, и как название класса компонента, и как название компонента ( без Т)
Изображение все равно остается от предка. (TGraphicControl)
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c