![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый вечер. Вопрос: как сделать своё окошко в среде Delphi. Такие окошки есть, например, у графической библеотеки GLScene:
![]() Это очень удобно! В design time работать с наглядной информацией! Но вот как это сделать? ![]() Последний раз редактировалось DungeonLords, 19.01.2010 в 22:18. |
|
#2
|
||||
|
||||
|
Что-то не догнал, что вы хотите?
|
|
#3
|
||||
|
||||
|
если я правильно понял он хочет добавить фрейм (я знаю о нем но пользоваться не умею) таак что сам жду ответа
|
|
#4
|
|||
|
|||
|
Цитата:
? По поводу фрейма. Я тогда не понимаю, интересный факт - в папке с GLSCene нет ни одного .dpr файла (файла проекта) , а фрейм по сути подключается к файлу проекта. По крайней мере так в книжке написано, которая на этом сайте часто рекламируется вверху. В папке с GLSCene есть только .dpk, .pas, .dfm. .bat, .dof, .cfg, .res и .inc файлы . |
|
#5
|
|||
|
|||
|
.dfm -файл формы, тебе это окошко нужно для программы или компонента?
|
|
#6
|
|||
|
|||
|
Цитата:
|
|
#7
|
||||
|
||||
|
С чего вы взяли, что такого кроме GLScene нет? Полно компонент в которых есть аналогичная реализация. Например ImageList,TreeView и т.д. Компонент, это та-же программа, только со своей спецификой и как вы реализуете его свойства это зависит от вашей фантазии.
Последний раз редактировалось Страдалецъ, 20.01.2010 в 02:34. |
|
#8
|
|||
|
|||
|
Цитата:
"как вы реализуете его свойства это зависит от вашей фантазии" - дык я же понятно выразился что конкретно нужно сделать! Нужно чтобы по клику на свойство Image.Material в design time сейчас (на пепрвом этапе) вызывалась пустая форма, где потом можно будет параметры компонентра. Пишите, пожалуйста, по теме. *-Image приведён для примера. Выглядит объявление в ImageList вот так: Код:
TImageList = class(TDragImageList)
published
property BlendColor;
property BkColor;
property AllocBy;
property DrawingStyle;
property Height;
property ImageType;
property Masked;
property OnChange;
property ShareImages;
property Width;
end;Код:
TDragImageList = class(TCustomImageList)
private
FDragCursor: TCursor;
FDragging: Boolean;
FDragHandle: HWND;
FDragHotspot: TPoint;
FDragIndex: Integer;
procedure CombineDragCursor;
procedure SetDragCursor(Value: TCursor);
protected
procedure Initialize; override;
public
function BeginDrag(Window: HWND; X, Y: Integer): Boolean;
function DragLock(Window: HWND; XPos, YPos: Integer): Boolean;
function DragMove(X, Y: Integer): Boolean;
procedure DragUnlock;
function EndDrag: Boolean;
function GetHotSpot: TPoint; override;
procedure HideDragImage;
function SetDragImage(Index, HotSpotX, HotSpotY: Integer): Boolean;
procedure ShowDragImage;
property DragCursor: TCursor read FDragCursor write SetDragCursor;
property Dragging: Boolean read FDragging;
end;Сдаётся мне, что процедура SetDragCursor является обработчиком клика по компоненту: Код:
procedure TDragImageList.SetDragCursor(Value: TCursor);
begin
if Value <> DragCursor then
begin
FDragCursor := Value;
if Dragging then CombineDragCursor;
end;
end;Код:
procedure TDragImageList.CombineDragCursor;
var
TempList: HImageList;
Point: TPoint;
begin
if DragCursor <> crNone then
begin
TempList := ImageList_Create(GetSystemMetrics(SM_CXCURSOR),
GetSystemMetrics(SM_CYCURSOR), ILC_MASK, 1, 1);
try
ImageList_AddIcon(TempList, Screen.Cursors[DragCursor]);
ImageList_AddIcon(TempList, Screen.Cursors[DragCursor]);
ImageList_SetDragCursorImage(TempList, 0, 0, 0);
ImageList_GetDragImage(nil, @Point);
ImageList_SetDragCursorImage(TempList, 1, Point.X, Point.Y);
finally
ImageList_Destroy(TempList);
end;
end;
end; |
|
#9
|
||||
|
||||
|
Почитай любое пособие по созданию компонент. Для любого типа свойства всех компонент можно зарегистрировать соответствующий редактор свойств. Редактор - обычный класс, который при необходимости создает свою форму.
лично я разбирался с самих исходников поставляемых с дельфи, редактирование шрифта - именно так там и сделано. |
|
#10
|
||||
|
||||
|
Во, во. Ferra прав как никогда, все стандартно вызывается, главное хотеть
![]() |
|
#11
|
|||
|
|||
|
Цитата:
Впринципе здесь что-то сказано: http://wm-help.net/books-online/book...-100.html#anc6 , но там непонятно где брать dsgnintf.dcu. А здесь: http://www.excode.ru/art5770p2.html автор почти ответил на этот вопрос, но забыл рассказать где находится пункт "в окне редактора щелкнуть правой кнопкой мыши на пункте "Requires". Я ищу уже минут 5 этот пункт, нигде нету! Последний раз редактировалось DungeonLords, 20.01.2010 в 23:13. |
|
#12
|
||||
|
||||
|
Вот тебе кусок кода с моего старого проекта, разбирайся.
Код:
{$I versions.inc}
{$D-,L-,Y-}
unit uEditor;
interface
uses
Windows, Classes, Forms, Controls, ExptIntf, TypInfo, ToolIntf,
EditIntf, VirtIntf, SysUtils, Dialogs, ExtCtrls,
{$IFDEF DELPHI5_OR_ABOVE}
ToolsApi,
{$ENDIF}
{$IFNDEF DELPHI6_OR_ABOVE}
DsgnIntf,
{$ELSE}
DesignIntf,
DesignEditors,
VCLEditors,
{$ENDIF}
StdCtrls,
Graphics;
type
TAboutProperty = class(TClassProperty)
public
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
function GetValue: string; override;
{$IFDEF VER130}
procedure PropDrawName(ACanvas: TCanvas; const ARect: TRect;
ASelected: Boolean); override;
{$ENDIF}
end;
implementation
uses uFormAbout;
function TAboutProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog, paReadOnly {$IFDEF DELPHI5_OR_ABOVE}, paFullWidthName {$ENDIF}]
end ;
procedure TAboutProperty.Edit;
var
Form : TFormAbout;
begin
try
Form := TFormAbout.Create(nil);
Form.ShowModal;
finally
Form.Free;
end;
end;
function TAboutProperty.GetValue: string;
begin
Result := '(About)';
end;
{$IFDEF VER130}
procedure TCHAboutProperty.PropDrawName(ACanvas: TCanvas; const ARect: TRect;
ASelected: Boolean);
begin
ACanvas.Font.Style := [fsBold];
inherited PropDrawName(ACanvas, ARect, ASelected);
end;
{$ENDIF}
end. |
|
#13
|
|||
|
|||
|
Ferra,
интересный факт: 1) в GLScene много редакторов, но никто не наследуется от TClassProperty, а все либо от TForm, либо от TFame. 2) после установки GLSсene все файлы с формами (.dfm) становятся ненужными., 3) как бы я не потылся, у меня действительно создаётся новое свойство в инспекторе объектов (ура), но у него в поле-значении написан класс и никакого троеточия (тобиш никакого редактора при нажатии не открывается). Скриншот: ![]() Что посоветуете? Цитата:
Последний раз редактировалось Admin, 23.01.2010 в 14:59. |
|
#14
|
||||
|
||||
|
Писец, чувак, как же ты не догоняешь? Форма - визуально отобрает содержимое свойства.
Т.е. она лишь создаётся (тобой) , при вызове определённых методов. Тобой же и уничтожается, а не средой дельфи. Эту форму хоть в длл можно засунуть - принципиально ничего не изменится. А вот редактор свойства - это основной класс, наследуется от базовых, предоставляемых дельфи. Он то форму и создаёт. |