Конференция "Компоненты" » У TCustomControl не хочет работать PopupMenu
 
  • TStas © (06.05.08 18:41) [0]
    Есть наследник TCustomControl - TStGraphNode. Это такскаемый за любое место элемент схемы. Вот всё объявление класса:
    type
     TStGraphNode = class(TCustomControl)
     private
       { Private declarations }
       FCycle: Boolean;
       FRgnHandle: THandle;
       FColor: TColor;
       FSize: Byte;
       Procedure WMNCHitTest(Var Msg: TWMNCHitTest); Message WM_NCHitTest;
       procedure SetColor(const Value: TColor);
       function GetCenter: TPoint;
       procedure SetCenter(const Value: TPoint);
     protected
       { Protected declarations }
       Procedure Paint; override;
       Procedure SetParent(AParent: TWinControl); override;
     public
       { Public declarations }
       constructor Create(AOwner: TComponent; ASize: Byte;
         ACycle: Boolean = false); reintroduce;
     published
       { Published declarations }
       Property Color: TColor read FColor write SetColor;
       Property Cycle: Boolean read FCycle;
       Property Center: TPoint read GetCenter write SetCenter;
     end;

    Прямо у конструкторе присваиваю менюшку:
    constructor TStGraphNode.Create(AOwner: TComponent; ASize: Byte;
     ACycle: Boolean = false);
    begin
     inherited Create(AOwner);
     Width := ASize;
     Height := ASize;
     FCycle := ACycle;
     FSize := ASize;
     PopupMenu := MainForm.PopupMenu2;

     If FCycle then
       FRgnHandle := CreateEllipticRgn(0, 0, Width, Height)
     else
       FRgnHandle := 0;
    end

    В главной форме эти компоненты создаются динамически:
    procedure TMainForm.CreateNode(Size: Byte; IsQuadrat: Boolean);
    var
     NewGraphNode: TStGraphNode;
    begin
     NewGraphNode := TStGraphNode.Create(Self, Size, IsQuadrat);
     NewGraphNode.Parent := Self;
    end;

    Так вот у них не появляется PopupMenu, а она очень нужна. Без этой менюшки они вообще не нужны :(
    Как с этом бороться?
  • TStas © (06.05.08 18:44) [1]
    Попытка перенести назначение PopupMenu в процедуру создания после присвоения Parent, ничего не дала
  • TStas © (06.05.08 19:16) [2]
    Вопрос снят. Дело в том, что для того, чтобы можно было мышкой таскать, я написал:
    procedure TStGraphNode.WMNCHitTest(var Msg: TWMNCHitTest);
    begin
     Inherited;

     If Msg.Result = htClient then
       Msg.Result := htCaption;
    end;
    Всё в это упираетмя. То есть, система считает, что мышь всегда на капшене. Поэтому менюшка и не появляется и не появится никогда.
  • Olegz77 © (06.05.08 21:09) [3]
    Для перетаскивания наверное лучше перегрузить MouseDown и написать:
     ReleaseCapture;
     Perform(WM_SYSCOMMAND, $F012, 0);
  • TStas © (12.05.08 17:58) [4]
    Просто я уже написал это и трогать не хочется.
 
Конференция "Компоненты" » У TCustomControl не хочет работать PopupMenu
Есть новые Нет новых   [134464   +62][b:0][p:0]