|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.05.2008, 14:35 | #1 |
Форумчанин
Регистрация: 30.03.2008
Сообщений: 392
|
рисование в TImage
Здравствуйте, помогите мне пожалуйста, по идее, с помощью программы можно было бы рисовать в TImage1 c помощью карандашика, а при отведении курсора от TImage, он должен становиться обычным:
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var downkey: boolean = false; procedure TForm1.FormCreate(Sender: TObject); begin Screen.Cursors[1]:=LoadCursorFromFile('Cursor1.cur') ; end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Screen.Cursor:=1; Image1.Canvas.MoveTo(X,Y); if Button = mbLeft then downkey:=true; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin downkey:=false; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Screen.Cursor:=1; if downkey then Image1.Canvas.LineTo(X,Y); end; procedure TForm1.Button1Click(Sender: TObject); begin Image1.Canvas.FillRect(Rect(0,0,Ima ge1.Width,Image1.Height)); end; procedure TForm1.FormShow(Sender: TObject); begin Button1Click(Sender); end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Screen.Cursor:=0; end; end. но прогамма работает некорректно, в чем ошибка?
Программирование - это великое искусство... Такое же как например и живопись!
|
01.05.2008, 14:44 | #2 |
Форумчанин
Регистрация: 29.03.2008
Сообщений: 300
|
Лично я делал так:
Код:
Карп преодолевший водопад становится драконом.
|
01.05.2008, 14:48 | #3 |
Форумчанин
Регистрация: 30.03.2008
Сообщений: 392
|
У меня вопрос то другой: нужно чтобы при отведении курсора от ТИмаге он становился обычным! А когда подводишь на ТИмаге - он карандашик!
Программирование - это великое искусство... Такое же как например и живопись!
|
02.05.2008, 16:15 | #4 |
Форумчанин
Регистрация: 30.03.2008
Сообщений: 392
|
Так кто-нибудь мне подскажет?
Программирование - это великое искусство... Такое же как например и живопись!
|
02.05.2008, 16:28 | #5 |
Участник клуба Подтвердите свой е-майл
Регистрация: 14.12.2007
Сообщений: 1,434
|
есть такое свойство MouseMove
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (x>Image1.width) or (y>Image1.height) or (x<Image1.left) or (y<Image1.Top) then begin сделать маус обычным end; end;
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
|
02.05.2008, 17:57 | #6 |
Участник клуба
Регистрация: 02.09.2007
Сообщений: 1,193
|
Не получится.
OnMouseMove выполняется, когда мышь на компоненте, когда мышь уйдет событие не выполняется. Придется ставить hook на WM_MOUSEMOVE, ну или анализировать в Таймере. В предыдущем вопросе об изменении курсора на карандаш, восстановление стандартного вида происходит в OnMouseMove соседнего компонента. http://www.programmersforum.ru/showthread.php?t=16332 |
02.05.2008, 18:05 | #7 |
Участник клуба
Регистрация: 26.10.2007
Сообщений: 1,244
|
Сверх бредовая идея посетила меня
В событии MouseMove пишем: x := x + 1; If x := 100 Then x := 0; Кидаем на Форму Таймер. Ево задача за два такта запоминать значение x. Затем надо их сравнить. Ели они равны, значит событие MouseMove невыполняется. Меняем курсор. Если значения различны, значит событие MouseMove выполняется Гениально !
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым, Попытка глубже понимать уже попахивает литром... |
02.05.2008, 19:43 | #8 |
Пользователь
Регистрация: 28.03.2007
Сообщений: 67
|
а ты не побывал менять свойство Cursor у имейджа, мож поможет
Проблема не в том могут ли машины думать, а в том - делают ли это люди?
B. F. Skinner |
02.05.2008, 20:23 | #9 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Самый оптимальный вариант, только карандашика среди стандартных курсоров нет, придется свой подгрузить.
Насчет мышиных событий, в новых версиях Дельфи появились события MouseEnter и MouseLeave. В версиях где их нет, их аналог легко можно написать самому используя события MouseMove тех компонентов по к-рым ходит мышь, и таймер там не нужен. Ключевая фраза уже тут прозвучала даже Цитата:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 02.05.2008 в 20:35. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
TImage | Killbrum | Помощь студентам | 8 | 27.08.2008 22:40 |
Timage | RealSHELS | Общие вопросы Delphi | 7 | 05.05.2008 20:12 |
Timage | RealSHELS | Общие вопросы Delphi | 2 | 03.05.2008 23:23 |
Рисование... | HunterMan | Win Api | 10 | 30.04.2008 23:46 |
TImage | Andrey9392 | Компоненты Delphi | 6 | 06.04.2007 10:43 |