I know how to print flexi grid data, but I am having problems if it is warped. After reading previous posts I wrote my own code to print the rows and columns. But it does not print warped columns properly. Example....
Grid Data:
-------------------------------------------------------------------------------
This text | Column 2 | Column 3 |
will Warp | | |
-------------------------------------------------------------------------------
I want printing to be.....
-------------------------------------------------------------------------------
This text Column 2 Column 3
will Warp
-------------------------------------------------------------------------------
But I get.....
-------------------------------------------------------------------------------
This text will Warp Column 2 Column 3
-------------------------------------------------------------------------------
My Code:
-------------------------------------------------------------------------------Code:Dim Rows As Integer Dim Cols As Integer Dim X() As Integer Dim Y() As Integer Dim LastX As Integer Dim LastY As Integer Dim MaxWidth() As Integer Dim MaxHeight() As Integer Private Sub printGrid() Dim tempWidth As Long Dim Pages As Integer Dim Copy As Integer Dim pCnt As Integer Dim Copies() As Integer Printer.Font = grdReport.CellFontName Printer.FontSize = grdReport.CellFontSize With grdReport ReDim X(.Cols) ReDim Y(.Rows) ReDim MaxWidth(.Cols) ReDim MaxHeight(.Rows) X(1) = PD.LBorder Y(1) = PD.TBorder For Rows = 1 To (.Rows - 1) For Cols = 1 To (.Cols - 1) If CInt(Printer.TextWidth(grdReport.TextMatrix(Rows, Cols))) > MaxWidth(Cols) Then MaxWidth(Cols) = CInt(Printer.TextWidth(grdReport.TextMatrix(Rows, Cols))) If CInt(Printer.TextHeight(grdReport.TextMatrix(Rows, Cols))) > MaxHeight(Rows) Then MaxHeight(Rows) = CInt(Printer.TextHeight(grdReport.TextMatrix(Rows, Cols))) Next Cols Next Rows For Cnt = 1 To (grdReport.Cols - 1) If (tempWidth + (MaxWidth(Cnt) + PD.CellWSpacing)) > (Printer.ScaleWidth - PD.LBorder - PD.RBorder) Then tempWidth = (MaxWidth(Cnt) + PD.CellWSpacing) Pages = Pages + 1 Else tempWidth = tempWidth + (MaxWidth(Cnt) + PD.CellWSpacing) End If Next Cnt ReDim Copies(Pages + 1) Pages = 0 tempWidth = 0 For Cnt = 1 To (grdReport.Cols - 1) If (tempWidth + (MaxWidth(Cnt) + PD.CellWSpacing)) > (Printer.ScaleWidth - PD.LBorder - PD.RBorder) Then tempWidth = (MaxWidth(Cnt) + PD.CellWSpacing) Pages = Pages + 1 Copies(Pages) = (Cnt - Copies(Pages - 1)) Else tempWidth = tempWidth + (MaxWidth(Cnt) + PD.CellWSpacing) End If Next Cnt Copy = 0 For pCnt = 1 To Pages Copy = Copy + Copies(pCnt) Next pCnt Copies(Pages + 1) = (grdReport.Cols - Copy - 1) On Error GoTo Err For Cnt = 0 To Pages For Rows = 1 To (.Rows - 1) For Cols = 1 To (Copies(Cnt + 1)) Copy = 0 For pCnt = 1 To Cnt Copy = Copy + Copies(pCnt) Next pCnt If X(Cols + Copy) = 0 And (Cols + Copy) <> 0 Then X(Cols + Copy) = LastX + PD.CellWSpacing + MaxWidth((Cols - 1) + Copy) End If Printer.CurrentX = X(Cols + Copy) Printer.CurrentY = Y(Rows) LastX = Printer.CurrentX LastY = Printer.CurrentY Printer.Print grdReport.TextMatrix(Rows, (Cols + Copy)) Next Cols Y(Rows + 1) = Y(Rows) + MaxHeight(Rows) + PD.CellHSpacing If (Y(Rows + 1) + MaxHeight(Rows)) > Printer.ScaleHeight Then Y(Rows + 1) = PD.TBorder Printer.NewPage End If Next Rows Debug.Assert False If Cnt = Pages Then Exit For X(Cols + Copy) = PD.LBorder Y(0) = PD.TBorder LastX = 0 LastY = 0 Printer.NewPage Next Cnt End With Printer.EndDoc Exit Sub Err: If Err.Number = 482 Then MsgBox "There was a Printer Error in printing the Data", vbOKOnly + vbExclamation, "Printer Error" End Sub
There might be some flaws in the code due to my experience level. (I know 1 place). Any way I would appreciate if you help me.
The MSH Flexi Grid Control is name 'grdReport' and Command Button as 'cmdReport'




Reply With Quote