Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1198665549
Ega23
2007-12-26 13:39
2008.01.27
Скрыть Excel


15-1197242225
Fixi4eeG
2007-12-10 02:17
2008.01.27
Установка компонентов Rxlib


2-1198876946
andreil
2007-12-29 00:22
2008.01.27
Помогите с написанием надстройки над ДЛЛкой!


2-1198928612
savyhinst
2007-12-29 14:43
2008.01.27
OGG


2-1198650821
uno
2007-12-26 09:33
2008.01.27
UdpSocket и отправка уведомления





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский