Форум по 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
Да как бы код действительно немного не работает, но всё же внесу и уточню задачу, не всё так просто ....
Что значит "немного не работает", я буквально сейчас его повторил и в итоге имею результат, полностью отвечающий первоначальной постановке проблемы.
То, что Вам это не совсем подходит, поскольку задача оказалась "не так проста" - значит, наверное, стоит изначально излагать ситуацию так, что бы было ясно, чего же Вы желаете добиться. Согласитесь, что Ваш первый пост разительно отличается от Вашего последнего.
Относительно Вашей задачи - врятли кто-то возьмется за спасибо реализовать это в полной мере, скорее всего, Вам стоит обратиться в раздел Работа: предложение и спрос и определить бюджет
Ответить с цитированием
  #9  
Старый 24.06.2009, 09:20
antikhrist antikhrist вне форума
Прохожий
 
Регистрация: 23.06.2009
Сообщения: 7
Репутация: 10
По умолчанию

Я требую не полностью всё выполненое задание а только наброски, так сказать черновики... Поэтому подскажите кто как-бы реализовал какую часть задачи и как сделать лучше.
Ответить с цитированием
  #10  
Старый 24.06.2009, 15:11
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Сами виноваты, что неверно сформулировали исходное задание, теперь нечего обижаться на возмущение форумчан.
Перетаскивать мышью картинку нарисованную на канве нельзя т.к. она является составной частью канвы, поэтому вам придется каждый ваш квадратик оформлять как отдельный объект. За основу можно взять любой компонент у которого есть доступное свойство канва - TImage, TShape, TPaintBox и т.д. Далее вы можете создавать динамически при каждом нажатии кнопки новый квадратик или-же сделать их все сразу и последовательно отображать. Перетягивание квадратиков можно реализовать с помощью методов Drag, Drop или обработав события OnMouseMove OnMouseDown. Остается последний шаг это раскладывание их в новом месте. Про это вы написали очень скупо, а потому подождем ваших комментариев.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #11  
Старый 24.06.2009, 16:00
antikhrist antikhrist вне форума
Прохожий
 
Регистрация: 23.06.2009
Сообщения: 7
Репутация: 10
По умолчанию

Да я собственно и не обижался ... По поводу расположений при перетаскивании, в новой области одни должны располагаться как плитка, не касаясь друг друга. Появляться в первом поле тоже как плитка, добавляться при нажатии кнопки типа (Button)
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter