Subject Re: [IBO] TIB_GRID, OnGetCellProps and BufferFields
Author russellbelding
Hello Helen

Thanks for your reply.

In the onGetCellProps event handler I am not interested in the widths
of columns, I should have made that clear. I use the column widths
only in the form create procedure and the form close procedure,
allowing a users prior grid settings to have effect.

Each row in the grid represents an event which may be active or
inactive. In a particular call by the TIB_Grid class to the event
handler I am interested in a setting "is the current row an active
event?", and I set the font and background colors by user preference.

In a particular call to the event handler for a particular row and
column, the values
myQuery.FieldByName(myBooleanField)asBoolean and
are usually not the values for the row for which the event handler is
called. Painting colors using these values paint all rows the same.

Only when I use
do I get good results, and then the first (FixedDataCols+1) values
are the values for the previous row, which is my problem.

I have started looking in the TIB_GRID, TIB_COMPONENTS.PAS and
Borland code but am swamped by unfamiliar details at present.



--- In, Helen Borrie <helebor@t...> wrote:
> At 04:15 AM 25/05/2004 +0000, you wrote:
> >Using IBO4.3Aa, D6, FB 1.5.
> >
> >In TIB_GRID the onGetCellProps event handler allows me to set the
> >background color and the font color for each column in the grid. I
> >using this event handler to set these colors depending on field
> >in the current row. The grid data comes from a TIB_Query, myQuery.
> >The event handler is called with column and row numbers ACol and
> >where ARow is the row number of a visible row. To examine the data
> >the row when the event handler is called I must use
> >myQuery.BufferFieldsByName(myFieldName).asWhatever (*)
> >to examine the data field of the current row. The grid has
> >FixedDataCols fixed data columns set in the published grid
> >The data returned by (*) in the event handler is for the current
> >for those columns numbered by Acol (FixedDataCols+2) and greater
> >contains the data for the previous row for columns 1,2,...
> >(FixedDataCols+1). This is the source of my problem.
> >
> >I have made the following changes to IB_GRID.PAS
> >
> >{ Methods }
> >{start changes by russell}
> > function PublicColWidths(I:integer):integer;
> > procedure PublicColWidthsChanged;
> >{end changes by russell}
> >
> >{start changes by russell}
> >function TIB_CustomGrid.PublicColWidths(I:integer): integer;
> >begin
> > Result := colWidths[I];
> >end;
> >
> >procedure TIB_CustomGrid.PublicColWidthsChanged;
> >begin
> > ColWidthsChanged;
> >end;
> >{end changes by russell}
> >
> >I would have backed out these changes and then tested but the
> >required to my code after backing out theses changes to IB_GRID.PAS
> >are many, and I am guessing these changes have not upset the code
> >
> >So I am submitting my problem here in the hope of saving time.
> >
> >Is the behaviour of BufferFieldsByName(..) descibed above intended?
> >If not how can it be changed? If correct how can I get the correct
> >data for low numbered columns in the event handler?
> Why not just refer to the Columns property of the ib_row? (In this
> BufferFields or Fields...since you are handling the current row,
they are
> the same). Columns is an array of TIB_Column, so, as long as your
> FixedCols stay fixed, you can read from/write to the DisplayWidth
> of the data column. When you write to DisplayWidth, the grid will
> accordingly.
> Helen