Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.01.2010, 22:10
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
Счастье Как сделать своё окошко в Delphi?

Добрый вечер. Вопрос: как сделать своё окошко в среде Delphi. Такие окошки есть, например, у графической библеотеки GLScene:

Это очень удобно! В design time работать с наглядной информацией! Но вот как это сделать?
__________________
Делаем'c разные игры. Искать на glscene.ru

Последний раз редактировалось DungeonLords, 19.01.2010 в 22:18.
Ответить с цитированием
  #2  
Старый 19.01.2010, 22:47
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Что-то не догнал, что вы хотите?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 19.01.2010, 22:49
Аватар для CTAJLUH
CTAJLUH CTAJLUH вне форума
Прохожий
 
Регистрация: 02.01.2010
Адрес: г. Нижний Новгород
Сообщения: 20
Репутация: 10
По умолчанию

если я правильно понял он хочет добавить фрейм (я знаю о нем но пользоваться не умею) таак что сам жду ответа
Ответить с цитированием
  #4  
Старый 19.01.2010, 23:33
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
Лампочка

Цитата:
Сообщение от Страдалецъ
Что-то не догнал, что вы хотите?
Посмотрите на картинку, там вы увидите Material Editor, этого нет в Delphi, но есть в граф. библеотеки GLSCene, которая как раз устанавливается внутрь Delphi как сторонний компонент. Вопрос в том, как разработчики сделали это ?

По поводу фрейма. Я тогда не понимаю, интересный факт - в папке с GLSCene нет ни одного .dpr файла (файла проекта) , а фрейм по сути подключается к файлу проекта. По крайней мере так в книжке написано, которая на этом сайте часто рекламируется вверху. В папке с GLSCene есть только .dpk, .pas, .dfm. .bat, .dof, .cfg, .res и .inc файлы .
__________________
Делаем'c разные игры. Искать на glscene.ru
Ответить с цитированием
  #5  
Старый 19.01.2010, 23:47
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

.dfm -файл формы, тебе это окошко нужно для программы или компонента?
Ответить с цитированием
  #6  
Старый 20.01.2010, 00:17
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
Восклицание Для компонента естественно.

Цитата:
Сообщение от Drozh
.dfm -файл формы, тебе это окошко нужно для программы или компонента?
Для компонента. То, что на рисунке - НЕ проект! Вот посмотрите на окошко GLScene Editor: GLScene1 на фотографии. Это окошко открылось после двойного щелчка по компоненту GLScene1 (кубик на форме) (см. инспектор объектов чтобы понять где что).
__________________
Делаем'c разные игры. Искать на glscene.ru
Ответить с цитированием
  #7  
Старый 20.01.2010, 02:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

С чего вы взяли, что такого кроме GLScene нет? Полно компонент в которых есть аналогичная реализация. Например ImageList,TreeView и т.д. Компонент, это та-же программа, только со своей спецификой и как вы реализуете его свойства это зависит от вашей фантазии.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 20.01.2010 в 02:34.
Ответить с цитированием
  #8  
Старый 20.01.2010, 16:49
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
Плохо

Цитата:
Сообщение от Страдалецъ
С чего вы взяли, что такого кроме GLScene нет? Полно компонент в которых есть аналогичная реализация. Например ImageList,TreeView и т.д. Компонент, это та-же программа, только со своей спецификой и как вы реализуете его свойства это зависит от вашей фантазии.
Ну вот захотелось мне привести GLScene. Вот я и спрашиваю, как создать эти форточки?

"как вы реализуете его свойства это зависит от вашей фантазии" - дык я же понятно выразился что конкретно нужно сделать! Нужно чтобы по клику на свойство 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;
Ну вот начинается хождение по модулям, но в итоге всё равно это не объясняет как сделана форточка. CombineDragCursor:
Код:
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  
Старый 20.01.2010, 19:19
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

Почитай любое пособие по созданию компонент. Для любого типа свойства всех компонент можно зарегистрировать соответствующий редактор свойств. Редактор - обычный класс, который при необходимости создает свою форму.

лично я разбирался с самих исходников поставляемых с дельфи, редактирование шрифта - именно так там и сделано.
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием
  #10  
Старый 20.01.2010, 20:10
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Во, во. Ferra прав как никогда, все стандартно вызывается, главное хотеть
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #11  
Старый 20.01.2010, 22:29
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
Печаль

Цитата:
Сообщение от Ferra
Почитай любое пособие по созданию компонент. Для любого типа свойства всех компонент можно зарегистрировать соответствующий редактор свойств. Редактор - обычный класс, который при необходимости создает свою форму.

лично я разбирался с самих исходников поставляемых с дельфи, редактирование шрифта - именно так там и сделано.
А можно пример (ссылку)? Буду очень благодарен. Вот сейчас ещё раз заглянул на всякий случай в ту бело-голубую книгу "Delphi 7", что рекламируется сверху слева. Я впринципе уже знал, что нужной информации там нет.

Впринципе здесь что-то сказано: 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  
Старый 21.01.2010, 14:54
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

Вот тебе кусок кода с моего старого проекта, разбирайся.
Код:
{$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  
Старый 23.01.2010, 11:24
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
Стрелка Хреново.

Ferra,
интересный факт:
1) в GLScene много редакторов, но никто не наследуется от TClassProperty, а все либо от TForm, либо от TFame.
2) после установки GLSсene все файлы с формами (.dfm) становятся ненужными.,
3) как бы я не потылся, у меня действительно создаётся новое свойство в инспекторе объектов (ура), но у него в поле-значении написан класс и никакого троеточия (тобиш никакого редактора при нажатии не открывается). Скриншот:


Что посоветуете?

Цитата:
Сообщение от Ferra
Вот тебе кусок кода с моего старого проекта, разбирайся.
Код:
{$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.
__________________
Делаем'c разные игры. Искать на glscene.ru

Последний раз редактировалось Admin, 23.01.2010 в 14:59.
Ответить с цитированием
  #14  
Старый 23.01.2010, 13:57
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

Писец, чувак, как же ты не догоняешь? Форма - визуально отобрает содержимое свойства.

Т.е. она лишь создаётся (тобой) , при вызове определённых методов. Тобой же и уничтожается, а не средой дельфи. Эту форму хоть в длл можно засунуть - принципиально ничего не изменится.

А вот редактор свойства - это основной класс, наследуется от базовых, предоставляемых дельфи. Он то форму и создаёт.
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:05.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025