Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.06.2009, 11:17
antikhrist antikhrist вне форума
Прохожий
 
Регистрация: 23.06.2009
Сообщения: 7
Репутация: 10
По умолчанию Помогите новичку

Здравствуйте уважаемые форумчане, собственно такая проблема, результатом работы программы: По нажатию кнопки появляется прямоугольник (вертикальный), ещё раз нажали кнопку - рядом с предыдущим появляется ещё один такой же и так далее .... Я использую BitBtn и рисоваться прямоугольники должны в PaintBox'е, а не на всей форме. Помогите пожалуйста в реализации или может у кого есть пример чего-то похожего
Ответить с цитированием
  #2  
Старый 23.06.2009, 11:48
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

А я бы создавал TShape'ы на панели. Они сами себя рисуют.
Ответить с цитированием
  #3  
Старый 23.06.2009, 12:04
antikhrist antikhrist вне форума
Прохожий
 
Регистрация: 23.06.2009
Сообщения: 7
Репутация: 10
По умолчанию

Уточню задачу: по нажатии кнопки (BitBtn) рисуется прямоугольник, затем ещё раз её нажали рядом нарисовался такой же, и тд, но только в пределах одного PaintBox'а. И как бы была ещё возможность, затем эти нарисованные прямоугольники из одного PaintBox'а перетаскивать в другой .... Так что б в новом они появлялись а из другого исчезали %)
Ответить с цитированием
  #4  
Старый 23.06.2009, 12:09
PiboDIE PiboDIE вне форума
Прохожий
 
Регистрация: 17.06.2009
Сообщения: 28
Репутация: 10
По умолчанию

Цитата:
Сообщение от antikhrist
Здравствуйте уважаемые форумчане, собственно такая проблема, результатом работы программы: По нажатию кнопки появляется прямоугольник (вертикальный), ещё раз нажали кнопку - рядом с предыдущим появляется ещё один такой же и так далее .... Я использую BitBtn и рисоваться прямоугольники должны в PaintBox'е, а не на всей форме. Помогите пожалуйста в реализации или может у кого есть пример чего-то похожего
Если прямоугольники одного размера то все относительно просто:
Объявляется глобальная переменная, например RectCount: integer (или byte если не планируется большого кол-ва)
далее в коде нажатия на кнопку отрисовка прямоугольника - координаты по оси Х рассчитывать так: ...Left := RectCount*ширина_прямоугольника
Далее inc(RectCount)
Ответить с цитированием
  #5  
Старый 23.06.2009, 12:32
antikhrist antikhrist вне форума
Прохожий
 
Регистрация: 23.06.2009
Сообщения: 7
Репутация: 10
По умолчанию

Да, прямоугольники одного размера, вот предложили такой код
Код:
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: Пользуемся тегами!

но он чёт не хочет работать (((

Последний раз редактировалось Admin, 23.06.2009 в 14:03.
Ответить с цитированием
  #6  
Старый 23.06.2009, 13:02
PiboDIE PiboDIE вне форума
Прохожий
 
Регистрация: 17.06.2009
Сообщения: 28
Репутация: 10
По умолчанию

Цитата:
Сообщение от antikhrist
procedure TForm1.Button1Click(Sender: TObject);
begin
pb1.Canvas.Rectangle(x1, y1, x2, y2);
Dec(x1); Dec(x2); Dec(y1); Dec(y2);
end;
Тут что-то не то Вам предложили. В данном случае получается рисование прямоугольников справа налево и снизу вверх.
Я же Вам предлагал такой вариант
Код:
  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;
Рекомендую обнулить при создании формы RectCount := 0;
В качестве второго параметра вместо 0 можно передавать какую-то константу - отступ от верхнего края канвы (Это если прямоугольники должны рисоваться не вплотную к верхней кромке), но в этом случае не забудьте добавить это значение к 4му параметру, что бы сохранились корректные размеры прямоугольников.
Пишу с работы, где нет среды разработки - негде проверить работоспособность моего кода, пишу вслепую. Но, вроде как, с алгоритмом не ошибаюсь.

Последний раз редактировалось PiboDIE, 23.06.2009 в 13:14.
Ответить с цитированием
  #7  
Старый 23.06.2009, 16:49
antikhrist antikhrist вне форума
Прохожий
 
Регистрация: 23.06.2009
Сообщения: 7
Репутация: 10
По умолчанию

Да как бы код действительно немного не работает, но всё же внесу и уточню задачу, не всё так просто ....
На форме должна быть кнопка, по нажатии которой появляется небольшой прямоугольник в определённой ограниченной области формы, с запросом присвоить ему уникальный номер, идентификатор(на нём что б отображались эти цифры к примеру "1","2","3" и тому подобное) (так же в откомпилированном виде это должно быть видно что границы места куда добавляються прямоугольники ограничены). Затем при нажатии снова на ту же кнопку появляеться рядом с первым ещё один прямоугольник, не пересекаясь с уже созданным и тд... прямоугольники размещаються как элементы матрицы то есть
х х х х
х х х х
х х х х
таким образом, затем мы берём и из одной области перетаскиваем мышкой, тока по левой кнопке в другую область, подобной первой, только один прямоугольник, тот которой удерживаем мышью, при чём с первой области он конечно же пропадает.
1-я обл 2-я обл
х х х х х
х х х х
х х х
х х х х

и так далее, на форме должно быть 4-ре области таких, тоесть схематически выше я показал, что взяв любой прямоугольник, он перетаскиваеться во вторую область и становиться там сначала так же со 2-й и 3-й
Так же области ограничены по количеству прямоугольников их может быть 15 в каждой области, тоесть одновременно всего 15 используються одновременно , если в 1-й области 10, то во 2-й уже тока 5. Или к примеру в первой 10, во 2-й - 2, в 3-й - 3... и тд, Добавляються только на первую область прямоугольники, и так же по правой кнопке было б меню в котором были пункты типа переместить в 2-ю, или 3-ю область, или просто удалить....
Надеюсь тут подробно описал задачу...
Помогите пожайлуста кто чем может ......Заранее всем огромное спасибо!!!
Ответить с цитированием
  #8  
Старый 23.06.2009, 20:24
PiboDIE PiboDIE вне форума
Прохожий
 
Регистрация: 17.06.2009
Сообщения: 28
Репутация: 10
По умолчанию

Цитата:
Сообщение от antikhrist
Да как бы код действительно немного не работает, но всё же внесу и уточню задачу, не всё так просто ....
Что значит "немного не работает", я буквально сейчас его повторил и в итоге имею результат, полностью отвечающий первоначальной постановке проблемы.
То, что Вам это не совсем подходит, поскольку задача оказалась "не так проста" - значит, наверное, стоит изначально излагать ситуацию так, что бы было ясно, чего же Вы желаете добиться. Согласитесь, что Ваш первый пост разительно отличается от Вашего последнего.
Относительно Вашей задачи - врятли кто-то возьмется за спасибо реализовать это в полной мере, скорее всего, Вам стоит обратиться в раздел Работа: предложение и спрос и определить бюджет
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:37.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025