Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2008, 15:03   #1
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
Вопрос Выделение объектов в Canvas...

Данный код рисует 16 квадратиков на Image1
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
i, j: integer;
x, y, x1, y1: integer;
begin
  x:= 10; y:=10; x1:= 30; y1:=30;
  with Form1.Image1.Canvas do begin;
       Pen.Color:= ($0000FF);
       Brush.Color:= ($556677);
       Form1.Image1.Canvas.Rectangle(0,0,image1.Width,image1.Height);

       for  i:= 1 to 4 do
           for j:= 1 to 4 do begin
               RectAngle(x, y, x1, y1);
               Inc(x, (30));
               Inc(x1, (30));

               if j>= 4 then begin
                 x:=10; x1:= 30;
                 Inc(y, (30));
                 Inc(y1, (30));
               end;
           end;
   end;
end;
Как реализовать - когда пользователь мышкой проносит над любым из квадратиков, то он бы выделялся снаружи рамкой?
Например, белого цвета. Понимаю, что в событии MouseMove, но ерунда получается...
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 07.08.2008, 15:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот пример части рисунка который на форме как плитка отрисовывается:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ImgList;

type
  TForm1 = class(TForm)
    ImageList1: TImageList;
    procedure FormPaint(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var  a,b:integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);
var xo,yo,x,y,i:integer;
begin
 x:=0; y:=0;
 for i:=0 to ImageList1.Count-1 do begin
  ImageList1.Draw(Form1.Canvas,x,y,i);
  if (a>x)and(a<(x+64))and(b>y)and(b<y+64) then begin
   Canvas.Pen.Color:=clRed;
   Canvas.Brush.Style:=bsClear;
   Canvas.Pen.Width:=5;
   Canvas.Rectangle(x,y,x+64,y+64);
  end else begin
   Canvas.Pen.Color:=clNone;
   Canvas.Pen.Width:=0;
  end;
  xo:=x;yo:=y;
  if x+ImageList1.Width<Width then inc(x,64)
   else begin
    inc(y,64);x:=0;
   end;
 end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  a:=x;
  b:=y ;
  Repaint;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.08.2008, 19:29   #3
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 Stilet - долго и упорно не мог разобраться в твоем коде
Я решил проблему по-другому. Даже двумя спсобами. Но все же кинь исходник, хочу посмотреть, что твой код делает. Чет
Цитата:
как плитка отрисовывается:
- меня заинтересовало. ))))
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 09.08.2008, 21:36   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Как плитка, я думаю значит по сетке, как в проводнике режим показа "плитка". Судя по коду с интервалом в 64 пикселя.
Код довольно простой. Обрабатывается нажатие мыши и отрисовка окна.
Цитата:
Но все же кинь исходник
А это что было? Не исходник? )))

Кинь на форму ImageList, заполни его картинками, скопируй код и запускай. Добавь только процедуры к классу TForm1 (правый клик по процедуре - Complete class at cursor или вручную добавь) и назначь их на события (в инспекторе выберешь их в выпадающем списке к нужным событиям, т.к. названия стандартные можно просто дважды щелкнуть).
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 10.08.2008, 13:31   #5
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 mutabor ))))))) попробую ))))))
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение строки (canvas) в StringGrid elfo Помощь студентам 1 24.06.2008 12:12
Подключение Canvas Zeraim Общие вопросы Delphi 4 13.05.2008 20:51
Как очистить Canvas? Pro_BerSerK Общие вопросы Delphi 9 30.01.2008 16:03
Canvas.Polygon Sibedir Общие вопросы Delphi 2 18.01.2008 14:36
Canvas Zven Общие вопросы Delphi 9 06.12.2007 10:40