Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выделение панелей

16K
07 декабря 2008 года
alenov
36 / / 20.09.2007
Добрый день. Очередной вопрос. В процессе работы приложения на форме создается неопределенное количество панелей:
PanelArray:=TPanel.Create(Self);
Нужно, чтобы при наведении курсора мыши на любую из панелей, она изменяла свои свойства, например меняла цвет.
Что-то типа:

 
Код:
procedure TForm1.PanelArrayMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);

begin
  GetCursorPos(pos);
  if ((pos.X>PanelArray.Left) and (pos.Y>PanelArray.Top)) then
  PanelArray.Color:=clRed;

end;

Только это не работает. Если обработчик сделать для формы, то тоже не работает, потому что когда курсор на панели, то форма его не видит. Как вариант придумал выделять панель, когда курсор попадает в некую область вокруг панели, но это работает плохо, потому что панели могут соприкасаться и тогда выделяются сразу 2 панели.
Как еще можно решить эту проблему?
16K
08 декабря 2008 года
alenov
36 / / 20.09.2007
Код:
type
TForm1 = class(TForm)

procedure FormShow(Sender: TObject);
private
procedure OC(Sender:TObject);
public
PanelArray: array [1..50] of TPanel;
pos:TPoint;

var
Form1: TForm1;

procedure TForm1.OC(Sender:TObject);
var
i:integer;
begin
 GetCursorPos(pos);
 if (Sender is TPanel) then for i:=1 to 20 do
 begin
  if (((pos.X-Form1.Left)>PanelArray.Left) and ((pos.Y-Form1.Top)>PanelArray.Top)) then
  PanelArray.Color:= clBlue
  else PanelArray.Color:= clYellow;
 end;
end;

procedure FormShow(Sender: TObject);
var
i,a,b:integer;
begin
a:=20;
b:=20;
for i:=1 to 20 do
  begin
    PanelArray:= TPanel.Create(Self);
    PanelArray.Width:=25;
    PanelArray.Height:=25;
    PanelArray.Left:=a;
    PanelArray.Top:=b;
    a:=a+PanelArray.Width+2;
    PanelArray.Parent:=Form1;
    PanelArray.OnMouseEnter:=OC;
    PanelArray.Caption:=IntToStr(i);
    if a+PanelArray.Width>(Form1.Width) then
    begin
      a:=20;
      b:=b+PanelArray.Height+2;
    end;
  end;
end;

end.


Кое-что тут нужно еще подправить, но в целом работает. Проблема решена.
Спасибо всем, кто прочитал.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог