Модераторы: 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   Вверх
Yanis
Дата 14.7.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(alexeis1 @  14.7.2006,  13:54 Найти цитируемый пост)
это называется строгая проверка типов, формально Longint и Cardinal разные типы, реально на 100% тоже самое!

Конечно, если не считать, что один тип знаковый, а другой беззнаковый, то всё верно - они одинаковые. Стало быть и многие другие типы - одинаковые smile

Добавлено @ 13:31 
 smile
Извиняюсь за небольшой оффтопик. 

Это сообщение отредактировал(а) Yanis - 14.7.2006, 13:31


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


Бывалый
*


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

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



нет меня интересует непонятная ошибка, когда я прописал процедуру до имплементэйшн там ступорится прога 
PM MAIL   Вверх
svarogik
Дата 14.7.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



короче так сделал и все, программа запускается, только что делает не понятно
Код

procedure TEditor.DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 Col, Row : longint;
begin
 drawgrid1.MouseToCell(X, Y, Col, Row);

end;

end.
 
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Извините тут уже я заглючил smile 
Код

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


а вот это 
Цитата(alexeis1 @  14.7.2006,  12:40 Найти цитируемый пост)
procedure MouseToCell(X, Y: Integer; var ACol, ARow: Longint);

я просто показал какие параметры она принимает - этого не нужно было никуда писать

Добавлено @ 14:12 
Цитата(svarogik @  14.7.2006,  14:04 Найти цитируемый пост)
только что делает не понятно

Ниченого не делает просто мы получили номер ячейки по которой кликнули.
Цитата(Yanis @  14.7.2006,  13:28 Найти цитируемый пост)
Конечно, если не считать, что один тип знаковый, 

да согласен не совсем верно (хотя и размер одинаковый) 


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

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

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


Бывалый
*


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

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



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


Амеба
Group Icon


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

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



Это совсем просто

Код

procedure TForm1.drwgrd1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Col, Row : Longint;
  r : Trect;
begin
 drwgrd1.MouseToCell(X, Y, Col, Row);
 r := drwgrd1.CellRect(Col, Row);
 drwgrd1.Canvas.brush.color := clGreen;
 drwgrd1.Canvas.FillRect(r);
end;


Добавлено @ 14:43 
Вообще так делать не правельно!
нужно сохранять где-то цвета, а затем
в procedure TForm1.drwgrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
отрисовывать каждую своим цветом!

Добавлено @ 14:45 
Например, сделать динамический массив соответствующей размерности  

Это сообщение отредактировал(а) alexeis1 - 14.7.2006, 14:58


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

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

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


Бывалый
*


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

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



цвета будут сохранятся в матрице а по ней придумаю как прорисовать  (оох как все сложно в паскале графика какой элементарной былаа...) 
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(svarogik @  14.7.2006,  14:49 Найти цитируемый пост)
о ней придумаю как прорисовать

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


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

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

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


Бывалый
*


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

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



тэкс... поподробней можешь? 
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



При кликаньи рисуется рамочка, значит изображение клетки "попортилось", любая порча изображения вызовет событие, в данном случае это будет onDrawCell, в нем предлагают програмисту написать код который дорисовыват что-то в клетке(по усмотрению програмиста)
если мы знаем какого цвета была ячейка, то рисуем ее
Код

procedure TForm1.drwgrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
    r : Trect;
begin
 r := drwgrd1.CellRect(aCol, aRow);
 drwgrd1.Canvas.brush.color := yourColorMatrix[aCol, aRow];
 drwgrd1.Canvas.FillRect(r);
end;
 


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

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

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


Бывалый
*


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

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



Код

procedure TEditor.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var r : Trect;
  begin
for i:= 1 to n do
for j := 1 to m do
case matrix[i,j]of
1: begin
r := DrawGrid1.CellRect(i, j);
 DrawGrid1.Canvas.brush.color := clGreen;
 DrawGrid1.Canvas.FillRect(r);
 end;

 end;


end;





procedure TEditor.DrawGrid1Click(Sender: TObject);
begin
setLength(matrix,4,4);
DrawGrid1.colcount:=4;
DrawGrid1.rowcount:=4;

  matrix[1,2]:= 1;

end;


пытаюсь прорисовку так сделать, но почему то не работает

Добавлено @ 15:31 
по идее должен появится в ячейке 1.2 клеточка с постоянным зеленым цветом не реагирующим на щелчки 
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



А зачем цикл событие возниает для каждой ячейки отдельно!
Если надо обнавить все то просто вызвать
 DrawGrid1.Invalidate;
тогда события по перерисовке возникнут для всех ячеек по очереди без всяких циклов! 


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

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

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


Бывалый
*


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

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



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


Амеба
Group Icon


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

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



а это к чему?
Код

setLength(matrix,4,4);
DrawGrid1.colcount:=4;
DrawGrid1.rowcount:=4;

  matrix[1,2]:= 1;


я пологаю надо было
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  setLength(matrix,4,4);
  DrawGrid1.colcount:=4;
  DrawGrid1.rowcount:=4;
  matrix[1,2]:= clGreen;
end;


и дальше просто

Код

procedure TEditor.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var r : Trect;
begin
  r := DrawGrid1.CellRect(ACol, ARow);
  DrawGrid1.Canvas.brush.color := matrix[ARow, ARow];
  DrawGrid1.Canvas.FillRect(r);
end;
 


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

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

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


Бывалый
*


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

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



Цитата

я пологаю надо было

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


Амеба
Group Icon


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

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



Цитата(svarogik @  14.7.2006,  15:48 Найти цитируемый пост)
матрица грузится из файла а по ней рисуется 

так это без разницы, заранее загрузить и все! 


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

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

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


Бывалый
*


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

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



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

    DrawGrid1.Canvas.brush.color := matrix[ACol, ARow];
  
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Покажи инициализацию
matrix 


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

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

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


Бывалый
*


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

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



непонимаю 
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



matrix - это динамический массив или статический?
Если динамический, то покажи, как устанавливается его размер
Если статический, то как обявлен в разделе var

Добавлено @ 16:25 
такое ощущение, что его размер меньше размера Грида... 


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

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

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


Бывалый
*


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

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



matrix: array of array of integer;

setLength(matrix,4,4);


Код

procedure TEditor.FormCreate(Sender: TObject);
begin
netprs:= true;

 setLength(matrix,4,4);
DrawGrid1.colcount:=4;
DrawGrid1.rowcount:=4;

  matrix[1,2]:= clGreen;

end;
 
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Поставь брекпоинт перед этой строчкой и посмотри содержимое
matrix в окне watch (как в паскале по ctrl+F5) создан ли массив? 


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

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

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


Бывалый
*


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

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



создан только у него все по нулям а одно значение какое то 32000 

Присоединённый файл ( Кол-во скачиваний: 28 )
Присоединённый файл  Editor.part1.rar 107,42 Kb
PM MAIL   Вверх
svarogik
Дата 14.7.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



вот второй том

Добавлено @ 16:55 
там две процедуры с одинаковыми названиями одна закоментирована, если закоментировать другую а её разкоментировать то программа начнет работать, ну только без прорисовки клеток

Добавлено @ 16:57 
 процедура TEditor.DrawGrid1DrawCell, остальноез акоментированное лучше не трогать 

Присоединённый файл ( Кол-во скачиваний: 28 )
Присоединённый файл  Editor.part2.rar 89,40 Kb
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Странно экзешник у меня запустился нормально!, а вот кода ни одного модуля я не обнаружил smile  


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

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

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


Бывалый
*


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

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



тут вот еще что надо 

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  nado.rar 4,43 Kb
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Да работает он нормально(я подрезал его чуть-чуть smile )
Лови 
Код

unit MapEditor;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ExtCtrls, ActnList, ImgList, ComCtrls, Buttons,
  Grids;

type
  TEditor = class(TForm)
    ImageList1: TImageList;
    GroupBox1: TGroupBox;
    Net: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    DrawGrid1: TDrawGrid;
    procedure FormCreate(Sender: TObject);
    procedure DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Editor: TEditor;
  curs:integer;
  f_name,str:string;
  fn:TFilestream;
  netprs: boolean;
  Col, Row : longint;
  matrix: array of  array of integer;
  i,j,n,m:integer;

implementation

{$R *.dfm}

procedure TEditor.FormCreate(Sender: TObject);
begin
  netprs:= true;
  setLength(matrix,4,4);
  DrawGrid1.colcount:=4;
  DrawGrid1.rowcount:=4;
  matrix[1,2]:= clGreen;
end;

procedure TEditor.DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
   var r : Trect;
begin
  {drawgrid1.MouseToCell(X, Y, Col, Row);
  r := DrawGrid1.CellRect(Col, Row);
  DrawGrid1.Canvas.brush.color := clGreen;
  DrawGrid1.Canvas.FillRect(r);
  setLength(matrix,4,4);
  DrawGrid1.colcount:=4;
  DrawGrid1.rowcount:=4;
  matrix[1,2]:= clGreen;  }
end;
  {
procedure TEditor.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var r : Trect;
begin
 for i:= 1 to n do
 for j := 1 to m do
 case matrix[i,j]of
 1: begin
 r := DrawGrid1.CellRect(i, j);
 DrawGrid1.Canvas.brush.color := clGreen;
 DrawGrid1.Canvas.FillRect(r);
  end;
 end;
end;
    }
procedure TEditor.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var r : Trect;
begin
  r := DrawGrid1.CellRect(ACol, ARow);
  DrawGrid1.Canvas.brush.color := matrix[ACol, ARow];
  DrawGrid1.Canvas.FillRect(r);
end;

end.
 


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

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

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


Бывалый
*


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

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



Народ извините я тут все напутал, у меня по разным папкам раскидано было, вот все собрал еще, надеюсь теперь запустится, никак не привыкну к делфи, все таки переход от паскаля сложный, сслыки на них сами поменяйте а то я неумею пока, больше у меня вроде ничего нет 

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  vot.rar 15,70 Kb
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(svarogik @  14.7.2006,  17:26 Найти цитируемый пост)
собрал еще, надеюсь теперь запустится

После урезки всего лишнего твой код и так запустился smile  


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

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

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


Бывалый
*


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

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



ну так не полноценно же smile

Добавлено @ 18:10 
а что ты изменил то? невероятно, запустилось и работает! как??? только вместо красивых белых ячеек все остальные стали черные

Добавлено @ 18:13 
а как сохранить все в отдельной папке с перенесением всех ссылок и библиотек в новую папку, а то неприкольно шастать по куче папок собирая части кода

Добавлено @ 18:16 
И почему когда я щелкаю по рабочему полю правой кнопкой, оно окрашивается в зеленый сразу, и сохраняет окраску, а левой только двойной щелчек окрашивает, да и то до следующего клика?

Добавлено @ 18:17 
Ладно, короче, большое спасибо тебе alexeis1


M
Girder
Прошу не забывать!: "Одна тема-один вопрос"
  
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



svarogik
Цитата(svarogik @  14.7.2006,  18:07 Найти цитируемый пост)
а левой только двойной щелчек окрашивает, да и то до следующего клика?

потому что осталсось окрашивание в OnButtinDown, а я его удалил в последнем фрагменте
Я удалил почти все что мне было непонятно и ссылки да другие модули, который отсутствовали на тот момент.

Цитата(svarogik @  14.7.2006,  18:07 Найти цитируемый пост)
невероятно, запустилось и работает!

да работает нормально без проблем, а процедуру клика в этом случае надо переделать

Добавлено @ 20:11 
Цитата(svarogik @  14.7.2006,  18:07 Найти цитируемый пост)
а как сохранить все в отдельной папке с перенесением всех ссылок и библиотек в новую папку

надо в файле проекта короткие пути (типа in ../folder/myunit.pas) заменить на имена файлов
(myunit.pas) 

Процедуру клика надо сделать примерно такой
Код

procedure TEditor.DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  drawgrid1.MouseToCell(X, Y, Col, Row);
  matrix[Col, Row] := clGreen;
end;

по идее после клика должна произойти перерисовка, которая сама и нарисует эту ячейку нужным цветом (ведь мы занесли правельный цвет в массив)  

Это сообщение отредактировал(а) alexeis1 - 14.7.2006, 20:11


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

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

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


Бывалый
*


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

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



 а картинки получается никак вставить нельзя?  
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



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

Почему это нельзя
Код

 procedure TCanvas.Draw(X, Y: Integer; Graphic: TGraphic);

это метод который отрисует изображение, например bitmap, загруженный, в TBitmap или jpeg, или Метафайл, а если будут дополнительные компоненты, то любой другой smile .
x, y - левый верхний угол изображения

Добавлено @ 22:09 
вызвать его можно вместо canvas.fillrect, в обработчике события onDrawCell 


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

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

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


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


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

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



Извините, конечно, за offtop, но по-моему, даже если alexeis1 тебе поможет, тебе всё равно необходимо выучить азы Delphi. Так как всегда помогать тебе никто не сможет... И ещё:
Тебе в Центр Помощи!
Один топик - один вопрос! 


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


Бывалый
*


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

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



Товарищ гуедда представляете но это уже не азы, я неплохо знаю паскаль, и кое что из делфи, так называемые азы, иначе я бы спрашивал что есть делфи, а этот форум для того и создан чтоб вопросы задавать! так на любую тему можно сказать "иди учи делфи", мой топик же целиком посвящен обьекту Tdrawgrid и его методам если бы мне не хотели помоч то мне бы и не ответили, топик бы уже давно затерялся на 2-ой странице 
PM MAIL   Вверх
Alexeis
Дата 14.7.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Я думаю следует провети небольшие изменения
Цитата(Guedda @  14.7.2006,  22:16 Найти цитируемый пост)
Один топик - один вопрос! 

Тема вышла из границ одной цельной темы и имеет смысл разбить на две части 
1) По DrawGrid и работе с ним (оставить здесь)
2) По графике в Делфи и работе с TCanvas и картинками - в разделе про графику!
Все таки это форум, а не чат, а сообщения затем используются другими пользователями для решения подобных вопросов.
Если договорились - то вторую тему в раздел графика


 


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

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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