Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.19;
Скачать: CL | DM;

Вниз

Выделение группы контролов на форме....   Найти похожие ветки 

 
DmitryPV   (2002-09-09 09:21) [0]

Добрый день!
Имеется следущая задача: на форме расположены несколько TPanel. Как с помощью мыши (в рантайме) выделить часть из них, обведя при этом рамкой, как это, например, происходит на рабочем столе виндов при выделении группы ярлыков? Как определить какие выделены, а какие - нет (здесь вроде надо анализировать координаты панелей) ? Как потом это выделение снять?
Буду благодарен за помощь!


 
lenin ©   (2002-09-09 10:10) [1]

Примерно такой вариант:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, math;

type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
StX,StY: integer;
OlX, OlY: integer;
mdown: boolean;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if MDown then
begin
Canvas.DrawFocusRect(rect(min(StX,olx),min(StY,oly),max(StX,olx),max(StY,oly)));
OlX:=X;
OlY:=y;
Canvas.DrawFocusRect(rect(min(StX,olx),min(StY,oly),max(StX,olx),max(StY,oly)));
end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
StX:=x;
StY:=Y;
OlX:=X;
OlY:=y;
Canvas.DrawFocusRect(rect(StX,StY,OlX,OlY));
mdown:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
mdown:=false;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var rc1,rc2: TRect;
i: integer;
begin
mdown:=false;
rc1:=rect(min(StX,olx),min(StY,oly),max(StX,olx),max(StY,oly));
Canvas.DrawFocusRect(rc1);
for i:=0 to ControlCount-1 do
if Controls[i] is TPanel then
with Controls[i] as TPanel do
begin
rc2:=BoundsRect;
if (PtInRect(rc1,rc2.TopLeft))and(PtInRect(rc1,rc2.BottomRight)) then
caption:="++++"
else
caption:="----"
end;
end;

end.


 
DmitryPV   (2002-09-09 10:34) [2]

lenin ©
Большое спасибо за пример - все отлично работает!



Страницы: 1 вся ветка

Текущий архив: 2002.09.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.021 c
4-61347
novill
2002-07-26 15:16
2002.09.19
Мастаки! Как отключить заблокировать мышь над компонентом?


1-61107
Nikolai_S
2002-09-09 11:25
2002.09.19
Передача данных в Word через TWordApplication происходит медленно


1-61101
Vlad2
2002-09-09 07:16
2002.09.19
Published свойства компонентов


1-61179
gary5555
2002-09-08 11:07
2002.09.19
Как в компоненте ComboBox место текста вывести цветные прямоуголь


1-61042
DmitryPV
2002-09-09 09:21
2002.09.19
Выделение группы контролов на форме....