![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Неактивный пользователь
Регистрация: 19.09.2007
Сообщений: 4
Репутация: 0
|
Поделитесь пожалуйтса ссылками на компоненты типа StringGrid, в которых возможно каждой ячейке цвет присваивать!!!
|
|
|
|
| Реклама: | круиз на теплоходе по енисею | Вентилятор радиальный YB 7T | дс кристалл - RedKassa.ru | Заходите на сайт MebelStol.ru: днс компьютерные столы игровые - отличные цены и большой выбор! | msi geforce rtx 5060 ti 16g gaming oc |
|
|
#2
|
|
Новичок
Пол:
Регистрация: 19.01.2007
Сообщений: 8
Репутация: 2
|
Боюсь, таких не бывает! Ручками только писать.
|
|
|
|
|
|
#3
|
|
|
|
|
|
|
|
|
#4
|
|
или используй функцию DrawCollumnCell, т.е. рисуй вручную
__________________
Я был, есть и буду есть!!!! |
|
|
|
|
|
|
#5
|
|
Новичок
![]() ![]() Пол:
Регистрация: 06.09.2005
Сообщений: 20
Репутация: 5
|
|
|
|
|
|
|
#6
|
|
Неактивный пользователь
Регистрация: 11.01.2008
Сообщений: 1
Репутация: 1
|
Можно использовать событие OnDrawCell (прорисовка ячейки, происходит постоянно) для установки любого цвета шрифта, фона, изменения шрифта и т.д. используя вывод на канву. Это работает со стандартным stringgrig. Вот кусок из моего проекта.
void __fastcall TMainForm::LogSignTableDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { if(ARow) { LogSignTable->Canvas->Font = LogSignTable->Font; // Шрифт if(FiltrStr[ACol]=="") LogSignTable->Canvas->Font->Color = LogSignTable->Font->Color; else LogSignTable->Canvas->Font->Color = clBlue; LogSignTable->Canvas->Brush->Color = LogSignTable->Color; // Здесь можно задать любой цвет фона LogSignTable->Canvas->FillRect(Rect); // Закрасить выбранным фоном ячейку. DrawText(LogSignTable->Canvas->Handle, LogSignTable->Cells[ACol][ARow].c_str(), -1, &Rect, (DT_SINGLELINE | DT_VCENTER | DT_NOCLIP | DT_LEFT)); // Вывести текст в ячейку используя ф-цию WinAPI } } Добавлено через 10 минут /* Я пытаюсь показать StringGrid без выделенной ячейки. Первая нефиксированная ячейка всегда имеет состояние "инвертированного" цвета. Я не хочу позволить пользователю редактировать сетку, но эта выделенная ячейка производит впечатление того, что сетка имеет возможность редактирования... Вам необходимо создать обработчик события OnDrawCell. Это легче чем вы думаете. Вот образец кода, который сделает вас счастливым: procedure TForm.sgrDrawCells(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState); var ACol: longint absolute Col; ARow: longint absolute Row; Buf: array[byte] of char; begin if State = gdFixed then Exit; with sgrGrid do begin Canvas.Font := Font; Canvas.Font.Color := clWindowText; Canvas.Brush.Color := clWindow; Canvas.FillRect(Rect); StrPCopy(Buf, Cells[ACol, ARow]); DrawText(Canvas.Handle, Buf, -1, Rect, DT_SINGLELINE or DT_VCENTER or DT_NOCLIP or DT_LEFT); end; end; */ //-------------------------------------------------------------------- /* OnDrawCell возникает каждый раз когда компонент прорисовывает себя. В обработчик передаются следующие параметры: Sender: TObject Объект, который "просит" себя нарисовать, в нашем случае это будет StringGrid. ACol, ARow: Longint Номер колонки и строчки. Отсчет начинается с нуля. Rect: TRect Идентифицурует прямоугольную область ячейки с номерами ACol:ARow. State: TGridDrawState Состояние ячейки. Может принимать значения: gdSelected - выделенная ячейка, gdFocused - ячейка имеет фокус ввода, gdFixed - фиксированная ячейка. //--------------------------------------------------------------------- function Windows.DrawText(hdc: HDC; lpString: PChar; nCount: integer; var lpRect: TRect; uFromat: Cardinal):integer; Функция DrawText выводит форматированный текст в определенном прямоугольнике. Функция форматирует текст, согласно указанному методу (выводит табуляцию, выравнивает символы, разрывает строки и т.д.). hDC Указывает на контекст устройства, напомню, что свойство Handle у TCanvas как раз и имеет тип HDC. lpString Строка для вывода. Если параметр nCount равен -1, строка должна быть нуль-терминированная (null-terminated), то есть заканчиваться символом #0. nCount Указывает количество символов в строке. Тут все ясно. lpRect Переменная в которой передается запись типа TRect. Именно в этот прямоугольник будет выводится наш текст. uFormat Определяет метод форматирования текста. Это может быть любая комбинация следующих значений (объединенных поразрядным OR оператором): DT_BOTTOM - Определяет выровненный по нижней части текст. Это значение должно быть объединено с DT_SINGLELINE. DT_CALCRECT - Определяет ширину и высоту прямоугольника. Если имеются многократные строки текста, DrawText использует ширину прямоугольника, указанного на lpRect и расширит прямоугольника к последней строки текста. Если имеется только одна строка текста, DrawText изменит правую сторону прямоугольника так, чтобы это ограничило последний символ в строке. В любом случае, DrawText возвращает высоту форматируемого текста, но не выводит текст. DT_CENTER - Выравнивает по центру текст горизонтально. DT_END_ELLIPSIS или DT_PATH_ELLIPSIS - Заменяет часть данной строки с эллипсами, в случае необходимости, так, чтобы результат находился в определенном прямоугольнике. Данная строка не изменяется, если флажок DT_MODIFYSTRING не определен. Вы можете определять DT_END_ELLIPSIS, чтобы заменить символы в конце строки, или DT_PATH_ELLIPSIS, чтобы заменить символы в середине строки. Если строка содержит наклонную черту влево (\), символы, DT_PATH_ELLIPSIS сохраняют в максимально возможной степени текста после последней наклонной черты влево. DT_EXPANDTABS - Разворачивает символы табуляции. Заданное по умолчанию число символов позиций табуляции - восемь. DT_EXTERNALLEADING - Включает внешнюю подачу шрифта в высоте строки. Обычно, внешняя подача не включена в высоту строки текста. DT_LEFT - Выравнивает влево текст. DT_MODIFYSTRING - Изменяет данную строку, чтобы согласовать к отображаемому тексту. Этот флажок не имеет никакого эффекта, если DT_END_ELLIPSIS или флажок DT_PATH_ELLIPSIS не определен. Обратите внимание, что некоторые комбинации флажков uFormat могут заставлять переданную строку изменяться. Использование DT_MODIFYSTRING или с DT_END_ELLIPSIS или DT_PATH_ELLIPSIS может заставлять строку изменяться, вызывая исключение в отмене CString. DT_NOCLIP - Выводит без отсечения. DrawText несколько быстрее, когда DT_NOCLIP используется. DT_NOPREFIX - Выключает обработку префиксных символов. Обычно, DrawText интерпретирует символ амперсанда (и) мнемонической схемы - префиксный символ как директива, чтобы подчеркнуть символ, который следует, и (& &) мнемонически схема - префиксные символы с двумя символами амперсанда как директива, чтобы печатать одиночный символ амперсанда. Определяя DT_NOPREFIX, эта обработка выключена. DT_RIGHT - Выравнивает вправо текст. DT_SINGLELINE - Определяет одиночную строку только. Возвраты каретки и переводы строки не разрывают строку. DT_TABSTOP - Устанавливает табуляторы. Старший байт nFormat - число символов для каждой позиции табуляции. Заданное по умолчанию число символов в позиции табуляции - восемь. DT_TOP - Определяет выровненный по верху текст (одиночная строка только). DT_VCENTER - Определяет вертикально центрированный текст (одиночная строка только). DT_WORDBREAK - Определяет слово - breaking. Строки были бы автоматически разбиты между словами, если слово простиралось бы дальше края прямоугольника, определенного lpRect. Последовательность переводов строки возвратов каретки также разорвет строку. http://www.delphimaster.ru/articles/...rid/index.html http://www.firststeps.ru/mfc/steps/help/r.php?790 */ /* //-------------------------------------------------------------------------- // Преобразование AnsiString в char[] с нулем в конце и обратно : //-------------------------------------------------------------------------- AnsiString Str; char* buf; buf = Str.c_str(); Обратное преобразование: Str = AnsiString(buf); */ Последний раз редактировалось Meteor12; 11.01.2008 в 19:30.. Причина: Добавлено сообщение |
|
|
|
| Сказали спасибо: |
|
|
#7
|
|
...Привожу пример обработчика события OnDrawCell. Он выводит нестандартно во все ячейки, а ячейку, координаты которой совпадают с внешними параметрами SgKritCol, SgKritRow, красит желтым цветом...
Код:
procedure TfAg.SgKritDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var r: TRect;
begin
With Sender as TStringGrid do
begin
With Canvas do
begin
if (SgKritCol = ACol) and (SgKritRow = ARow) then
Brush.Color:= clYellow else Brush.Color := clWhite;
Font.Color:= clBlack;
FillRect(Rect);
end;
r:= KdnRect(Rect,0,4,-3,0);
DrawText(Canvas.Handle, PChar(SgKrit.Cells[ACol, ARow]),
Length(SgKrit.Cells[ACol, ARow]),r,
DrawTextBiDiModeFlags(DT_RIGHT));
end;
end;
|
|
|
|
|
|
|
#8
|
|
Неактивный пользователь
Пол:
Регистрация: 15.10.2007
Сообщений: 13
Репутация: 1
|
Ha TMSStringGrid OnGetCellColor
procedure AdvStringGrid1GetCellColor(Sender: TObject; ARow, ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont); begin if (ARow =2) AND (ACol = 2) then ABrush.Color := clRed; end; |
|
|
|
|
|
#9
|
|
Новичок
Пол:
Регистрация: 26.11.2007
Сообщений: 12
Репутация: 0
|
|
|
|
|
|
|
#10
|
|||||||||||||||||||||||
а не где тоже самое но только для 2007 найти можно, улыбнула эта тема)))) насчет цветных ячеек, а то ручками реально надоедает иногда |
||||||||||||||||||||||||
|
|
|
|
|
#11
|
|
|
|
|
|
|
| Сказали спасибо: |
|
|
#12
|
|
Неактивный пользователь
Пол:
Регистрация: 05.12.2007
Сообщений: 2
Репутация: 0
|
Всегда использую в таких случаях AdvStringGrid от TMS
|
|
|
|
|
|
#13
|
|
Неактивный пользователь
Регистрация: 17.07.2009
Сообщений: 1
Репутация: 0
|
В студенческие времена писал нечто подобное руками, но компонент получился сильно тормозной, на больших объемах тормозил ощутимо
|
|
|
|
|
|
#14
|
|
Неактивный пользователь
Регистрация: 17.07.2009
Сообщений: 1
Репутация: 0
|
Поделитесь пожалуйтса ссылками на компоненты типа StringGrid, в которых возможно каждой ячейке цвет присваивать!!!
|
|
|
|
|
|
#15
|
|
Неактивный пользователь
Пол:
Регистрация: 13.08.2009
Сообщений: 3
Репутация: -1
|
Либо TMS Component Pack, либо используй канву в ячейке
|
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| StringGrid с поддержкой Unicode | zark1982 | Компоненты | 16 | 10.07.2011 01:05 |
| компонент webbrowser | kirsanvi | .NET | 2 | 04.02.2009 07:50 |
| Castalia for Delphi 2008.1 - эксперт IDE Delphi | Minotawr | Компоненты | 0 | 03.09.2008 01:17 |
| Экспорт StringGrid в Word | Lis_ | Borland C++ Builder | 1 | 27.09.2007 15:09 |
|
|