|
#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
|
|||
|
|||
Цитата:
То, что Вам это не совсем подходит, поскольку задача оказалась "не так проста" - значит, наверное, стоит изначально излагать ситуацию так, что бы было ясно, чего же Вы желаете добиться. Согласитесь, что Ваш первый пост разительно отличается от Вашего последнего. Относительно Вашей задачи - врятли кто-то возьмется за спасибо реализовать это в полной мере, скорее всего, Вам стоит обратиться в раздел Работа: предложение и спрос и определить бюджет |
#9
|
|||
|
|||
Я требую не полностью всё выполненое задание а только наброски, так сказать черновики... Поэтому подскажите кто как-бы реализовал какую часть задачи и как сделать лучше.
|
#10
|
||||
|
||||
Сами виноваты, что неверно сформулировали исходное задание, теперь нечего обижаться на возмущение форумчан.
Перетаскивать мышью картинку нарисованную на канве нельзя т.к. она является составной частью канвы, поэтому вам придется каждый ваш квадратик оформлять как отдельный объект. За основу можно взять любой компонент у которого есть доступное свойство канва - TImage, TShape, TPaintBox и т.д. Далее вы можете создавать динамически при каждом нажатии кнопки новый квадратик или-же сделать их все сразу и последовательно отображать. Перетягивание квадратиков можно реализовать с помощью методов Drag, Drop или обработав события OnMouseMove OnMouseDown. Остается последний шаг это раскладывание их в новом месте. Про это вы написали очень скупо, а потому подождем ваших комментариев. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
|||
|
|||
Да я собственно и не обижался ... По поводу расположений при перетаскивании, в новой области одни должны располагаться как плитка, не касаясь друг друга. Появляться в первом поле тоже как плитка, добавляться при нажатии кнопки типа (Button)
|