Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка события OnKeyDown [D6, Win95/98]


reticon ©   (2002-12-18 20:32:00) 

Уважаемые мастера! Прошу Вашей помоши.
На форме имеется 10 компонентов Shape.
В обработчике события формы OnKeyDown необходимо после каждого нажатия ENTER поочередно с 1 по 10 менять цвет у этих Shape (например с зеленогона желтый), причем после того, как будет изменен цвет последней фигуры, необходимо менять цвет на исходный (с желтого на зеленый) в обратном порядке (с 10 по 1). Помогите пожалуйста осуществить такую штуку!!!! Заранее спасибо.


zavdim   (2002-12-19 09:48:00) [1]

Я так понял что твои Шейпы должны на форме лежать, а они у тебя в методе(потом еще и не инициализированы и т.д.).
Если ты эти Шейпы уже сделал (лежат на форме),
То в приватах у формы объявлешь тот самый массив.
И присваиваешь каждому элементу уже существующий Шейп, а потом живи и радуйся.
Только не объявляй этого в методе. И d,n - тоже не локальные переменные метода - убери их описание оттуда. А то комп и не то скажет. А уж тут так обхохочутся.


reticon   (2002-12-19 09:38:00) [2]

получилось следующее, но выдает ошибку "Access violation at adress ..." :

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Shape: array[1..10] of TShape;
n,d: integer;
begin
if key = vk_return then
begin
if n > 10 then
begin
d := -1;
n := 10;
end;

if n < 1 then
begin
d := 1;
n := 1;
end;

if d = 1 then
Shape[n].Brush.Color:=clGreen
else
Shape[n].Brush.Color:=clYellow;

n := n + d
end;
end;

а можно эту процедуру поподробнее, а то я что-то совсем не могу создать эти Shape


TTCustomDelphiMaster   (2002-12-18 21:17:00) [3]

При нажатии на Enter выполняешь следующее:

if n > 10 then
begin
d := -1;
n := 10;
end;

if n < 1 then
begin
d := 1;
n := 1;
end;

if d = 1 then
ArayShape[n].Color := Зеленый
else
ArayShape[n].Color := Желтый;

n := n + d


Наверх

Титульная страница Поиск, карта сайта Написать письмо