Вопрос № 99499: Здравствуйте уважаемые эксперты!У меня возникла небольшая проблемка .В моей програмке я использую некую переменную tmp куда в процессе вычисления заносятся различные значения как целые так и дробные,поэтому я и описал её тип как real, далее эти значе...Вопрос № 99538: Уважаемые эксперты помогите решить проблему.
Работаю с компонентом CxGrid от DevGroup нужно в ячейке таблицы отобразить иконку, как это можно сделать?
если никто не работал с CxGrid, то как можно то же самое сделать у обычного грида...
Вопрос № 99.499
Здравствуйте уважаемые эксперты!У меня возникла небольшая проблемка .В моей програмке я использую некую переменную tmp куда в процессе вычисления заносятся различные значения как целые так и дробные,поэтому я и описал её тип как real, далее эти значения попадают в таблицу стрин грида.Но иногда полученное в tmp значение должно являтся кодом символов ASCII и соответствено в таблицу я должен заносить сам символ,а иногда полученное число я должен заносить в таблицу в 16ричном виде.Так как мне выйти из этого положения.То
есть я так понимаю для ascii я должен делать проверку является ли число целое и 8 битное а дальше что,а для 16ричного как?
Отвечает: Карабанов Алексей
Здравствуйте, Зотов Геннадий Александрович!
Итак у Вас стоит задача определить смысл значения, хранящегося в переменной и в зависимости от этого представить ее в том или ином виде.
Вообще-то для Вашей ситуации лучше всего использовать несколько переменных, т.к. типы значений, по вашим словам и целые и дробные (т.е. вещественные). В типе real значение хранится всегда вещественное и Вам придется преобразовывать его к целому типу.
Кстати, если использовать разные переменные, то определять смысл значения не потребуется т.к. в переменную, выделенную, к примеру, для кода символа будет записываться только код символа и ничего другого, таким образом обеспечивается однозначная интерпретация.
Если же Вам обязательно обходиться одной переменной, то скажу пару слов по поводу щестнадцатиричных значений.
Коды ASCII в принципе тоже могут быть представлены шестнадцатиричными значениями.
Поэтому Вам удобнее все значения представлять в шестнадцатиричном коде, а затем проверять диапазон: коды ASCII находятся в диапазоне от 00 до FF, если вам в таблице не нужно отображать управляющие символы, то просто исключаете символы от 00 до 1F и отображаете символ в таблице. Ну, а те значения которые должны быть представлены в шестнадцатиричном виде просто будут отображаться в таблице. Дробные числа представлять в шестнадцатиричном коде излишне да и сложно, поэтому как я уже сказал лучше использовать несколько
переменных.
--------- Дорогу осилит идущий!
Ответ отправил: Карабанов Алексей (статус: 8-ой класс)
Ответ отправлен: 24.08.2007, 08:02 Оценка за ответ: 4 Комментарий оценки: спасибо только было бы хорошо привести в примере ф-ции перевода
Отвечает: sir henry
Здравствуйте, Зотов Геннадий Александрович!
Здесь нельзя дать однозначный алгоритм, т.к. беззнаковое однобайтное число, которое используется для представления символа, может быть как символом, так и числом. Здесь Вы сами должны выбрать алгоритм определения, символ у Вас или число.
1. Для преобразования байта в символ служит функция:
- Chr(Round(Ваше_число)).
За контролем значения числа следите сами, т.к. если Ваше число превысит значение 255, то в символ оно преобразуется всё равно, но это будет неверный символ, сами понимаете. :)
2. Предыдущий эксперт написал, что хранить числа с плавающей точкой в шестнадцатиричном виде нет никакого смысла в силу ненаглядности, поэтому будем преобразовывать только целочисленные значения.
Шестнадцатирично Вы сможете отображать только строку, а не собственно число. :) Поскольку при занесении в StringGrid Вы и так число преобразуете в строку, осталось решить, как придать ей шестнадцатиричный вид. Для этого можно использовать функцию преобразования:
- IntToHex(Round(Ваше_число), 2);
Здесь Ваше_число преобразуется к целочисленному формату, а потом преобразуется в шестнадцатиричное представление (строку).
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 24.08.2007, 09:07 Оценка за ответ: 5 Комментарий оценки: спасибо принцип понятен
Вопрос № 99.538
Уважаемые эксперты помогите решить проблему.
Работаю с компонентом CxGrid от DevGroup нужно в ячейке таблицы отобразить иконку, как это можно сделать?
если никто не работал с CxGrid, то как можно то же самое сделать у обычного грида?
Отправлен: 24.08.2007, 14:27
Вопрос задал: Кэр Лаэда (статус: Студент)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Sandy
Здравствуйте, Кэр Лаэда!
у обычного грид прорисовку можно делать на событие OnDrawCell, если Вы установите свойство DefaultDrawing := false. но при этом придется делать всю отрисовку самому.
Ответ отправил: Sandy (статус: 9-ый класс)
Ответ отправлен: 24.08.2007, 15:03 Оценка за ответ: 3 Комментарий оценки: то что грид можно перерисовывать я сам знаю, а каким образом туда запихнуть иконку.
Отвечает: Delph
Здравствуйте, Кэр Лаэда!
Используйте событие Grid'а OnDrawDataCell. Здесь можно прорисовать ячейку как угодно (например, сделать текст золотистым на синем фоне, нарисовать что-нибудь). Когда мне нужно было прорисовывать какие-то изображения в гриде, я загружал их в ImageList, а затем использовал команду:
<Rect.Right - 16, Rect.Top + 1> - для прорисовки изображения в правой части ячейки (Rect передаётся в обработчик события и означает прямоугольную область экрана, принадлежащую ячейке), 8 - индекс загруженной картинки. Что означает параметр Enabled, я не помню, но ставил всегда True.
Ещё одна связанная с прорисовкой команда: Grid.DefaultDrawDataCell(Rect, Field, State);
Насколько помню, она прорисовывает текст в ячейке после того, как изменены настройки этого текста (параметры шрифта, цвет, фон). В моей программе Grid.DefaultDrawDataCell находится после того, как настроен вывод текста, но до ImageList.Draw.
Разумеется, всё, что я здесь описал, должно быть внутри обработчика OnDrawDataCell.
--------- Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: 8-ой класс)
Ответ отправлен: 24.08.2007, 15:06 Оценка за ответ: 5 Комментарий оценки: спасибо, большое то что нужно
Отвечает: Примак Руслан Николаевич
Здравствуйте, Кэр Лаэда!
Для соответсвующей колонки View'era, который содержит ваш грид, в CustomDrawCell необходимо описать механизм отрисовки иконки. Все иконки храняться в IndicationImageList. Пример в приложении. В качестве View я использую DBTableView.
Приложение:
Ответ отправил: Примак Руслан Николаевич (статус: 3-ий класс)
Ответ отправлен: 27.08.2007, 16:41 Оценка за ответ: 4 Комментарий оценки: Спасибо, я уже сделал, с помощью ImageComboBox очень кстати эффективный метод