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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2008, 13:53   #1
Albert2008
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 26
Восклицание Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6)

Написал программу.
Есть проблема.

Суть программы заключается в следующем.
1. Создаётся двумерный массив (Затем ему будут заданы границы). Обнуляется. Вся программа работает с типом данных Integer;
2. Нажимается кнопка button.
3. Если условия выполняются , то этим координатам массива присваивается значение отличное от нуля.
Условия имеют вид:
(
Код:
if (check = 1) and (DynArray[ranC,ranD] = 0)  and ( dynarray[q1,RanD]=0 )   then
begin
DynArray[ranC,ranD] := 1 ;
Levo(RanC,RanD,g1,v1);     // Это функция типа integer
Dynarray[g1,v1] := 1 ;    
end
else
begin
..)
4. Если условия не выполняются - выполняется другое действие.
5. Происходит прорисовка массива в Stringgrid. Тех его ячеек, которые отличны от нуля. (if Dynarray[c,d] > 0 then )


В принципе всё компилится и работает почти как надо.

Проблемма:
1) Бывает так, что при очередном нажатии ничего не рисуется, но вроде что-то чрезвычайно быстро мигает. Либо это он выполняет условие не рисования - либо полностью прорисовывает фигуру из ячеек - не понятно.
2.(главная). Примерно на 43-м (45) нажатии на кнопку вновь прорисовывается та ячейка, которая уже заранее была прорисована. Происходит наложение фигур, если это можно так объяснить.
3) При любых значениях всегда выполняется "другое действие" (вывод надписи в edit) которое должно выполнятся лишь тогда, когда условия не верны.

Прошу объяснить с чем это может быть связанно.
(Быть может функции глючат?)

Последний раз редактировалось Stilet; 21.08.2008 в 14:31.
Albert2008 вне форума Ответить с цитированием
Старый 21.08.2008, 14:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Происходит прорисовка массива в Stringgrid. Тех его ячеек, которые отличны от нуля
Как? Самое главное и не указал то...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2008, 14:52   #3
Albert2008
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 26
Радость

Прорисовка ячеек имеет вид.

Код:
if Dynarray[c,d] > 0 then  //(Если ячейка имеет значение, то...)

if (ACol = c) and (ARow = d) then  

begin


 StringGrid1.Canvas.Brush.Color := clRed;   //красный цвет
 StringGrid1.Canvas.FillRect (Rect);   // я так и не понял, что это такое.
 StringGrid1.Canvas.TextRect (Rect, Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol,ARow]);   //тоже не понял.
end; {if}
Недостатком этого примера является то, что невозможно сделать так, чтобы при различных условиях он прорисовывал разными цветами - он всё одним прорисовывает. Но это второстепенный вопрос. Самое главное, чтобы наложений не было.

From Stilet: Для кода пользуйся тегом (#) а точнее

Последний раз редактировалось Stilet; 21.08.2008 в 15:05.
Albert2008 вне форума Ответить с цитированием
Старый 21.08.2008, 15:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

тааак. допустим...
Тогда выражение:
Цитата:
Примерно на 43-м (45) нажатии на кнопку вновь прорисовывается та ячейка, которая уже заранее была прорисована. Происходит наложение фигур, если это можно так объяснить
Либо неверно высказано либо говорит о том что выполняется условие
if Dynarray[c,d] > 0 then

Значит неверно заполняется Dynarray[c,d].
С другой стороны это не должно быть заметным поэтому про фигуры что-то малопонятно...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2008, 15:33   #5
Albert2008
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 26
По умолчанию

1. Цыфры 43 и 45 говорят только о том, что это происходит на 45-м клике. К условиям это никак не относится.

2. Фигура состоит из 2-х рядом стоящих ячеек и рассчитывается функцией
function Levo(var RanC,RanD,g1,v1 : integer) : integer;
begin
g1:= RanC - 1;
v1:= RanD ;
end;

(Для других фигур- другие функции).
Присваивания вроде dynarray[ranC,ranD]:=1 прописаны в Struingrid в улсовяих (см. верхний топик).


3.Массив dynarray[c,d] он же dynarray[ranC,ranD] он же dynarray[v1,g1] заполняется верно. На 35- клике ставится фигурка. Дополнительной подпрограммой я проверяю координаты - они заполняются верно. И перед самым 41-м кликом тоже проверяю - тоже всё верно.

4. Есть ещё аномалия. На 20-м клике на чистой области (ведь координаты RanD RanC я могу видеть) - программа..... не выполняет
Код:
if (check = 1) and (DynArray[ranC,ranD] = 0)  and ( dynarray[q1,RanD]=0 )   then
begin
DynArray[ranC,ranD] := 1 ; 
Levo(RanC,RanD,g1,v1);     
Dynarray[g1,v1] := 1 ;   

end
else
А просто пишет координаты и что им ничего не присвоено.
Значение координат второй ячейки указывается от предыдущей фигуры

Последний раз редактировалось Albert2008; 21.08.2008 в 16:03.
Albert2008 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
Даже не знаю в какую тему писать ryton Фриланс 12 06.06.2008 13:30
Вопрос по БД honor БД в Delphi 8 01.02.2008 15:08
Вопрос по функции "если" с цветом.. Dr.Eric Microsoft Office Excel 2 17.04.2007 19:44
Вопрос про правильное написание функции AndreichSB Microsoft Office Excel 6 25.12.2006 19:27