Конференция "KOL" » KolGif перетаскивание формы
 
  • Гость (20.12.10 09:30) [0]
    Подскажите пожалуйста, как реализовать перетаскивание формы полностью перекрытой KolGif.
  • Vladimir Kladov © (20.12.10 16:10) [1]
    MouseTransparent := true; - пробовали?
  • Гость (20.12.10 19:04) [2]
    Спасибо!!!
    Как всегда - все гениальное просто.
  • RusSun © (17.07.12 17:38) [3]
    Чтобы не плодить новую тему спрошу здесь.

    У меня на форме memo я использовал
    memo.MouseTransparent;


    после чего по нажатию на мышь перемещаю форму.

    Вопрос: как мне теперь обратно вернуть
    memo.MouseTransparent = false?

  • RusSun © (21.07.12 07:51) [4]
    Вот что пока получилось
    program Project1;

    uses
    Windows,KOL;
    {$R *.res}
    type
    PForm1 = ^TForm1;
    TForm1 = object(TObj)
      Form: PControl;
    protected
    Memo:PControl;
    public
      procedure W_MouseDown(Sender: PControl; var Mouse: TMouseEventData);
      procedure PMMove (Sender: PMenu; Item: Integer);
      procedure PMExit(Sender: PMenu; Item: Integer);

    end;

    var
    Form1: PForm1;
    PopupMenu:pmenu;

    dragging:boolean;

    Procedure TForm1.W_MouseDown(Sender: PControl; var Mouse: TMouseEventData);
    begin
        if (Mouse.Button = mbLeft)and dragging then form.DragStart// Левая клавиша мыши  - Перемещаем окно
       // if (Mouse.Button = mbRight) then Halt;       // Правая клавиша мыши - Выход из программы
    end;
    procedure TForm1.PMMove (Sender: PMenu; Item: Integer);
    begin
    form.Caption:='something Move';
    if not dragging then begin dragging:=true;PopupMenu.ItemChecked[0]:=true; end
    else begin dragging:=false;PopupMenu.ItemChecked[0]:=false; end;

    memo.MouseTransparent;

    end;
    procedure TForm1.PMExit(Sender: PMenu; Item: Integer);
    begin
    form.Close
    end;

    procedure NewForm1(var Result: PForm1; AParent: PControl);
    var
    Style: Integer;
    begin
    New(Result, Create);
    with Result^ do
    begin
      form := NewForm(AParent, 'PDragMemoForm');
      form.Add2AutoFree(Result);
      Applet := Form;
      form.SetClientSize(320, 240).CenterOnParent;
      form.HasCaption := False; // Скрываем заголовок окна  ,eoNoVScroll
      form.HasBorder := False;  // Скрываем бордюр
      form.Color:=$00FFB3B3;

      NewMenu( form, 0, [ '' ], nil );                                                                        //
      PopupMenu :=  NewMenu( form, 0, ['Переместить','-' , 'Выход'], nil );

      PopupMenu.AssignEvents( 0, [PMMove] );
      PopupMenu.AssignEvents( 2, [PMExit] );

      Memo:=NewEditBox(form,[eoMultiline, eoNoHScroll]);
      Memo.Color := clWindow;
      Memo.setalign(caClient); //caBottom
      Memo.Font.FontHeight := 24;
      Memo.Font.FontName:='Comic Sans MS';
      Memo.text:='SubMenu - дескриптор подчиненного меню. Фактически, эквивалентен Handle;'+
    'MenuID - внутренний числовой \"идентификатор\" элемента меню, назначается кодом KOL.'+
    'Т.к. число доступных идентификаторов не может превышать 65535, и эти идентификаторы'+
    'не могут переиспользоваться повторно, то не следует постоянно в процессе длительной'+
    'работы создавать и удалять пункты меню слишком часто. В том числе, не следует делать'+
    'их \"скрытыми\", т.к. сокрытие и показ пунктов меню реализуется именно как уничтожение'+
    'и создание новых элементов (в Windows нет возможности прятать пункты меню по-другому).'+
    'Вместо этого рекомендуется использовать возможность делать пункты меню недоступными или'+
    'доступными (разрешенными - enabled) по мере надобности;';//+#13#10
      Memo.SetAutoPopupMenu( PopupMenu );

      Form.OnMouseDown := W_MouseDown; // Процедура срабатывает при нажатии кнопки на мыши
      Form.SetAutoPopupMenu( PopupMenu );

      SetProcessWorkingSetSize(GetCurrentProcess, Cardinal(-1), Cardinal(-1));

      dragging:=false;
    end;
    end;

    begin
    NewForm1(Form1, nil);
    Run(Form1.Form);
    end.

    Если не перемещать то мышью курсор можно переставить в любую часть мемо. Если переместить, то курсор будет в одном месте. Клики теперь идут по форме поэтому он двигается только с помощью стрелок на клавиатуре.
  • Дмитрий К © (21.07.12 10:49) [5]
    uses Messages
    ...
    function WndProcMouseTransparent( Sender: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean; {из KOL.pas}
    begin
     Result := FALSE;
     if Msg.message = WM_NCHITTEST then
     begin
       Rslt := HTTRANSPARENT;
       Result := TRUE;
     end;
    end;

    procedure TForm1.PMMove (Sender: PMenu; Item: Integer);
    begin
     form.Caption:='something Move';
     if not dragging then
     begin
       dragging:=true;
       PopupMenu.ItemChecked[0]:=true;
       memo.AttachProc( WndProcMouseTransparent );
     end
     else begin
       dragging:=false;
       PopupMenu.ItemChecked[0]:=false;
       memo.DetachProc( WndProcMouseTransparent );
     end;
    end;
    ...

 
Конференция "KOL" » KolGif перетаскивание формы
Есть новые Нет новых   [134427   +35][b:0][p:0.003]