![]() |
|
|
|
|
#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
|
|||
|
|||
|
Цитата:
То, что Вам это не совсем подходит, поскольку задача оказалась "не так проста" - значит, наверное, стоит изначально излагать ситуацию так, что бы было ясно, чего же Вы желаете добиться. Согласитесь, что Ваш первый пост разительно отличается от Вашего последнего. Относительно Вашей задачи - врятли кто-то возьмется за спасибо реализовать это в полной мере, скорее всего, Вам стоит обратиться в раздел Работа: предложение и спрос и определить бюджет |