Рисование рамок или контуры окна при перемещении

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Рисование рамок или контуры окна при перемещении

Сообщение salog » 10.02.2009 11:22:23

Вопросы такие:
1) как сделать, чтобы при перемещении ToolBar или панели рисовался прозрачный контур, следующий за курсором мыши?
2) Как сделать рисование рамки поверх всех визуальных компонентов на форме, если я выполняю действие типа "выделить объекты" (двигаю мышку с нажатой левой кнопкой)?
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

Re: Рисование рамок или контуры окна при перемещении

Сообщение salog » 12.02.2009 03:21:54

Хорошо, задам вопрос по другому: как средствами Лазаруса рисовать на рабочем столе?

ИЛИ: как сделать полностью прозрачное окно?

Предполагается что я ориентируюсь на кросплатформенность.

Добавлено спустя 1 час 45 минут 30 секунд:
Или такой вариант: как рисовать на канве формы, чтобы при этом рисованное было СВЕРХУ расположенных на форме компонент??? В дизайнере Лазаруса это же как то сделано....
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

Re: Рисование рамок или контуры окна при перемещении

Сообщение Andreich » 12.02.2009 11:18:59

salog писал(а):как сделать полностью прозрачное окно?

Быть может все таки полу-прозрачное окно? Потому как с полностью прозрачным объектом работать довольно проблематично.

Добавлено спустя 23 минуты 24 секунды:
Andreich писал(а):как рисовать на канве формы, чтобы при этом рисованное было СВЕРХУ расположенных на форме компонент??? В дизайнере Лазаруса это же как то сделано....

Если имеется в виду выделительная рамка (т.н. "резиновый контур"), то вот ссылка: http://delphiworld.narod.ru/base/hotspot_comp.html.
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Рисование рамок или контуры окна при перемещении

Сообщение salog » 15.02.2009 07:08:09

Но это просто изменение размера панели с рисованием пунктира по контуру.
Панель то остается непрозрачной. .. если я правильно понял.

Я вроде нашел решение через процедуру Canvas.CopyRect.

Правда в последнем снапшоте который я скачал - как то криво компилируются присваивания типа:

r:=Rect(0,0,100,100);

А в еще более последнем снапшоте проекты вообще перестали компилироваться - не может найти какой то модуль в самом начале.
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

Re: Рисование рамок или контуры окна при перемещении

Сообщение Attid » 15.02.2009 11:59:44

могу ошибаться но

salog писал(а):1) как сделать, чтобы при перемещении ToolBar или панели рисовался прозрачный контур, следующий за курсором мыши?

после взятия быстро регистрируется курсор с нужным изображением и готово.

хотя просто контур можно и проще
http://www.podgoretsky.com/ftp/Docs/Del ... /ch_12.htm
Перемещение элементов

для кросплатформенного решения поискать эти сообщения в исходниках лазаря. там же будет и для линукса.


salog писал(а):2) Как сделать рисование рамки поверх всех визуальных компонентов на форме, если я выполняю действие типа "выделить объекты" (двигаю мышку с нажатой левой кнопкой)?

тут вроде просто рисовать надо ручками. например как тут
Код: Выделить всё
unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  ExtCtrls, JvGIF, StdCtrls, Buttons, jpeg;



type

  TForm1 = class(TForm)

    ScrollBox1: TScrollBox;

    Image1: TImage;

    Shape1: TShape;

    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

      Y: Integer);

    procedure BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

  private

    { Private declarations }

  public

  foo:Tpoint;

  state:boolean;

  end;



var

  Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

Shape1.Visible:=true;

Shape1.Top:=x;

Shape1.Left:=y;

Shape1.Height:=0;

Shape1.Width:=0;

foo.x:=x;

foo.y:=y;

state:=true;

end;



procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

Shape1.Top:=foo.x-x;

Shape1.Left:=foo.y-y;

state:=false;

end;



procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

  Y: Integer);

begin

if state then

begin

Shape1.Width:=x-foo.x;

Shape1.Height:=y-foo.y;

end;

end;



procedure TForm1.BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

ShowMessage(inttostr(x));

end;



end.



Добавлено спустя 3 минуты 55 секунд:
поискав резиновый контур наткнулся на такое

http://delphiworld.narod.ru/base/select ... angle.html
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 28

Рейтинг@Mail.ru