Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Создание красивой кнопки   Найти похожие ветки 

 
Кашперук Иван   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
10-1125181239
ДосЯ
2005-08-28 02:20
2006.11.05
Как из готового компонента на основе TWinControl зделать


15-1160934483
vidiv
2006-10-15 21:48
2006.11.05
Атом Неона (знатокам химии/физики)


2-1161344333
dest81
2006-10-20 15:38
2006.11.05
XML


2-1161538165
abba
2006-10-22 21:29
2006.11.05
Как из A(x1,y1) в B(x2,y2) в StringGrid?


15-1160622507
КиТаЯц
2006-10-12 07:08
2006.11.05
Задержка в пакетном файле