Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2011, 18:38   #1
obsession
Пользователь
 
Аватар для obsession
 
Регистрация: 08.05.2011
Сообщений: 61
По умолчанию задача на onmousedown

создать проект "Цветочная поляна". При нажатии левой кнопки мыши в любом месте формы появляется рисунок цветка.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
image1.left:=x;
image1.Top:=y;

end;

end.
Подскажите, пожалуйста, что нужно еще добавить, чтобы нарисованый цветок не исчезал после следующего нажатия кнопки мыши
obsession вне форума Ответить с цитированием
Старый 17.05.2011, 19:06   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Твой код просто передвигает Image в точку нажатия мыши.
Используй Canvas формы.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 18.05.2011, 08:14   #3
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Я бы посоветовал использовать TBitmap и отрисовывать его на канве формы
Код:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var B:TBitMap;
begin
//при условии что файл цветка имеет расширение *.bmp
 B:=TBitMap.Create;
 B.LoadFormFile('Путь к файлу цветка');
 Form1.Canvas.Draw(x,y,B); 
 FreeAndNil(B);
end;
SERG1980 вне форума Ответить с цитированием
Старый 18.05.2011, 08:29   #4
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Кинь на форму еще Image2 со свойством:
Align = alClient.
Затем на самом Image2 нажми правой кнопкой мыши и в подменю Control выбери SendToBack.

После в событии Image2.OnMouseDown пиши:
Код:
procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     image1.left:=x - image1.width div 2;
     image1.Top:=y - image1.height div 2;
     Image2.Canvas.CopyRect(Rect(x - image1.width div 2,y - image1.height div 2,x + image1.width div 2,y + image1.height div 2),Image1.Canvas,Rect(0,0,Image1.Width,Image1.Height));
end;
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 19.05.2011, 16:53   #5
obsession
Пользователь
 
Аватар для obsession
 
Регистрация: 08.05.2011
Сообщений: 61
По умолчанию

а по проще никак нельзя?
obsession вне форума Ответить с цитированием
Старый 20.05.2011, 08:07   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от obsession Посмотреть сообщение
а по проще никак нельзя?
А куда уж проще то?
SERG1980 вне форума Ответить с цитированием
Старый 20.05.2011, 08:26   #7
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

можно создать объект цветка,
содержащий указатель на битмап и две координаты - x, y;
создать массив таких объектов, и по щелчку мыши добавлять новый объект в массив.
а потом в OnPaint формы отрисовывать этот массив на канвасе формы.
при этом, кстати, будет мелькание...

а если вы просто нарисуете на канвасе формы, то рисунок сотрется при перетаскивании формы.
массив объектов цветка позволяет редактировать их положение/присутствие,
но если этого не нужно, то можно сделать проще:

создать битмап, размером с форму и при клике мышкой по форме рисовать на этом битмапе,
а в OnPaint формы отрисовывать этот битмап на канвасе формы.

вопрос к опытным програмерам - что будет быстрее, создать 20 TImage или массив с описанием цветков и каждый раз отрисовывать по новой?
xrob вне форума Ответить с цитированием
Старый 20.05.2011, 08:36   #8
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от obsession Посмотреть сообщение
а по проще никак нельзя?
можно , вот, во вложении то что я выше написал

пс: правда у меня цветочка под рукой не было, пришлось использовать ключики
Вложения
Тип файла: rar image.rar (6.3 Кб, 10 просмотров)
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OnMouseDown обьекта при клике по другому MyLastHit Общие вопросы Delphi 3 28.12.2010 18:31
dbgrid OnMouseDown vavajke Общие вопросы Delphi 2 17.11.2010 20:01
Количество выполнений OnMouseDown Alex Cones Общие вопросы Delphi 2 28.04.2009 21:05
OnMouseDown в игре. Titan123 Gamedev - cоздание игр: Unity, OpenGL, DirectX 10 29.07.2008 13:10
onMouseDown в MainMenu chingiz Помощь студентам 2 26.07.2007 23:08