![]() |
|
|
#1
|
|||
|
|||
![]() Здравствуйте уважаемые форумчане, собственно такая проблема, результатом работы программы: По нажатию кнопки появляется прямоугольник (вертикальный), ещё раз нажали кнопку - рядом с предыдущим появляется ещё один такой же и так далее .... Я использую BitBtn и рисоваться прямоугольники должны в PaintBox'е, а не на всей форме. Помогите пожалуйста в реализации или может у кого есть пример чего-то похожего
|
#2
|
|||
|
|||
![]() А я бы создавал TShape'ы на панели. Они сами себя рисуют.
|
#3
|
|||
|
|||
![]() Уточню задачу: по нажатии кнопки (BitBtn) рисуется прямоугольник, затем ещё раз её нажали рядом нарисовался такой же, и тд, но только в пределах одного PaintBox'а. И как бы была ещё возможность, затем эти нарисованные прямоугольники из одного PaintBox'а перетаскивать в другой .... Так что б в новом они появлялись а из другого исчезали %)
|
#4
|
|||
|
|||
![]() Цитата:
Объявляется глобальная переменная, например RectCount: integer (или byte если не планируется большого кол-ва) далее в коде нажатия на кнопку отрисовка прямоугольника - координаты по оси Х рассчитывать так: ...Left := RectCount*ширина_прямоугольника Далее inc(RectCount) |
#5
|
|||
|
|||
![]() Да, прямоугольники одного размера, вот предложили такой код
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; pb1: TPaintBox; pb2: TPaintBox; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; x1, y1, x2, y2: integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin pb1.Canvas.Rectangle(x1, y1, x2, y2); Dec(x1); Dec(x2); Dec(y1); Dec(y2); end; procedure TForm1.FormCreate(Sender: TObject); begin x1 := 100; x2 := 200; y1 := 100; y2 := 200; end; procedure TForm1.Button2Click(Sender: TObject); begin pb2.Canvas.CopyRect(pb2.ClientRect, pb1.Canvas, pb1.ClientRect); end; end. но он чёт не хочет работать ((( Последний раз редактировалось Admin, 23.06.2009 в 14:03. |
#6
|
|||
|
|||
![]() Цитата:
Я же Вам предлагал такой вариант Код:
var RectCount: integer; //Кол-во отрисованных прямоуголников RectWidth, RectHeight: integer; //Ширина и высота прямоугольников. Можно даже константой объявить. ... procedure TForm1.Button1Click(Sender: TObject); begin pb1.Canvas.Rectangle(RectWidth*RectCount, 0, RectWidth*RectCount+RectWidth, RectHeight); или pb1.Canvas.Rectangle(RectWidth*RectCount, 0, RectWidth*(RectCount+1), RectHeight); Inc(RectCount); end; В качестве второго параметра вместо 0 можно передавать какую-то константу - отступ от верхнего края канвы (Это если прямоугольники должны рисоваться не вплотную к верхней кромке), но в этом случае не забудьте добавить это значение к 4му параметру, что бы сохранились корректные размеры прямоугольников. Пишу с работы, где нет среды разработки - негде проверить работоспособность моего кода, пишу вслепую. Но, вроде как, с алгоритмом не ошибаюсь. Последний раз редактировалось PiboDIE, 23.06.2009 в 13:14. |
#7
|
|||
|
|||
![]() Да как бы код действительно немного не работает, но всё же внесу и уточню задачу, не всё так просто ....
На форме должна быть кнопка, по нажатии которой появляется небольшой прямоугольник в определённой ограниченной области формы, с запросом присвоить ему уникальный номер, идентификатор(на нём что б отображались эти цифры к примеру "1","2","3" и тому подобное) (так же в откомпилированном виде это должно быть видно что границы места куда добавляються прямоугольники ограничены). Затем при нажатии снова на ту же кнопку появляеться рядом с первым ещё один прямоугольник, не пересекаясь с уже созданным и тд... прямоугольники размещаються как элементы матрицы то есть х х х х х х х х х х х х таким образом, затем мы берём и из одной области перетаскиваем мышкой, тока по левой кнопке в другую область, подобной первой, только один прямоугольник, тот которой удерживаем мышью, при чём с первой области он конечно же пропадает. 1-я обл 2-я обл х х х х х х х х х х х х х х х х и так далее, на форме должно быть 4-ре области таких, тоесть схематически выше я показал, что взяв любой прямоугольник, он перетаскиваеться во вторую область и становиться там сначала так же со 2-й и 3-й Так же области ограничены по количеству прямоугольников их может быть 15 в каждой области, тоесть одновременно всего 15 используються одновременно , если в 1-й области 10, то во 2-й уже тока 5. Или к примеру в первой 10, во 2-й - 2, в 3-й - 3... и тд, Добавляються только на первую область прямоугольники, и так же по правой кнопке было б меню в котором были пункты типа переместить в 2-ю, или 3-ю область, или просто удалить.... Надеюсь тут подробно описал задачу... Помогите пожайлуста кто чем может ......Заранее всем огромное спасибо!!! |
#8
|
|||
|
|||
![]() Цитата:
То, что Вам это не совсем подходит, поскольку задача оказалась "не так проста" - значит, наверное, стоит изначально излагать ситуацию так, что бы было ясно, чего же Вы желаете добиться. Согласитесь, что Ваш первый пост разительно отличается от Вашего последнего. Относительно Вашей задачи - врятли кто-то возьмется за спасибо реализовать это в полной мере, скорее всего, Вам стоит обратиться в раздел Работа: предложение и спрос и определить бюджет |