-
Jul 19th, 2018, 07:34 AM
#161
Fanatic Member
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
A next question.
In Excel etc., when a cell is selected, the fixed rows/cols do highlight the cell coordinate.
Like this:
And when the control lost the focus, it should go away.
Would it be possible to have such a function inside the control?
-
Jul 19th, 2018, 07:58 AM
#162
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Karl77
Is there an edit function in the works?
I mean a textbox in a cell.
Already there. See:
http://www.vbforums.com/showthread.p...=1#post5290225
-
Jul 19th, 2018, 08:47 AM
#163
Fanatic Member
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by gibra
Already there. See:
Aha, very cool.
A "bit" more than I wanted, but even better.
Thank you.
-
Jul 21st, 2018, 12:40 PM
#164
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Karl77
A next question.
In Excel etc., when a cell is selected, the fixed rows/cols do highlight the cell coordinate.
Like this:
And when the control lost the focus, it should go away.
Would it be possible to have such a function inside the control?
Yes, you can implement such feature by following code addition into your Form:
Code:
Private Sub VBFlexGrid1_GotFocus()
Call SetRowColColorIndicator
End Sub
Private Sub VBFlexGrid1_LostFocus()
Call SetRowColColorIndicator(True)
End Sub
Private Sub VBFlexGrid1_RowColChange()
Call SetRowColColorIndicator
End Sub
Private Sub SetRowColColorIndicator(Optional ByVal Clear As Boolean)
Static LastRow As Long, LastCol As Long, InitDone As Boolean
With VBFlexGrid1
If InitDone = True Then
If LastRow > -1 Then .Cell(FlexCellBackColor, LastRow, 0) = -1
If LastCol > -1 Then .Cell(FlexCellBackColor, 0, LastCol) = -1
End If
If Clear = False Then
If .FixedCols > 0 Then
.Cell(FlexCellBackColor, .Row, 0) = vbRed
LastRow = .Row
Else
LastRow = -1
End If
If .FixedRows > 0 Then
.Cell(FlexCellBackColor, 0, .Col) = vbRed
LastCol = .Col
Else
LastCol = -1
End If
InitDone = True
Else
LastRow = -1
LastCol = -1
InitDone = False
End If
End With
End Sub
-
Jul 21st, 2018, 12:41 PM
#165
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
-
Jul 23rd, 2018, 02:24 AM
#166
Fanatic Member
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Code:
Private Sub SetRowColColorIndicator
That works great.
I thought of adding such a feature into the control itself.
Now as I see it is a few lines only, it is very ok to have it in the form code.
Thank you.
Regarding the edit field the same applies.
It is, as said, not so much to do in the form code.
-
Jul 28th, 2018, 10:21 AM
#167
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Update released.
Internal GDI leak fixed. E.g. happen when the grid is loaded and unloaded dynamically many times.
-
Aug 12th, 2018, 02:19 PM
#168
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Important update released.
The internal TEXTMETRIC structure was declared as ANSI and not as WIDE.
This bug has no functional effect on Unicode since the corrupted declaration is below the used section.
However, the WIDE API expects a larger structure than declared which is then a memory risk because the API will fill data beyond the declared structure. (not good)
-
Aug 12th, 2018, 09:40 PM
#169
Frenzied Member
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Krool
Important update released.
The internal TEXTMETRIC structure was declared as ANSI and not as WIDE.
This bug has no functional effect on Unicode since the corrupted declaration is below the used section.
However, the WIDE API expects a larger structure than declared which is then a memory risk because the API will fill data beyond the declared structure. (not good)
also affects CommonControls?
-
Aug 12th, 2018, 11:19 PM
#170
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Jonney
also affects CommonControls?
Yes, but only ListBoxW Style <> Normal and new FontCombo.
-
Aug 25th, 2018, 07:59 AM
#171
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Update released.
Major performance boost in the internal GetHitTestInfo function.
This boost is only noticeable in very large grids, e.g. 500,000 rows.
Now the GetHitTestInfo function is same fast in a 500,000 rows grid then in a 100 rows grid.
Problem was if X or Y is below 0 then unnecessary iterations were performed. And the larger the grid the slower it gets. But this got now fixed.
-
Aug 25th, 2018, 03:51 PM
#172
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Minor bugfix (1px miscalc) related to todays release for performance boost in the internal GitHitTestInfo function.
Worth mention is that the overall performance is boosted as the internal function is called often internally.
Therefore a 500,000 rows grid performs now quite good.
Next step is then virtual mode via custom data source to eliminate the long populate for such big row numbers.
-
Aug 27th, 2018, 04:06 PM
#173
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
I'm working currently with the FlexDataSource functionality where a custom data source can be set via IVBFlexDataSource interface.
As previously discussed in page 1 it's only for display of the viewport. (like virtual mode)
Therefore the Find and Sort functionality must be turned off as this is managed by the custom data source.
However, what about other functionalities like .Clip, .FormatString, .AddItem, .Clear, .TextMatrix ?
There would be a little overhead as it needs to be evaluated whether to call IVBFlexDataSource::GetData or read internal TCELL.
Or also disable .Clip, .FormatString etc. when custom data source is set ?
Anyhow, .TextMatrix needs to be kept as setting .TextMatrix could then invoke IVBFlexDataSource::SetData. If not there where else ?
Maybe Schmidt (Olaf) can advise how this works exactly in the vsFlexGrid.
Last edited by Krool; Aug 27th, 2018 at 04:17 PM.
-
Aug 28th, 2018, 02:01 AM
#174
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Krool
I'm working currently with the FlexDataSource functionality where a custom data source can be set via IVBFlexDataSource interface.
As previously discussed in page 1 it's only for display of the viewport. (like virtual mode)
Therefore the Find and Sort functionality must be turned off as this is managed by the custom data source.
However, what about other functionalities like .Clip, .FormatString, .AddItem, .Clear, .TextMatrix ?
There would be a little overhead as it needs to be evaluated whether to call IVBFlexDataSource::GetData or read internal TCELL.
Or also disable .Clip, .FormatString etc. when custom data source is set ?
Anyhow, .TextMatrix needs to be kept as setting .TextMatrix could then invoke IVBFlexDataSource::SetData. If not there where else ?
Maybe Schmidt (Olaf) can advise how this works exactly in the vsFlexGrid.
Can't say much with regards to .TextMatrix-Delegations (in both, read- and -write-directions),
because the whole point of an external DataSource is, to "not bother with storing data inside the Grid via TextMatrix".
And yes, sorting is done on the external Container (usually an Rs) - the only thing from the Grid we used
to trigger that, was "a Header-Click-Event".
And the "write-direction" of the external DS (::SetData) was triggered by "InCell-Edits" (not .TextMatrix)
(which the "big FlexGrid" allows).
Formatting was done via FlexGrid-Methods though (but not much - alternating Row-Colors mostly, along with ColWidth-settings).
We had only one case, where we needed "extensive Formatting" - and for that case we enabled
*also* the OwnerDraw-Mode on the Flex (in addition with using the external DS).
Olaf
-
Aug 29th, 2018, 01:49 AM
#175
New Member
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Great work Krool. I have replaced completely the MS flexgrid with yours and it's working great.
Originally Posted by Krool
Update, included ClipMode property that determines whether to include (default) or to exclude hidden cells in a clip command.
I tested this funcionality in the EXE version but in my programs I am using the ActiveX version and it is not included yet. Would you be so kind to add it in future versions ?
Thanks again, Miquel.
-
Aug 29th, 2018, 11:08 AM
#176
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Schmidt
Can't say much with regards to .TextMatrix-Delegations (in both, read- and -write-directions),
because the whole point of an external DataSource is, to "not bother with storing data inside the Grid via TextMatrix".
And yes, sorting is done on the external Container (usually an Rs) - the only thing from the Grid we used
to trigger that, was "a Header-Click-Event".
And the "write-direction" of the external DS (::SetData) was triggered by "InCell-Edits" (not .TextMatrix)
(which the "big FlexGrid" allows).
Formatting was done via FlexGrid-Methods though (but not much - alternating Row-Colors mostly, along with ColWidth-settings).
We had only one case, where we needed "extensive Formatting" - and for that case we enabled
*also* the OwnerDraw-Mode on the Flex (in addition with using the external DS).
Olaf
Currently an intrinsic in-cell editing is not yet developed.
But for sure I would include ::SetData to be prepared interface wise already.
But can you maybe test in vsFlexGrid if a .TextMatrix delegation does fire a ::SetData ?
Because most MSFlexGrid users (which might migrate to VBFlexGrid) handle there in-cell edit by placing a external TextBox in cell location and need .TextMatrix therefore and for this case a call to ::SetData would be needed.
Another question: is the 'Record' Long param in ::GetData 1-based? The 'Field' param is for sure 0-based.
Thanks
Originally Posted by miquel
Great work Krool. I have replaced completely the MS flexgrid with yours and it's working great.
I tested this funcionality in the EXE version but in my programs I am using the ActiveX version and it is not included yet. Would you be so kind to add it in future versions ?
Thanks again, Miquel.
Yes, of course. In version 1.2.
But first a few other features need to be ready before.
Last edited by Krool; Aug 29th, 2018 at 11:11 AM.
-
Aug 29th, 2018, 12:57 PM
#177
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
- Interface-Callback and mapping-wise it is all Zero-Based...
- FG.TextMatrix, as well as FG.Clip (and probably all other stuff) is routed to GetData/SetData of the DS-implementation, as soon as this was set.
Here is Test-Code for a small Form (which only contains a VSFlex, named F).
Code:
Private SArr As New cStringArrayDS
Private Sub Form_Load()
F.ColWidth(-1) = 1500
SArr.BindTo F, 3, 10
Dim x, y
For y = 0 To SArr.Rows - 1: For x = 0 To SArr.Cols - 1
SArr.Matrix(x, y) = "Row " & y & ", Col " & x
Next x, y
Debug.Print F.TextMatrix(2 + F.FixedRows, 2)
F.TextMatrix(2 + F.FixedRows, 2) = "2,2"
Debug.Print F.TextMatrix(2 + F.FixedRows, 2)
End Sub
Here a ScreenShot (with FixedCols an FixedRows both at 1):
As one can see above, the TextMatrix-call is only matching with the SArr.Matrix-call,
when the current F.FixedRows are added to the Index-Position (in case F.FixedRows is > 0).
Only in x-Direction (addressing Cols), the zerobased indexes for SArr.Matrix and F.TextMatrix are matching -
so the DataSource ignores any current FixedRows-Header-Settings, whilst .TextMatrix wants the Header included in the x, y Offsets.
Ok, below is Code for the Binding-Class (named cStringArrayDS), which encapsulates a zerobased StringArray as the DataSource.
Code:
Option Explicit
Implements IVSFlexDataSource
Private mArr() As String
Public Sub BindTo(F As VSFlexGrid, ByVal Cols As Long, ByVal Rows As Long)
ReDim mArr(0 To Cols - 1, 0 To Rows - 1)
F.FlexDataSource = Me
End Sub
Public Property Get Rows() As Long
Rows = UBound(mArr, 2) + 1
End Property
Public Property Get Cols() As Long
Cols = UBound(mArr, 1) + 1
End Property
Public Property Get Matrix(ByVal xIdx As Long, ByVal yIdx As Long) As String
Matrix = mArr(xIdx, yIdx)
End Property
Public Property Let Matrix(ByVal xIdx As Long, ByVal yIdx As Long, RHS As String)
mArr(xIdx, yIdx) = RHS
End Property
'simple IVSFlexDataSource-implementation, which works against the internal array
Private Function IVSFlexDataSource_GetFieldName(ByVal Field As Long) As String
IVSFlexDataSource_GetFieldName = "ColHdr_" & Field
End Function
Private Function IVSFlexDataSource_GetFieldCount() As Long
IVSFlexDataSource_GetFieldCount = UBound(mArr, 1) + 1
End Function
Private Function IVSFlexDataSource_GetRecordCount() As Long
IVSFlexDataSource_GetRecordCount = UBound(mArr, 2) + 1
End Function
Private Function IVSFlexDataSource_GetData(ByVal Field As Long, ByVal Record As Long) As String
IVSFlexDataSource_GetData = mArr(Field, Record)
End Function
Private Sub IVSFlexDataSource_SetData(ByVal Field As Long, ByVal Record As Long, ByVal newData As String)
mArr(Field, Record) = newData
End Sub
HTH
Olaf
Last edited by Schmidt; Aug 29th, 2018 at 01:06 PM.
-
Aug 29th, 2018, 03:23 PM
#178
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
That's strange that the vsFlexGrid doesn't offset the FixedCols in the FlexDataSource.
When using the applying the DataSource (ADO recordset) then the fixed cols are also taken in consideration.
But for sake of compatibility I will replicate the behavior as like in the vsFlexGrid.
Thanks Schmidt for testing/pointing out the details.
-
Sep 2nd, 2018, 02:38 PM
#179
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Hi,
I like to see the selected Row/Col change in width.
here is what I added
Code:
'in the Form Header section:
Private DoColumnsResize As Boolean
'also
Private Sub Form_Activate()
DoColumnsResize = True
End Sub
'the Function:
Private Function mFlex_ColumnResize() As Boolean
Dim i As Long
Dim w As Single
Dim Row As Long
Dim Col As Long
Static backColor As Long
With VBFlexGrid1
.Redraw = False
Row = .Row
Col = .Col
'play with Value / 12 for width
w = (.Width - .ColWidth(0) - 290) / 12
.Row = 0
For i = 1 To .Cols - 1
.Col = i
If i <> Col Then
If .ColWidth(i) <> w Then
.ColWidth(i) = w
.CellForeColor = &H80000008
End If
Else
If .ColWidth(i) <> w * 2 Then
.ColWidth(i) = w * 2
.CellForeColor = vbBlue
End If
End If
Next
.Col = 0
For i = 1 To .Rows - 1
.Row = i
.CellBackColor = .BackColorFixed
If i = Row Then
.CellBackColor = &H80000018
End If
Next
.Row = Row
.Col = Col
.Redraw = True
End With
End Function
'and:
Private Sub VBFlexGrid1_RowColChange()
'set the widht
If DoColumnsResize Then
DoColumnsResize = False
mFlex_ColumnResize
DoColumnsResize = True
End If
End Sub
just my taste
regards
Chris
to hunt a species to extinction is not logical !
since 2010 the number of Tigers are rising again in 2016 - 3900 were counted. with Baby Callas it's 3901, my wife and I had 2-3 months the privilege of raising a Baby Tiger.
-
Sep 4th, 2018, 03:58 PM
#180
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Important bugfix concerning info tips and in-place label tips.
The internal tooltip had two problems. I described the second problem earlier in this thread. Both were solved by adding the WS_EX_TRANSPARENT style bit. It allows all mouse events to pass through.
1. When control A has focus and user hovers over the flexgrid B which shows a info tip or in-place label tip and the user clicks on that tip then the focus was not changing from A to B.
2. In Win10 the mouse wheel scroll did not work when the mouse hovered over an in-place tip.
-
Sep 9th, 2018, 02:41 PM
#181
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Schmidt
FG.TextMatrix, as well as FG.Clip (and probably all other stuff) is routed to GetData/SetData of the DS-implementation, as soon as this was set.
Can you also please check if, once an DS-implementation is set, it is still possible to modify the '.Rows' property or to call 'AddItem'/'RemoveItem' because that would interfere in the number of records indicated by the DS-implementation and could raise an outer bound error?
Thanks
Last edited by Krool; Sep 10th, 2018 at 12:14 PM.
-
Sep 11th, 2018, 03:47 PM
#182
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Update released.
Beside other small new features this update includes the FlexDataSource (run-time only) property which allows to define a custom (private) data source via the IVBFlexDataSource interface.
The definitions are equally to vsFlexGrid (IVSFlexDataSource) and hopefully also the behavior. The behavior in regard to row/col offset should match.
Concerning the behavior of the limitation (function disabling) I am not sure. However, they are now as following:
- Sort not possible
- Clear method is restricted. (not possible to clear text, only to clear formatting is possible)
- FindItem not possible
Everything else is redirected to/from the custom data source. (GetData/SetData)
Even changing the Rows/Cols is possible. Also to call AddItem/RemoveItem.
It is up to the application to sync that change to the custom data source. If that's not done an out of bounds error can happen or the change will be reversed after a .DataRefresh.
-
Sep 12th, 2018, 04:32 PM
#183
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Included optional argument Direction in the FindItem function. (Down or Up)
Now it's very easy to use and apply the "Find and replace" Common Dialog with the .FindItem function.
Also the FindItem cannot be used anymore now on a fixed row. This was not a problem at all without the Wrap or DirectionUp search.
But now you wouldn't want to search from bottom to up and get a hit by the column name by coincidence..
So that limitation is cosmetic to avoid this issue right away.
VBFLXGRD11.OCX will not be commited with that cosmetic limitation since it does not have Wrap or DirectionUp anyway.
-
Sep 12th, 2018, 08:22 PM
#184
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
In FarpointSpread and my own Spread, ColHeaderRows and RowHeaderCols are separate from normal grid cols and rows, that is, changing ColHeaderRows and RowHeaderCols does not affect normal grid cols/rows. This design makes the source code and data storage structure more complicated, but it's also more user-friendly and more flexible.
-
Sep 13th, 2018, 02:50 PM
#185
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
VBFLXGRD12.OCX is now released.
-
Sep 17th, 2018, 08:47 PM
#186
Addicted Member
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Hi Krool, if I want to use another free registration OCX, how do I generate tblid in RES? Thank you!
-
Sep 24th, 2018, 03:48 PM
#187
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by ChenLin
Hi Krool, if I want to use another free registration OCX, how do I generate tblid in RES? Thank you!
You can use ResourceHacker to edit the .res file.
-
Sep 24th, 2018, 04:02 PM
#188
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
I) Hello Krool, I want to report two differences that I found between VBFlexGrid and MS ones:
The first is how it draws the vertically centered texts when they don't fit in the row:
II) And the second is that in MS FlexGrids the CellFontSize value take some "stepped" values, but in the VBFlexGrid it doesn't.
For example, I select a cell, then set the size FlexGrid1.CellFontSize = 22
When I select the cell again, in the MS ones when I get back that value I get 22.2, but with the VBFlexGrid I get 22.
I could say that the VBFlexGrid is more "exact", but still that makes a difference that in some cases cause visible differences (that it would be long to explain now).
III) I have another question: is there any way to know what cells have particular formatting without having to navigate each one? I mean something like a property Get FormattedCellsMatrix(Row, Col) As Boolean
TIA
Last edited by Eduardo-; Sep 24th, 2018 at 04:13 PM.
-
Sep 25th, 2018, 03:28 PM
#189
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Eduardo-
I) Hello Krool, I want to report two differences that I found between VBFlexGrid and MS ones:
The first is how it draws the vertically centered texts when they don't fit in the row:
Hello Eduardo,
thanks for your report. I will process issue 1 first. (step by step)
Yes. I was certainly aware and could reproduce the behavior now again. Let's explain little bit:
If you set on the MS control the WordWrap property to True it will behave exactly like VBFlexGrid. Only if WordWrap is False the behavior is "little bit" different.
That's because the MS control will use DT_SINGLELINE for DrawText when WordWrap is False.
I explicity avoided that because else having WordWrap or multiline text are two things and should not be dependent on. I wanted to allow multiline text even if WordWrap is False.
Below would be the code modification marked as red in internal sub 'DrawCell' (not yet implemented; to be discussed) to replicate exact behavior for both WordWrap False/True:
Code:
If PropWordWrap = True Then Format = Format Or DT_WORDBREAK Else Format = Format Or DT_SINGLELINE
[...skipped part for here...]
Dim CalcRect As RECT, Height As Long, Result As Long
Select Case Alignment
Case FlexAlignmentLeftCenter, FlexAlignmentCenterCenter, FlexAlignmentRightCenter, FlexAlignmentGeneral
LSet CalcRect = TextRect
Height = DrawText(hDC, StrPtr(Text), -1, CalcRect, Format Or DT_CALCRECT)
If PropWordWrap = True Then
Result = (((TextRect.Bottom - TextRect.Top) - Height) / 2)
Else
Format = Format Or DT_VCENTER
End If
Case FlexAlignmentLeftBottom, FlexAlignmentCenterBottom, FlexAlignmentRightBottom
LSet CalcRect = TextRect
Height = DrawText(hDC, StrPtr(Text), -1, CalcRect, Format Or DT_CALCRECT)
If PropWordWrap = True Then
Result = ((TextRect.Bottom - TextRect.Top) - Height)
Else
Format = Format Or DT_BOTTOM
End If
End Select
If Result > 0 Then TextRect.Top = TextRect.Top + Result
As you see here comes DT_SINGLELINE in place which I want to avoid. DT_BOTTOM and DT_VCENTER are only supported when DT_SINGLELINE is set.
Currently always DT_TOP is applied in both (no DT_SINGLELINE at all) and the vertical adjustment is done manually. That's no issue as DrawText will be clipped to not go beyond the cell rectangle. However, in order to have the manual vertical adjustment to work with DT_TOP I would need to have the text rectangle less beyond the cell rectangle, which would look like this:
Possible solution (fix) would be to create a region and clip the DC accordingly while doing that.
That would solve the issue?
Or going the exact replicate behavior and use DT_SINGLELINE ? I want to discuss this first before implementing.
Thanks
-
Sep 25th, 2018, 04:32 PM
#190
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
OK, Krool. It is not an "issue", at least not now.
Showing texts in the cells exceeding the height of the cells as I did is not a normal thing to do.
I found this difference only by chance while testing other things, but this code is not in an actual real life program.
Now thinking in your explanation of wordbreak <> multiline it makes sense to perhaps leave it as it is now.
Or wait to see if it is an issue for someone else. Now I can't think of a situation where it could be actually a problem.
Or perhaps (I'm not saying you to do it, but just something to think about whether it is a good idea or not) you could have a property where can be set compatibility flags, and where such differences could be avoided.
Let's suppose there are a couple more of this improvements that change the old behavior.
It could be a property named for example OldFlexBehavior.
It would have a Long type value. The default value being 0.
Let's suppose there are three flags: 1, 2 and 4.
7 means full MS emulation.
Then if (mOldFlexBehavior and 1) = 1 it means when WordWrap is False to write in single lines as MS does.
But the question is: does it worth the effort? Will someone ever benefit from that?
If it were me, perhaps I would wait until someone actually needs it.
Last edited by Eduardo-; Sep 25th, 2018 at 04:35 PM.
-
Sep 26th, 2018, 12:29 PM
#191
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Krool
However, in order to have the manual vertical adjustment to work with DT_TOP I would need to have the text rectangle less beyond the cell rectangle, which would look like this:
Possible solution (fix) would be to create a region and clip the DC accordingly while doing that.
I think that way would be best to have same behavior when WordWrap is True or False. But allowing multiline always (no DT_SINGLELINE when WordWrap is False)
My last concern is that this clipping region for every cell would slow down the drawing..
EDIT:
Or keep as is.. and just include a new MultiLine property which controls DT_SINGLELINE to use or not.
Then if WordBreak is False and MultiLine is False also DT_VCENTER and DT_BOTTOM come into play to have same behavior as MS. Else have "manual" vertical offset adjustment with DT_TOP. (Like now as is, support multiline text)
This way it's separated and more specific under control.
Last edited by Krool; Sep 26th, 2018 at 12:41 PM.
-
Sep 26th, 2018, 02:29 PM
#192
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Krool
My last concern is that this clipping region for every cell would slow down the drawing..
Yes, I don't think that would be a good idea.
Originally Posted by Krool
EDIT:
Or keep as is.. and just include a new MultiLine property which controls DT_SINGLELINE to use or not.
Then if WordBreak is False and MultiLine is False also DT_VCENTER and DT_BOTTOM come into play to have same behavior as MS. Else have "manual" vertical offset adjustment with DT_TOP. (Like now as is, support multiline text)
This way it's separated and more specific under control.
I vote for that.
-
Sep 26th, 2018, 04:30 PM
#193
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Eduardo-
I vote for that.
Great. I will call the property 'SingleLine'. So False being the default.
I just need to ensure to make a restriction that WordWrap and SingleLine cannot be both set to True.
That's it. Update will follow accordingly soon after careful testing. (Also that LabelTip will be in sync etc.)
-
Sep 26th, 2018, 06:41 PM
#194
Addicted Member
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by Eduardo-
Thank you. I want to know how to get tblid.
-
Sep 26th, 2018, 07:22 PM
#195
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by ChenLin
Thank you. I want to know how to get tblid.
What is tblid?
The XML information needed in the manifest for SxS installations?
-
Sep 26th, 2018, 08:03 PM
#196
Addicted Member
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Yes, should this information be exempt from registration? And CLSID。
Please see the picture, which is the red line information.
-
Sep 26th, 2018, 08:47 PM
#197
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
There are several programs that people use for getting that information.
I use one that was made by dilettante (a forum member) but it is not available any more in the web site it used to be because it is not currently developed and not published any more from the original author (it was available with source code).
It is called MMM or "Make My Manifest". I found a version here in GitHub.
There is also another one called UMMM. It is from wqweto, another forum member.
There are also others that are commercial. So far I only used MMM. It is not perfect. I have a couple of versions and both produce (different) errors, mainly because of Service Packs that are installed. But I manage to make them work by editing the XML text by hand.
Perhaps UMMM is better.
Or perhaps someone else has another one to recomend.
-
Sep 26th, 2018, 10:02 PM
#198
Addicted Member
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Neither of them tested successfully, gave up testing, and now uses the shell "regsvr32 /s " & App.Path & "\MSHFLXGD.OCX", vbHide method in the program startup.
Still thank you for your reply.
-
Sep 26th, 2018, 10:10 PM
#199
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Originally Posted by ChenLin
Neither of them tested successfully, gave up testing, and now uses the shell "regsvr32 /s " & App.Path & "\MSHFLXGD.OCX", vbHide method in the program startup.
Still thank you for your reply.
But that does a very different thing. That registers the ocx in Windows. It is the same that an installer would do.
And I don't know if that would work in 64 bits Windows.
The manifest thing is somethign else. It is not registering the ocx in Windows, but making it work without registering it (and just with that program).
-
Sep 27th, 2018, 01:42 AM
#200
Addicted Member
Re: VBFlexGrid Control (Replacement of the MSFlexGrid control)
Maybe I didn't use it well, it just generated a file like this:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity name="BVO Computing Services.MMM" processorArchitecture="X86" type="win32" version="0.12.0.311" />
<description>XCopy Packager for VB 6.0</description>
<file name="MMM.exe">
</file>
</assembly>
it doesn't include files like TYPEID or clsid.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|