Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

DrawCell в StringGrid. Хм...   Найти похожие ветки 

 
Cosinus ©   (2004-10-07 14:45) [0]

Монитор порта... Окно in/out байтов реализовано на основе StringGrid... In байты отображаются одним цветом, Out, соответственно другим... В упор не пойму, как сделать вышеприведенное не используя глобальные переменные(кол-во Cells до и после). То есть необходим DrawCell с теми же параметрами, что и обычный + Color:TColor. Подскажите, как это можно сделать.


 
КаПиБаРа ©   (2004-10-07 14:53) [1]

Cosinus ©   (07.10.04 14:45)
Что "как сделать"? Приложение без глобальных переменных или DrawCell с теми же параметрами?

=======================================
Пишите коротко и неясно.
(Наполеон I - составителям Конституции)
=======================================


 
Суслик ©   (2004-10-07 14:54) [2]


>  Cosinus ©   (07.10.04 14:45)

Ты бы написал все по пунктам:
1. Нужно то-то и то-то
2. сделал то-то и то-то
3. не пойму то-то и то-то.

------------
Лично я вопроса не понял.


 
Леприкон ©   (2004-10-07 14:56) [3]

Сколько столбцов в гриде? Кол-во строк постоянно меняется?


 
Cosinus ©   (2004-10-07 15:15) [4]


> КаПиБаРа ©   (07.10.04 14:53) [1]


> Суслик ©   (07.10.04 14:54) [2]

1)Необходимо, чтобы "In байты отображаются одним цветом, Out, соответственно другим... "
2)При каждом Read/Write с порта вызывается процедура, которая раскидывает байты по StringGrid (в каждой ячейке один байт). Могу сделать, чтобы строки или колонки, подчиняясь каким-либо условиям выводились одним, либо другим цветом
3)Исходя из 2, не вижу решения, как правильно поставить условие в DrawCell, чтобы при ее вызове проверялось, IN ли эти байты или OUT...


 
Cosinus ©   (2004-10-07 15:16) [5]


> Леприкон ©   (07.10.04 14:56) [3]

Сесенно :)))


 
Суслик ©   (2004-10-07 15:20) [6]


> [4] Cosinus ©   (07.10.04 15:15)

Решение стандартное - иметь еще двумерный массив boolean. Размер его равен размеру грида.

При чтении из порта:
1. кадать в грид
2. кидать в массив

При перерисовке см. что в соответстующем эл-те массива - true, значит in, false, занчит out


 
Cosinus ©   (2004-10-07 15:45) [7]


> Суслик ©   (07.10.04 15:20) [6]

Логично. Спасибо.
ЗЫ Этот массив - это та же глоб. переменная(чего я использовать и не хотел), но просто довольно элегантно, поэтому еще раз спасибо.


 
Суслик ©   (2004-10-07 15:51) [8]


>  [7] Cosinus ©   (07.10.04 15:45)

Что ты называешь глобальной переменной? Есть ощущение, что термин плохой.

Этот массив может лежать в private полях формы, которая выводит грид. Это же не глобальная переменная...


 
Cosinus ©   (2004-10-07 16:04) [9]


> Суслик ©   (07.10.04 15:51) [8]

Ну да, наверно неправильно выразился, ну я так понял, что ты понял, что я имел ввиду :))
Кстати возник еще один вопрос по теме. Сколько байт занимает boolean переменая, и отсюда, сколько байт будет занимать массив порядка 20х1000000(миллион, чтобы нолики не считать:)???


 
Суслик ©   (2004-10-07 16:06) [10]


>  20х1000000

ТЫ в своем уме :))))

У какой грид тебе пропашет матрицу 20 х млн ? Это очень много.
Меняй условия задачи.

ЗЫ
1) 1 байт.
2) примерно 20мб будет занимат.


 
Cosinus ©   (2004-10-07 16:16) [11]


> Cosinus ©   (07.10.04 16:04) [9]

А разве вот это
property Cols[Index: Integer]: TStrings read GetCols write SetCols;
property Rows[Index: Integer]: TStrings read GetRows write SetRows;

и вот это ;)
Integer –2147483648..2147483647 signed 32-bit
не означает, что кол-во Cells у Grid может быть в пределах Integer? Или я совсем чего то не понимаю?


 
Суслик ©   (2004-10-07 16:19) [12]


>  [11] Cosinus ©   (07.10.04 16:16)

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

Ты подумай, что такая конструкция у тебя будет занимать в памяти несколько десятков мб.

Может это и не ничего, но как минимум работать будет тормозно.

Проверь.


 
Skeptik   (2004-10-07 16:19) [13]

> При каждом Read/Write с порта вызывается процедура, которая
раскидывает байты по StringGrid

пусть эта процедура прописывает в соответствующий object StringGrid"а признак направления, например:

StringGrid.Cells[X, Y] := "Что пришло";
StringGrid.Objects[X, Y] := pointer(integer(...)); // если IN - 0, OUT - 1
можно вообще код цвета записать

в DrawCell вставляем:
...
with TStringGrid(Sender), Canvas do begin
 if boolean(integer(Objects[ACol, ARow])) then
   Brush.Color := clRed
 else
   Brush.Color := clGreen;
end;
...
или если цвет, то
...
with TStringGrid(Sender), Canvas do begin
 if (integer(Objects[ACol, ARow]) > 0) then
   Brush.Color := TColor(integer(Objects[ACol, ARow]));
end;
...


 
Cosinus ©   (2004-10-07 16:42) [14]


> Skeptik   (07.10.04 16:19) [13]

Спасибо огромное, это решило все проблеммы..

> Суслик ©  

А мы "матрицы, глобальные и не глобальные переменые"... Э-э-х :)))


 
Суслик ©   (2004-10-07 16:43) [15]


>  [14] Cosinus ©   (07.10.04 16:42)

вот я на тебя посмоюрю когда прийдется увеличить количество данных :)))
сильно логику нужно будет менять. .

ЗЫ. Подумай, все-таки про объем. Недетский он:)))



Страницы: 1 вся ветка

Текущий архив: 2004.10.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
1-1097060399
Comp
2004-10-06 14:59
2004.10.24
Класс и метод или Как работать с указателем на процедуру


1-1097416963
Алексей
2004-10-10 18:02
2004.10.24
Поворот матрицы.


4-1095785051
Inoplanetjanin
2004-09-21 20:44
2004.10.24
Перехват сообщения


14-1096791805
QuasiLamo
2004-10-03 12:23
2004.10.24
Как заставить IE не грузить картинки?


1-1097262217
Sulimxar
2004-10-08 23:03
2004.10.24
Иконки