Компьютерный форум NoWa.cc

Компьютерный форум NoWa.cc (https://nowa.cc/index.php)
-   Компоненты (https://nowa.cc/forumdisplay.php?f=297)
-   -   Компонент StringGrid для Delphi (https://nowa.cc/showthread.php?t=130110)

PIANOR 26.11.2007 19:07

Компонент StringGrid для Delphi
 
Поделитесь пожалуйтса ссылками на компоненты типа StringGrid, в которых возможно каждой ячейке цвет присваивать!!!

Gerasoft 27.11.2007 12:04

Ответ: Компонент StringGrid для Delphi
 
Боюсь, таких не бывает! Ручками только писать.

ivan_fd 28.11.2007 11:20

Ответ: Компонент StringGrid для Delphi
 
Цитата:

Сообщение от PIANOR (Сообщение 1279228)
Поделитесь пожалуйтса ссылками на компоненты типа StringGrid, в которых возможно каждой ячейке цвет присваивать!!!

В TMS Component Pack, StringGrid, помоему это может.

Lis_ 29.11.2007 15:48

Ответ: Компонент StringGrid для Delphi
 
или используй функцию DrawCollumnCell, т.е. рисуй вручную

ASProfi 16.12.2007 13:25

Ответ: Компонент StringGrid для Delphi
 
Цитата:

Сообщение от Lis_ (Сообщение 1284131)
или используй функцию DrawCollumnCell, т.е. рисуй вручную

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

Meteor12 11.01.2008 19:20

Ответ: Компонент StringGrid для Delphi
 
Можно использовать событие 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);
*/

x128 12.01.2008 14:12

Ответ: Компонент StringGrid для Delphi
 
...Привожу пример обработчика события 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;

взято с delphikingdom.com

gev 08.04.2008 13:05

Ответ: Компонент StringGrid для Delphi
 
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;

sirwhale 08.05.2008 18:09

Ответ: Компонент StringGrid для Delphi
 
http://www.bergsoft.net/components.htm

все что тебе надо

ZhenO 10.05.2008 16:32

Ответ: Компонент StringGrid для Delphi
 
Цитата:

Сообщение от sirwhale (Сообщение 1652612)
http://www.bergsoft.net/components.htm

все что тебе надо

а не где тоже самое но только для 2007 найти можно, улыбнула эта тема)))) насчет цветных ячеек, а то ручками реально надоедает иногда

ivan_fd 12.05.2008 12:24

Ответ: Компонент StringGrid для Delphi
 
Цитата:

Сообщение от ZhenO (Сообщение 1655884)
а не где тоже самое но только для 2007 найти можно, улыбнула эта тема)))) насчет цветных ячеек, а то ручками реально надоедает иногда

В теме компоненты часть 2 поиском все есть.

Splice 10.03.2009 13:32

Re: Компонент StringGrid для Delphi
 
Всегда использую в таких случаях AdvStringGrid от TMS

jah1980 17.07.2009 13:39

Re: Компонент StringGrid для Delphi
 
В студенческие времена писал нечто подобное руками, но компонент получился сильно тормозной, на больших объемах тормозил ощутимо

manimas 17.07.2009 17:53

Компонент StringGrid для Delphi
 
Поделитесь пожалуйтса ссылками на компоненты типа StringGrid, в которых возможно каждой ячейке цвет присваивать!!!

weyland 13.08.2009 17:55

Re: Компонент StringGrid для Delphi
 
Либо TMS Component Pack, либо используй канву в ячейке


Текущее время: 15:49. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Copyright ©2004 - 2025 NoWa.cc

Время генерации страницы 0.03535 секунды с 9 запросами