Текущий архив: 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;
и вот это ;)не означает, что кол-во Cells у Grid может быть в пределах Integer? Или я совсем чего то не понимаю?
Integer –2147483648..2147483647 signed 32-bit
← →
Суслик © (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.48 MB
Время: 0.04 c