Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
ВнизПрорисовка по скроллингу в TStringGrid! Найти похожие ветки
← →
operator © (2007-12-13 10:48) [0]Всем доброго времени суток!,
можно ли отловить событие скроллинга у TStringGrid?
← →
morgoth (2007-12-13 10:52) [1]а что требуется то?
← →
ЮЮ © (2007-12-13 10:54) [2]А он разве не перерировывается? Тогда добавь goThumbTracking в Options грида
← →
Nil (2007-12-14 01:46) [3]в TStringGrid нет такого. Есть в TJvStringGrid из пакета JEDI VCL, и вообще там очен много полезных фич
← →
Германн © (2007-12-14 02:12) [4]
> Прорисовка по скроллингу в TStringGrid!
>
> operator © (13.12.07 10:48)
>
> Всем доброго времени суток!,
>
> можно ли отловить событие скроллинга у TStringGrid?
>
!Прорисовку" нужно выполнять не "по скроллингу", а "по необходимости". О чем знает система. И в любом случае для прорисовки есть соответствующий обработчик OnDrawCell.
← →
Ezorcist (2007-12-14 08:28) [5]У меня таже проблема - поставил перерисовку некотрых ячеек на OnDrawCell, когда таблица прокручиваетася нажатием на кнопки прокрутки - все ok, а если тащить ползунок - оставются артефакты
← →
ЮЮ © (2007-12-14 08:59) [6]> [5] Ezorcist (14.12.07 08:28)
> поставил перерисовку некотрых ячеек на OnDrawCell,
А почему не всех?
> а если тащить ползунок - оставются артефакты
Естественно, ведь не все перерисовавается или перерисовывается неправмльно.
← →
Ezorcist (2007-12-15 09:15) [7]А есть событие, возникающее после перерисовки грида?
← →
{RASkov} © (2007-12-15 11:43) [8]> [7] Ezorcist (15.12.07 09:15)
> А есть событие, возникающее после перерисовки грида?
А для чего? Что бы его опять перерисовать? :) И опять.... и опять..... и опять....
:о)
Ответь на вопрос ЮЮ в [6].... или задай нормально конечный вопрос в целом)
Да..
> поставил перерисовку некотрых ячеек на OnDrawCell
...надеюсь за пределы параметра Rect не выходим при рисовании?
← →
Ezorcist (2007-12-16 15:13) [9]
> ...надеюсь за пределы параметра Rect не выходим при рисовании?
>
>
Вот именно, что выходим. Хотелось бы в заголовке нарисовать через несколько ячеек. если бы отловить событие "после перерисовки", то можно было бы и повер нанести.
или каждая ячейка должна рисовать в приделах своего rect и никак от этого не уйти?
← →
{RASkov} © (2007-12-16 16:07) [10]> [9] Ezorcist (16.12.07 15:13)
> или каждая ячейка должна рисовать в приделах своего rect
Да, именно так!
> и никак от этого не уйти?
Ну почему.... можно и немного поизвращаться.... только грид тебе придется полностью самому рисовать :( Ну а как ты хотел? :)
Попробуй вот такое:procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.DefaultDrawing:=False;
StringGrid1.GridLineWidth:=0;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
with TStringGrid(Sender) do begin
if (ACol<FixedCols) or (ARow<FixedRows) then begin //Рисуем фиксированные ячейки
if ARow>=FixedRows then DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH)
else if ODD(ACol) then begin
Rect.Right:=Rect.Right+(Rect.Right-Rect.Left);
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH);
Canvas.Brush.Style:=bsClear;
DrawText(Canvas.Handle, "Длинный заголовок", -1, Rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
end;
end else begin //Рисуем остальные ячейки
if (ACol=3) and (ARow=2) then Exit; //не рисуем, если эту ячейку нарисовали в "другом событии"....
if (ACol=2) and (ARow=2) then begin
Rect.Right:=Rect.Right+(Rect.Right-Rect.Left);
Canvas.Brush.Style:=bsClear;
DrawText(Canvas.Handle, "Объедененная ячейка", -1, Rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
end else Canvas.Rectangle(Rect);
end;
end;
end;
В данном примере есть один большой минус - не учитывается скролл, т.е. те ячейки, что рисуются в "чужом" событии, так и будут не перерисованы, пока не перерисуются те ячейки в чьих.... блин, ну ты понял :)
Данный минус тоже можно обойти, но это еще ни один десяток строк кода, а может и больше :)
В общем - это пример, наверное, того, как это нуторно релизовать в стандарном контроле, не предназначеном для этого, объединения ячеек.
← →
Германн © (2007-12-16 17:58) [11]
> В общем - это пример, наверное, того, как это нуторно релизовать
> в стандарном контроле, не предназначеном для этого, объединения
> ячеек.
>
Просто пример плохой. Не надо в OnDrawCell рисовать в других ячейках. А для "объединения" ячеек в заголовке достаточно лишь самостоятельно прорисовывать рамку в ячейке, рисуя в каждом конкретном случае только нужные части этой рамки.
← →
{RASkov} © (2007-12-16 18:42) [12]> [11] Германн © (16.12.07 17:58)
> Просто пример плохой.
А я и не спорю)
> Не надо в OnDrawCell рисовать в других ячейках. А для "объединения"
> ячеек в заголовке достаточно лишь самостоятельно прорисовывать
> рамку в ячейке, рисуя в каждом конкретном случае только
> нужные части этой рамки.
А как текст выводить в "две спаренные" ячейки, тоже кусками?
Не для этого он(стандартный грид), что бы ячейки в нем спаривать легко и безболезненно
:)
← →
Германн © (2007-12-16 19:01) [13]
> А как текст выводить в "две спаренные" ячейки, тоже кусками?
А в чем проблема?
> Не для этого он(стандартный грид), что бы ячейки в нем спаривать
> легко и безболезненно
Отнюдь. Для меня это легко и безболезненно.
Вот так я объединял ячейки http://webfile.ru/1643667
← →
{RASkov} © (2007-12-16 19:30) [14]> [13] Германн © (16.12.07 19:01)
:)
> Отнюдь. Для меня это легко и безболезненно.
Это замечательно) Значит я не совсем прав... а может и совсем не прав(
> Вот так я объединял ячейки
Хоть и не совсем понятно, что же там на рисунке, но....
Грид точно стандартный? или потомок от стандартного(т.е. доработанный)?
> > А как текст выводить в "две спаренные" ячейки, тоже кусками?
> А в чем проблема?
Впрочем я что-то так и не понял про то, как текст вывести каждый кусок только в своей ячейке, например пол слова в одной а оканчание слова в соседней...(
С другой стороны на рисунке не видно что бы текст объеденялся в ячейках..... там просто "гру" в одной ячейке а "ппа" в соседней снизу а вот "разделительной полосы" у этих ячеек нет и так далее....--------------
| гру |_____
| ппа |_____
|_____|
|_____|_____
Что-то вырозится не получилось, но..... это не то о чем я...)
А я вот а каком выводе тексата в объеденененных ячейках:_______________________
|__обедененные ячейки__|
|_______|______|______|
← →
Германн © (2007-12-16 19:47) [15]
> Грид точно стандартный? или потомок от стандартного(т.е.
> доработанный)?
Это практически стандартный TDBGrid. Нестандартная там только реакция на колесо мышки, поскольку эту недоработку Борланд устранил только в Д2005.
> Хоть и не совсем понятно, что же там на рисунке,
Ячейки в крайнем левом столбце объединены по некоторому критерию, чтобы разделить записи в наборе на группы.
Точно так же можно было бы объединить ячейки и по горизонтали.
← →
{RASkov} © (2007-12-16 19:53) [16]>
> Точно так же можно было бы объединить ячейки и по горизонтали.
Вот и хотелось бы увидеть именно эту реализацию :)
И чтоб было похоже на то как в моем примере, но разумеется без все тех "глюков", что присутствуют в коде [10] или нижний "рисунок" в [14])
← →
{RASkov} © (2007-12-16 19:55) [17]И чтоб было похоже на то как в моем примере, но разумеется без все тех "глюков", что присутствуют в коде [10]...
или как на нижнем "рисунке" в [14])
← →
Германн © (2007-12-16 20:25) [18]
> {RASkov} © (16.12.07 19:55) [17]
Нуууу. Много хотите сударь.
Я же обещал лишь точно также, а не как в [14].
:)
← →
{RASkov} © (2007-12-16 22:01) [19]> [18] Германн © (16.12.07 20:25)
> Нуууу. Много хотите сударь.
Всего лишь безболезненную и легкую реализацию объединения ячеек по горизонтали в стандартном гриде.
т.е. нарисовать 3Dлинии рамки в нужных местах - не проблема, а вот вывод текста в обедененые ячейки вот это да...
:)
Можно конечно извернуться, и подготовить битмап размером с объеденненые ячейки, на который вывести текстовую строку, и потом битмап "порезать" на ячейки и просто выводить - "в свою ячейку - свой кусок битмапа". И так для каждых объедененных ячеек свой битмап....)
← →
Германн © (2007-12-17 00:58) [20]
> Всего лишь безболезненную и легкую реализацию объединения
> ячеек по горизонтали в стандартном гриде.
Сам же уже не один раз сказал что "безболезненно и легко" такое не проходит. Только специальные потомки стандартных гридов под это заточены. И достаточно посмотреть их исходники, как становится понятно, что легкой жизни не бывает.
P.S. Смотрел когда-то исходники от Д. Большакова.
← →
Ezorcist (2007-12-24 22:30) [21]Так все-таки событие по окончнанию перерисовки можно отловить? Т.е. во время перерисовки каждой отдельной, заполнить ее номер в массив, потом когда все перерисовалось - нарисовать что-нибудь самому, в зависимости от того, какие ячейки надо перерисовывать и сбросить массив?
← →
Германн © (2007-12-25 01:20) [22]
> Ezorcist (24.12.07 22:30) [21]
Тебе нужен геморрой? Есть более простые способы его заполучить.
> Так все-таки событие по окончнанию перерисовки можно отловить?
Да можно. Отлавливай WM_ENDSESSION. После него уже не будет перерисовок. :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c