Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мышь 
V
    Опции темы
svarogik
Дата 13.7.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Представьте себе матрицу, 20Х20, теперь представьте числа внутри матрицы, от 1 до 16,  я хочу чтоб у меня по матрице строилось изображение(ну это просто canvas и прочие методы) но теперь я хочу щелкнуть мышью на одну из этих прорисованных штучек и чтоб у меня в какую то переменную записалось число матрицы соответствующего этой клеточке, как это лучше реализовать, пока словами расскажите, может пойму. Да и еще если на соответствующей области изображение прорисованное не умещается я бы хотел чтоб была возможность прокрутки , но прокручивая я также мог достать значения матрицы которые соответствуют клеточкам. У меня пока в мыслях только как сделать прорисову без прокрутки, а как перехват мышью и прокрутку совершенно не представляю


M
Girder
Название темы должно отражать ее суть!
 
PM MAIL   Вверх
Guedda
Дата 13.7.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Название темы должно отражать её суть!
Вот что сказано в SDK:
Цитата

The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse. 

WM_MOUSEMOVE  
fwKeys = wParam;        // key flags 
xPos = LOWORD(lParam);  // horizontal position of cursor 
yPos = HIWORD(lParam);  // vertical position of cursor 
 

Parameters

fwKeys

Value of wParam. Indicates whether various virtual keys are down. This parameter can be any combination of the following values: 

Value    Description
MK_CONTROL    Set if the CTRL key is down.
MK_LBUTTON    Set if the left mouse button is down.
MK_MBUTTON    Set if the middle mouse button is down.
MK_RBUTTON    Set if the right mouse button is down.
MK_SHIFT    Set if the SHIFT key is down.
 

xPos

Value of the low-order word of lParam. Specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area. 

yPos

Value of the high-order word of lParam. Specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area. 

 

Remarks

The MAKEPOINTS macro can be used to convert the lParam parameter to a POINTS structure. 


Добавлено @ 22:07 
И вообще, юзай WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_RBUTTONDOWN.
Вопрос неоднократно обсуждался. Воспользуйся поиском по этим сообщениям. 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
svarogik
Дата 13.7.2006, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Скажешь мое название не отражает??? я спрашиваю как захватывать обьекты, точнее принцип захвата, и как он работает, СЛОВАМИ!! код мне пока не нужен, я хочу в этом разобраться, потом кодить

Добавлено @ 22:11 
бать может координаты мышки проверяются на форме, типатого , иф координата у = координата у обьекта энд координата х = координата х обьекта, зен реад своиство обекта и присвоить переменнаь обьект.его клетка 
PM MAIL   Вверх
Alexeis
Дата 13.7.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Попробуйте компонент  TDrawGrid
у него и прокрутка есть и события
onDrawCell
onMouseDown

также удобный метод
DrawGrid1.MouseToCell(); - по координатам определить номер ячейки
также
DrawGrid1.CellRect(); координаты и размеры указанной ячейки

 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
svarogik
Дата 14.7.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



А картинки можно поставить в ячейки? и еще можно убрать серые поля?, и если можно в двух словах об основных методах расскажите

Добавлено @ 08:28 
и вообще о всем обьекте, Как у каждой ячейки проверять? там ведь только весь обьект целиком! если картинки в ячейки вставлять нельзя, то мне не подойдет 
PM MAIL   Вверх
svarogik
Дата 14.7.2006, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



А вообще как в ДЕлфи прога выполняется? в паскале все понятно там код, ну из юнитов чето иногда грузится, а в делфи я поля основной программы незаметил, там сразу юниты, если я к примеру хочу чтоб в процедуре проверялась какая то переменная глобальная, и по этой переменной в процедуре делалось то или иное действие, я пробую над процедурой(относящейся к кнопке событие онклик, главная форма) присвоить переменной тру или фолз, но ошибка, так как это юнит я это собственно и сам понимаю, но не знаю как переменной присвоить значение, есть мысль что по событию формы Oncreate надо этой переменной присвоить значение, так чтоли?

Добавлено @ 09:08 
но все же непонятно где код программы который не в юнитах

Добавлено @ 09:20 
относится ко всей теме. Если можете помоч то учтите.
Я пытаюсь сделать аналог графического редактора, с крупными "пикселями", где каждым "цветом" выступает определенная картинка (подгружаемая из файла *.bmp). То что нарисовали должно быть сохранено в файле. Была бы матрица по которой строится изображение, точнее матрицу то я сделать могу , но потом чтоб её вывести это проблема , и предположим выбрал я элемент домик, а на построенном по матрице изображении в ячейке 4по горизонт,5по верт травка, щелкнул бы по этому элементу, предварительно выбрав элемент карандаш(или кисть) и вместо травки бы получился домик, и в матрице значение элемента( 4по горизонт,5по верт )  бы поменялось с 1 на 2, и на изображении графически я бывсе это увидел. 
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(svarogik @  14.7.2006,  09:07 Найти цитируемый пост)
но все же непонятно где код программы который не в юнитах 

в Project1.exe
svarogik  - ОДИН ВОПРОС ОДНА ТЕМА !!!

Цитата
 и еще можно убрать серые поля?

fixedcols -> 0
fixedrows -> 0

Цитата
Как у каждой ячейки проверять?

что проверять?

Цитата
если картинки в ячейки вставлять нельзя, то мне не подойдет

Там же вам передаются все параметры каждой ячейки - прямоугольник т.е. rect рисуйте в указаной области на canvase drawgrida любой рисунок. У drawgrida - есть куча событий на перерисовку - в них и отрисовывайте все ваши картинки.

Почитайте справку!
OnColumnMoved
OnDrawCell
OnRowMoved
OnSelectCell
OnMouseDown
OnMouseUp
OnClick
                

             


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Yanis
Дата 14.7.2006, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(svarogik @  14.7.2006,  10:07 Найти цитируемый пост)
Я пытаюсь сделать аналог графического редактора, с крупными "пикселями", где каждым "цветом" выступает определенная картинка (подгружаемая из файла *.bmp). 

Зачем стразу картинку то грузить? Почему бы просто не закрашивать ячейку? 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
svarogik
Дата 14.7.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Тогда я делаю не графический редактор, а редактор карт для игры, теперь понятно зачем? а где события смотреть для каждой ячейки?

Добавлено @ 12:11 
и можно сделать типа цикла, 

Код

фор и := 1 то н ду
фор йот := 1 то н до
бегин
кейз матрица[и,йот] оф
1: в ячейку и, йот прорисовать картинку такуюто
...
...
енд;
енд;

код плохо представляю пока только принцип 
PM MAIL   Вверх
Yanis
Дата 14.7.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(svarogik @  14.7.2006,  13:05 Найти цитируемый пост)
теперь понятно зачем?

Нет. 
Любой цвет можно нарисовать самому!

Цитата(svarogik @  14.7.2006,  13:05 Найти цитируемый пост)
а где события смотреть для каждой ячейки?

У ячеек нет событий. События есть у StringGrid
Цитата(alexeis1 @  14.7.2006,  10:28 Найти цитируемый пост)
Почитайте справку!
OnColumnMoved
OnDrawCell
OnRowMoved
OnSelectCell
OnMouseDown
OnMouseUp
OnClick

 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
svarogik
Дата 14.7.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



у DrawGrid1.MouseToCell(); первыми формальными параметрами что делать?

Добавлено @ 12:21 
если нет событий как по щелчку изменить цвет отдельной ячейки? 
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Как же нет MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

Код

procedure MouseToCell(X, Y: Integer; var ACol, ARow: Longint);

просто в  MouseDown пишем
Код

procedure TForm1.drwgrd1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 Col, Row : cardinal;
begin
 MouseToCell(X, Y, Col, Row);
end;


после вызова в Col, Row - будут нужные значения строки и столбца -куда нажали 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
svarogik
Дата 14.7.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



вот что получилось остановился курсор после mousetocell(x,y,col,     и вот что говорит
[Hint] MapEditor.pas(110): Variable 'buff' is declared but never used in 'TEditor.N4Click'
[Hint] MapEditor.pas(155): Variable 'buff' is declared but never used in 'TEditor.N3Click'
ну на это можно забить,
[Error] MapEditor.pas(205): Types of actual and formal var parameters must be identical
[Error] MapEditor.pas(41): Unsatisfied forward or external declaration: 'TEditor.DrawGrid1Click'
[Error] MapEditor.pas(42): Unsatisfied forward or external declaration: 'TEditor.MouseToCell'
[Fatal Error] Map_Editor.dpr(7): Could not compile used unit '..\MapEditor.pas'

Добавлено @ 12:52 
я понимаю что типы должны быть разные, почему ты сделал разными?

Добавлено @ 12:53 
тоесть одинаковые, зачем сделал разные? 
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



svarogik, А это компилятор капризничает
ладно тогда так
Код

procedure TForm1.drwgrd1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 Col, Row : Longint;
begin
 MouseToCell(X, Y, Col, Row);
end;

это называется строгая проверка типов, формально Longint и Cardinal разные типы, реально на 100% тоже самое!

Добавлено @ 12:56 
что касается
Цитата

Unsatisfied forward or external declaration: 'TEditor.DrawGrid1Click

так не надо ж было с заголовком копировать!
у меня он просто называется drwgrd1 вместо обычного DrawGrid1! 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
svarogik
Дата 14.7.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



а это что за лажа [Error] MapEditor.pas(194): Undeclared identifier: 'MouseToCell' 


Код

 procedure TForm1.drwgrd1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 Col, Row : Longint;
begin
 MouseToCell{здесь застыл}(X, Y, Col, Row);
end;



Добавлено @ 13:05 
Цитата

так не надо ж было с заголовком копировать!
у меня он просто называется drwgrd1 вместо обычного DrawGrid1

спокойно, с этим я разобрался сам

Добавлено @ 13:12 
а если я добавлю 
Код

 procedure MouseToCell(X, Y: Integer; var ACol, ARow: Longint);
 то он останавливается напротив строки в добавлениях процедур

Добавлено @ 13:14 
и говорит вот че [Error] MapEditor.pas(42): Unsatisfied forward or external declaration: 'TEditor.MouseToCell'
[Fatal Error] Map_Editor.dpr(7): Could not compile used unit '..\MapEditor.pas' 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1250 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.