![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DrawCell в StringGrid. Хм...
Cosinus © (2004-10-07 14:45:00)Монитор порта... Окно in/out байтов реализовано на основе StringGrid... In байты отображаются одним цветом, Out, соответственно другим... В упор не пойму, как сделать вышеприведенное не используя глобальные переменные(кол-во Cells до и после). То есть необходим DrawCell с теми же параметрами, что и обычный + Color:TColor. Подскажите, как это можно сделать.
Суслик (2004-10-07 16:43:00) [1]
> [14] Cosinus © (07.10.04 16:42)
вот я на тебя посмоюрю когда прийдется увеличить количество данных :)))
сильно логику нужно будет менять. .
ЗЫ. Подумай, все-таки про объем. Недетский он:)))
Cosinus (2004-10-07 16:42:00) [2]
> Skeptik (07.10.04 16:19) [13]
Спасибо огромное, это решило все проблеммы..
> Суслик ©
А мы "матрицы, глобальные и не глобальные переменые"... Э-э-х :)))
Суслик (2004-10-07 16:19:00) [3]
> [11] Cosinus © (07.10.04 16:16)
да как тебе сказать.
когда речь идет про млны, всегда стоит подумать о том, может что-то не то.
Ты подумай, что такая конструкция у тебя будет занимать в памяти несколько десятков мб.
Может это и не ничего, но как минимум работать будет тормозно.
Проверь.
Skeptik (2004-10-07 16:19:00) [4]> При каждом 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:16:00) [5]
> 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:06:00) [6]
> 20х1000000
ТЫ в своем уме :))))
У какой грид тебе пропашет матрицу 20 х млн ? Это очень много.
Меняй условия задачи.
ЗЫ
1) 1 байт.
2) примерно 20мб будет занимат.
Cosinus (2004-10-07 16:04:00) [7]
> Суслик © (07.10.04 15:51) [8]
Ну да, наверно неправильно выразился, ну я так понял, что ты понял, что я имел ввиду :))
Кстати возник еще один вопрос по теме. Сколько байт занимает boolean переменая, и отсюда, сколько байт будет занимать массив порядка 20х1000000(миллион, чтобы нолики не считать:)???
Суслик (2004-10-07 15:51:00) [8]
> [7] Cosinus © (07.10.04 15:45)
Что ты называешь глобальной переменной? Есть ощущение, что термин плохой.
Этот массив может лежать в private полях формы, которая выводит грид. Это же не глобальная переменная...
Cosinus (2004-10-07 15:45:00) [9]
> Суслик © (07.10.04 15:20) [6]
Логично. Спасибо.
ЗЫ Этот массив - это та же глоб. переменная(чего я использовать и не хотел), но просто довольно элегантно, поэтому еще раз спасибо.
Суслик (2004-10-07 15:20:00) [10]
> [4] Cosinus © (07.10.04 15:15)
Решение стандартное - иметь еще двумерный массив boolean. Размер его равен размеру грида.
При чтении из порта:
1. кадать в грид
2. кидать в массив
При перерисовке см. что в соответстующем эл-те массива - true, значит in, false, занчит out
Cosinus (2004-10-07 15:16:00) [11]
> Леприкон © (07.10.04 14:56) [3]
Сесенно :)))
Cosinus (2004-10-07 15:15:00) [12]
> КаПиБаРа © (07.10.04 14:53) [1]
> Суслик © (07.10.04 14:54) [2]
1)Необходимо, чтобы "In байты отображаются одним цветом, Out, соответственно другим... "
2)При каждом Read/Write с порта вызывается процедура, которая раскидывает байты по StringGrid (в каждой ячейке один байт). Могу сделать, чтобы строки или колонки, подчиняясь каким-либо условиям выводились одним, либо другим цветом
3)Исходя из 2, не вижу решения, как правильно поставить условие в DrawCell, чтобы при ее вызове проверялось, INли эти байты или OUT...
Леприкон (2004-10-07 14:56:00) [13]Сколько столбцов в гриде? Кол-во строк постоянно меняется?
Суслик (2004-10-07 14:54:00) [14]
> Cosinus © (07.10.04 14:45)
Ты бы написал все по пунктам:
1. Нужно то-то и то-то
2. сделал то-то и то-то
3. не пойму то-то и то-то.
------------
Лично я вопроса не понял.
КаПиБаРа (2004-10-07 14:53:00) [15]Cosinus © (07.10.04 14:45)
Что "как сделать"? Приложение без глобальных переменныхили DrawCell с теми же параметрами?
=======================================
Пишите коротко и неясно.
(Наполеон I - составителям Конституции)
=======================================