Показать сообщение отдельно
  #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
Ответить с цитированием