Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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.055 c
1-1159112496
dreamse
2006-09-24 19:41
2006.11.05
Подключение ActiveX к проекту


2-1161167932
Priest
2006-10-18 14:38
2006.11.05
Как удалить объект из дочернего потока


15-1161000666
clickmaker
2006-10-16 16:11
2006.11.05
Вакансии Delphi


3-1157633650
MsGuns
2006-09-07 16:54
2006.11.05
Остановить запрос в потоке


4-1150881828
DmitryFox
2006-06-21 13:23
2006.11.05
Доступ к файлу в сжатой папке с паролем





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский