![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый вечер. Вопрос: как сделать своё окошко в среде Delphi. Такие окошки есть, например, у графической библеотеки GLScene:
![]() Это очень удобно! В design time работать с наглядной информацией! Но вот как это сделать? ![]() Делаем'c разные игры. Искать на glscene.ru Последний раз редактировалось DungeonLords, 19.01.2010 в 22:18. |
#2
|
||||
|
||||
![]() Что-то не догнал, что вы хотите?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
![]() если я правильно понял он хочет добавить фрейм (я знаю о нем но пользоваться не умею) таак что сам жду ответа
|
#4
|
|||
|
|||
![]() Цитата:
![]() По поводу фрейма. Я тогда не понимаю, интересный факт - в папке с GLSCene нет ни одного .dpr файла (файла проекта) , а фрейм по сути подключается к файлу проекта. По крайней мере так в книжке написано, которая на этом сайте часто рекламируется вверху. В папке с GLSCene есть только .dpk, .pas, .dfm. .bat, .dof, .cfg, .res и .inc файлы ![]() Делаем'c разные игры. Искать на glscene.ru |
#5
|
|||
|
|||
![]() .dfm -файл формы, тебе это окошко нужно для программы или компонента?
|
#6
|
|||
|
|||
![]() Цитата:
Делаем'c разные игры. Искать на glscene.ru |
#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; Делаем'c разные игры. Искать на glscene.ru |
#9
|
||||
|
||||
![]() Почитай любое пособие по созданию компонент. Для любого типа свойства всех компонент можно зарегистрировать соответствующий редактор свойств. Редактор - обычный класс, который при необходимости создает свою форму.
лично я разбирался с самих исходников поставляемых с дельфи, редактирование шрифта - именно так там и сделано. Нет повести печальнее на свете, чем повесть о заклиневшем Resete. ![]() |
#10
|
||||
|
||||
![]() Во, во. Ferra прав как никогда, все стандартно вызывается, главное хотеть
![]() Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#11
|
|||
|
|||
![]() Цитата:
Впринципе здесь что-то сказано: http://wm-help.net/books-online/book...-100.html#anc6 , но там непонятно где брать dsgnintf.dcu. А здесь: http://www.excode.ru/art5770p2.html автор почти ответил на этот вопрос, но забыл рассказать где находится пункт "в окне редактора щелкнуть правой кнопкой мыши на пункте "Requires". Я ищу уже минут 5 этот пункт, нигде нету! Делаем'c разные игры. Искать на glscene.ru Последний раз редактировалось 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. Нет повести печальнее на свете, чем повесть о заклиневшем Resete. ![]() |
#13
|
|||
|
|||
![]() Ferra,
интересный факт: 1) в GLScene много редакторов, но никто не наследуется от TClassProperty, а все либо от TForm, либо от TFame. 2) после установки GLSсene все файлы с формами (.dfm) становятся ненужными., 3) как бы я не потылся, у меня действительно создаётся новое свойство в инспекторе объектов (ура), но у него в поле-значении написан класс и никакого троеточия (тобиш никакого редактора при нажатии не открывается). Скриншот: ![]() Что посоветуете? Цитата:
Делаем'c разные игры. Искать на glscene.ru Последний раз редактировалось Admin, 23.01.2010 в 14:59. |
#14
|
||||
|
||||
![]() Писец, чувак, как же ты не догоняешь? Форма - визуально отобрает содержимое свойства.
Т.е. она лишь создаётся (тобой) , при вызове определённых методов. Тобой же и уничтожается, а не средой дельфи. Эту форму хоть в длл можно засунуть - принципиально ничего не изменится. А вот редактор свойства - это основной класс, наследуется от базовых, предоставляемых дельфи. Он то форму и создаёт. Нет повести печальнее на свете, чем повесть о заклиневшем Resete. ![]() |