dcsimg
Page 1 of 4 1234 LastLast
Results 1 to 40 of 126

Thread: The 1001 questions about vbRichClient5 (2019-08-19)

  1. #1

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    The 1001 questions about vbRichClient5 (2019-08-19)

    All of my desktop tools will be developed based on RC5, and I'll have a lot of questions to ask Olaf and other RC5 experts. In order not to disturb other people, I concentrated all my questions about RC5 in this thread. Olaf and other RC5 experts could pick up some valuable questions to answer and ignore the worthless questions.

    New questions:

    030: Which is the best/fastest way to draw on a cCairoSurface an OutLine text? (By reexre) ................#117link

    List of Archieved Questions:
    Code:
    Question 029:  Resolved
    - How to use the RC5 subclasser? (By AAraya)................#113link
    
    Question 028: Resolved
    - CC.GetTextExtents cannot calculate the width of Chinese characters ................#114link
    
    Question 027: Resolved
    - cWidgets.LoadFromXML cannot load custom properties after compiling into exe ................#105link
    
    Question 026: Resolved
    - Using ClEditor in cWebKit ................#102link
    
    Question 025: 
    - Does cWebKit.Document support ExecCommand like VB.WebBrowser? ................#101link
    
    Question 024: 
    - Looking for advice: Develop a simple HtmlEditor with RC5 ................#94link
    
    Question 023: Resolved
    - cWidgets.LoadFromXML cannot load custom control cwShape ................#93link
    
    Question 022: 
    - Can RC5.ActiveScript implement JavaScript debugging? ................#92link
    
    Question 021: Resolved
    - Can cActiveScript execute JavaScript code?................#87 link
    
    Question 020: Resolved
    - Does RC5 support RegExp?................#86 link
    
    Question 019:  Resolved
    - A few questions about RC5 multithreading. (By yinxiaodan)................#73link
    
    Question 018: Resolved
    - Efficient stack operations (Push and Pop)?................#65link
    
    Question 017:  Resolved
    - How to convert vbRichClient5.cRecordset into ADODB.Recordset? (By yinxiaodan)................#61link
    
    Question 016: Resolved
    - How to quickly release a large number of objects in a collection?................#57link
    
    Question 015: 
    - Is cWidgetBase suitable as a UI element model for web-pages?................#53link
    
    Question 014: Resolved
    - What objects in RC5 can be used to process XML? Is it cElement?................#50link
    
    Question 013: Resolved
    - Store object to database fields: XML or JSON?................#49link
    
    Question 012:  Resolved
    - What's the best approach to detect the image type without relying on file extension 
      (if using cCollection)? (By Carlos Rocha)................#45link
    
    Question 011:  Resolved
    - How to solve potential collisions with image keys? (By Carlos Rocha)................#45link
    
    Question 010: 
    - Are there components similar to FontDialog and ColorDialog in RC5? ................#36link
    
    Question 009: 
    - Why is there no cwComboBox component in vbWidgets? ................#35link
    
    Question 008: Resolved
    - How to store a large number of pictures in the RC5 User-Controls? ................#19link
    
    Question 007: 
    - Usage of the RC5.cDC ................#18link
    
    Question 006: Resolved
    - The function equivalent to DrawFocusRect API ? ................#00link
    
    Question 005: Resolved
    - Does RC5.Cairo have a function equivalent to DrawText(DT_CALCRECT)? ................#00link
    
    Question 004: Resolved
    - Use uxTheme to implement Win10 visual style in RC5................#11link
    
    Question 003: Resolved
    - Is there an event equivalent to WM_SETCURSOR in RC5?................#8link
    
    Question 002: Resolved
    - Use mouse-dragging to change the grid column width................#7 link
    
    Question 001: Resolved
    - The min line width of Cairo.LineTo................#2 link
    For unanswered questions, once the time exceeds 2 weeks, I'll put them in the "List of Archieved Questions". The questions that have been solved will also be placed in it. If someone else wants to ask questions about RC5 in my thread, I'll also put them in the list above. All questions about RC5 are welcome.
    Last edited by dreammanor; Aug 19th, 2019 at 09:44 PM.

  2. #2

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Qustion 001: The min line width of Cairo.LineTo

    Qustion 001: The min line width of Cairo.LineTo

    I found a problem. The min line width of CC.LineTo is 2 instead of 1, which means I can't use CC.LineTo to draw a line with a line-width of 1. Did I miss something?

    Code:
    Private Sub DrawOn_4(CC As cCairoContext)
        CC.Paint 1, Cairo.CreateSolidPatternLng(vbWhite)
        
        Dim x, y
        Dim dx: dx = 100
        Dim dy: dy = 100
                            
        CC.SetLineWidth 1
        
        '--- Draw Line1 ----------------------------------------------
        x = 50: y = 50
        CC.MoveTo x, y
        CC.LineTo x + dx, y
        CC.Stroke , Cairo.CreateSolidPatternLng(vbBlue)
        
        '--- Draw Line2 ----------------------------------------------
        x = 50: y = 100             '--- Line2
        CC.DrawLine x, y, x + dx, y, True, 1, vbRed
        
        Set Picture = CC.Surface.Picture
        
    End Sub
    Attached Images Attached Images  
    Last edited by dreammanor; Jan 26th, 2019 at 05:44 AM.

  3. #3
    Frenzied Member
    Join Date
    Feb 2015
    Posts
    1,351

    Re: Qustion 001: The min line width of Cairo.LineTo

    Quote Originally Posted by dreammanor View Post
    Qustion 001: The min line width of Cairo.LineTo

    I found a problem. The min line width of CC.LineTo is 2 instead of 1, which means I can't use CC.LineTo to draw a line with a line-width of 1. Did I miss something?
    That's because cairo coordinates are centered on the pixels boundaries. To solve the issue just add 0.5 to each coordinate like:
    Code:
    x = 50.5: y = 50.5

  4. #4

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: Qustion 001: The min line width of Cairo.LineTo

    Hi The trick, I've searched the Internet for a long time and have not found a clue, now you help me solve it. Much appreciate.

  5. #5
    PowerPoster
    Join Date
    Jun 2013
    Posts
    4,346

    Re: Qustion 001: The min line width of Cairo.LineTo

    To add to tricks comment...

    Cairos Coord-System is supporting Sub-Pixel-precision (using Double-Coords).
    E.g. when you create an Image-Surface with a size of 3x3 Pixels, the Coord-System is spanned up this way (the x describing the location of a square-pixel, the | describing the "border between pixels"):
    Code:
    0 1 2 3
    |x|x|x|
    |x|x|x|
    |x|x|x|
    The above is leaving out the Coords for the vertical direction -
    but is trying to show in horizontal direction, where the Coords are located on that Bitmap of 3x3 Pixels (the 0 and the 3 are defined as lying at the outside of the Pixel-Area - and not "in a square Pixels center").

    Now, if you define a Rectangle-Path with (x, y, width, height) as: (0, 0, 3, 3) - using a Path which is placed "exactly on the outside of the area" you will:
    - for a Fill-command - have done everything right (covering the interior completely - without going "over the borders of the path") - since a Fill does not have to take a LineWidth into account.
    - but in case of a Stroke-command - cairo "walks the path" in a way, that "half the LineWidth is drawn on one side of the Path - and the other half of the LineWidth on the other"

    So in case of a Stroke-command with e.g. a LineWidth of 1 and vbBlack - you would not see "a full black line"
    (when the coords 0,0,3,3 were used for x,y,width,height of the Rect-Path)...
    Instead only "half the color-amount" (for our 1 Pixel wide Line) is rendered at the inside of the path - and the "half LineWidth-ColorAmount" on the outside of that path is not visible at all.

    To correctly Stroke a 1-Pixel-wide "outside Border" on a 3x3 Pixel Cairo-ImageSurface, you will have to use:
    CC.Rectangle 0.5, 0.5, 2, 2

    Or alternatively set the optional (5th) Helper-Param "DrawInsideBounds=True" for the call (which then allows you to give the Coords "in the same way as for a Fill-Command"):
    CC.Rectangle 0, 0, 3, 3, True
    The above Optional Param ensures (when True) an internal calculation like this:
    LW = CC.GetLineWidth
    x = x + LW / 2
    y = y + LW / 2
    Width = Width - LW
    Height = Height - LW
    (which then gives the following recalculated "Pixel-Interior-shifted coords": 0.5, 0.5, 2, 2)

    One can find infos for that of course also using Google - e.g. with the search-terms:
    [cairo lines blurred] ... the first link (on my machine) already offers a good explanation (in a blog-entry)...

    HTH

    Olaf

  6. #6

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5

    Very detailed explanation, very grateful.

  7. #7

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Qustion 002: Use mouse-dragging to change the grid column width

    Qustion 002: Use mouse-dragging to change the grid column width

    In vbWidgets, there is no example of changing the width of a grid column with mouse-dragging. I try to implement this feature myself, but I need to use a lot of Windows APIs, such as SetCapture, ReleaseCapture, ClipCursor, SetCursor, etc., and also need to draw Drag-Splitter. I'd like to know if there is a simple way to achieve it?
    Last edited by dreammanor; Jan 27th, 2019 at 10:03 AM.

  8. #8

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Question 003: Is there an event equivalent to WM_SETCURSOR in RC5?

    Question 003: Is there an event equivalent to WM_SETCURSOR in RC5?

    I often need to use the mouse to drag to change the position or size of an object, for example: change the PropertyGrid column width. In this case, I need to set the cursor (MousePointer). If the cursor is set in the MouseMove event, flickering will occur, so most people recommend setting the cursor in the WM_SETCURSOR message, but there seems to be no event corresponding to WM_SETCURSOR in cWidgetBase and cWidgetForm.

    In addition, Olaf once said that we should not use the platform-related system APIs directly, then how do we implement SetCapture, ReleaseCapture, ClipCursor in RC5?

  9. #9
    PowerPoster
    Join Date
    Jun 2013
    Posts
    4,346

    Re: Question 003: Is there an event equivalent to WM_SETCURSOR in RC5?

    Quote Originally Posted by dreammanor View Post
    Question 003: Is there an event equivalent to WM_SETCURSOR in RC5?
    This should answer 2 and 3 both... (and no - there are no System-APIs required)
    Instead you can write a simple Splitter-Widget like below (name it cwColSplit)
    Code:
    Option Explicit
    
    Private Const VSplitCursor_Png$ = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAABnRSTlMAwADAAMCNeLu6AAAAb0lEQVR42u3WSwqAMAwEUEe8V66enGxcdCNSmkCtLpysSgl59BcKd99Wxr60uoB/AEcxz8wAkIyI6/j7FQgQ0KLdy9skADN7AOhWrxsJMKheNBIgIkgOEtL3nG/RwKh0i9Ihdw31IgGvAdDPTsB0nEm6NMFxeZ+IAAAAAElFTkSuQmCC"
    
    Event Moved()
    
    Private WithEvents W As cWidgetBase, MDown As Boolean
    Public Size As Double, xPercent As Double
    
    Private Sub Class_Initialize()
      If Not Cairo.ImageList.Exists("VSplitCursor") Then Cairo.ImageList.AddImage "VSplitCursor", New_c.Crypt.Base64Dec(VSplitCursor_Png, True)
      Set W = Cairo.WidgetBase
          W.CanGetFocus = False
          W.Moveable = True
          W.MouseIconImageKey = "VSplitCursor,16,16"
      Size = 6
      xPercent = 0.5
    End Sub
     
    Public Property Get Widget() As cWidgetBase: Set Widget = W:         End Property
    Public Property Get Widgets() As cWidgets:  Set Widgets = W.Widgets: End Property
     
    Private Sub W_MouseEnter(ByVal MouseLeaveWidget As vbRichClient5.cWidgetBase)
      W.Refresh
    End Sub
    Private Sub W_MouseLeave(ByVal MouseEnterWidget As vbRichClient5.cWidgetBase)
      W.Refresh
    End Sub
    
    Private Sub W_Moving()
      MDown = True: xPercent = W.Left / W.Parent.Width
      If xPercent < 0.15 Then xPercent = 0.15 Else If xPercent > 0.85 Then xPercent = 0.85
      W_ContainerResize
      RaiseEvent Moved
    End Sub
    Private Sub W_ContainerResize()
      W.Move xPercent * W.Parent.Width, 0, Size, W.Parent.ScaleHeight
    End Sub
    Private Sub W_Paint(CC As vbRichClient5.cCairoContext, ByVal xAbs As Single, ByVal yAbs As Single, ByVal dx_Aligned As Single, ByVal dy_Aligned As Single, UserObj As Object)
      Dim MAct As Boolean: MAct = W.MouseOver Or MDown: MDown = False
      CC.Paint IIf(MAct, 0.3, 0.1) * W.Alpha, Cairo.CreateSolidPatternLng(IIf(MAct, W.SelectionColor, W.BackColor))
    End Sub
    Next is a simple PropGrid-Mockup, named cwPropGrid (based on a cwVList, so a vbWidgets-reference is needed in your Project):
    Code:
    Option Explicit
     
    Public WithEvents VList As cwVList 'we inherit visually from a preimplemented Widget
     
    Private WithEvents W As cWidgetBase, WithEvents Spl As cwColSplit
    
    Private Sub Class_Initialize()
      Set VList = New cwVList 'the Widget-Instance, to inherit from
          VList.RowHeight = 21
          VList.HeaderHeight = 23
      Set W = VList.Widget 'visual inheritance from the VList-WIdget
       
      Set Spl = Widgets.Add(New cwColSplit, "Spl")
    End Sub
     
    Public Property Get Widget() As cWidgetBase: Set Widget = W:         End Property
    Public Property Get Widgets() As cWidgets:  Set Widgets = W.Widgets: End Property
     
    Private Sub VList_OwnerDrawHeader(CC As vbRichClient5.cCairoContext, ByVal dx As Single, ByVal dy As Single, ByVal Alpha As Single)
      Cairo.Theme.DrawTo CC, W, thmTypeButtonFace, 0, 0, 0, dx, dy
      Dim x: x = Int(Spl.xPercent * W.Width + Spl.Size / 2)
      CC.DrawText 0, 0, x, dy, "HdrCol 1", True, , 3, True
      CC.DrawText x, 0, dx - x, dy, "HdrCol 2", True, , 3, True
      
      CC.DrawLine x, 0, x, dy, True, 1, &HCCCCCC
    End Sub
    
    Private Sub VList_OwnerDrawItem(ByVal Index As Long, CC As cCairoContext, ByVal dx As Single, ByVal dy As Single, ByVal Alpha As Single)
      Dim x: x = Int(Spl.xPercent * W.Width + Spl.Size / 2) - 1
      CC.DrawText 0, 0, x, dy, "Prop " & Index, True, , 3, True
      CC.DrawText x, 0, dx - x, dy, "Value " & Index, True, , 3, True
      
      CC.DrawLine x, 0, x, dy, True, 1, &HCCCCCC
    End Sub
    Finally Widget-TestCode for a normal VB6-Form:
    Code:
    Option Explicit
    
    Private WithEvents Panel As cWidgetForm, PG As cwPropGrid
     
    Private Sub Form_Load()
      Set Panel = Cairo.WidgetForms.CreateChild(hWnd)
      Set PG = Panel.Widgets.Add(New cwPropGrid, "PG")
          PG.VList.ListCount = 50
    End Sub
    
    Private Sub Form_Resize()
      ScaleMode = vbPixels
      Panel.Move 0, 0, ScaleWidth, ScaleHeight
    End Sub
    
    Private Sub Panel_ResizeWithDimensions(ByVal NewWidth As Long, ByVal NewHeight As Long)
      PG.Widget.Move 0, 0, NewWidth, NewHeight
    End Sub
    HTH

    Olaf

  10. #10

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5

    Hi Olaf, you can always achieve very amazing software features with minimal code. cwColSplit is exactly what I need, I've applied it to my PropertyGrid, thank you very much.


    The WM_SETCURSOR and WM_CAPTURECHANGED are important to me (my new Spread control will use them). If the SetCursor event and the CaptureChanged event could be added to the cWidgetBase.BubblingEvent, that would be great.

    Edit:
    I know that I can use RC5.cSubClass to intercept WM_SETCURSOR and WM_CAPTURECHANGED, but I'd like to avoid using Subclass.
    Last edited by dreammanor; Jan 28th, 2019 at 10:58 AM.

  11. #11

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Question 004: Use uxTheme to implement Win10 visual style in RC5

    Question 004: Use uxTheme to implement Win10 visual style in RC5

    Before Win8, the Windows-UI was not beautiful. But after Win8 (especially Win10), the Windows-UI is very beautiful. We only need to keep our software UI consistent with Win10 to make our software look decent.

    The visual style of vbWidgets is Win7, I need to change the visual style of vbWidgets to Win10. I know that it can be implemented by rewriting cThemeWin7.cls, but this requires a precise understanding of the color of the win10 controls, especially the rendering alpha value, which is a bit difficult for me.

    A few years ago, when I developed my custom controls, I used the DrawThemeBackground of uxTheme.dll to draw different parts of a controls. The drawing object(canvas) of DrawThemeBackground is hDC.

    I'd to know if We could make DrawThemeBackground draw directly on the CairoContext? Or copy the drawing result of the DrawThemeBackground to the CairoContext? This will saves a lot of time and source code, and keeps the style of RC5 vbWidgets consistent with the OS.
    Last edited by dreammanor; Jan 29th, 2019 at 03:38 AM.

  12. #12

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: Question 004: Use uxTheme to implement Win10 visual style in RC5

    I've successfully used DrawThemeBackground to draw Win10-style controls on cWidgetForm and are now trying to draw them on cWidgetBase.

    In addition, I also intend to write a cThemeWin10.cls based on cThemeWin7.cls

  13. #13

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5 (2019-01-29)

    I haven't succeeded in drawing Win10-style controls on cWidgetBase using DrawThemeBackground API, but I've seen hope.

    Code:
    Private Sub W_Paint(CC As vbRichClient5.cCairoContext, ByVal xAbs As Single, ByVal yAbs As Single, ByVal dx_Aligned As Single, ByVal dy_Aligned As Single, UserObj As Object)
        
        Draw_WindowsTheme CC
            
    End Sub
    
    Private Sub Draw_WindowsTheme(CC As cCairoContext)
        Dim hTheme As Long:         Dim bSuccess As Boolean
        Dim nResult As Long:        Dim lpRect As RECT
        Dim hWnd As Long:           Dim hDC As Long
            
        On Error GoTo ErrDraw
        
        hWnd = W.Root.hWnd
        
        hDC = CC.Surface.GetDC()	' hDC is always 0
        
        SetRect lpRect, 0, 0, W.ScaleWidth, W.ScaleHeight
        
        hTheme = OpenThemeData(hWnd, StrPtr("Button"))
    
        If hTheme <> 0 Then
            nResult = DrawThemeBackground(hTheme, hDC, 1, m_nButtonState, lpRect, lpRect)
            Call CloseThemeData(hTheme)
            bSuccess = (nResult = 0)
        End If
        
        Exit Sub
        
    ErrDraw:
        MsgBox Error
    End Sub
    The return value of "CC.Surface.GetDC()" is always 0. When I change "hDC = CC.Surface.GetDC()" to "hDC = W.Root.Widget.MeasureContext.Surface.GetDC", the control is drawn onto the parent(cWidgetForm) of the cWidgetBase.

    How to copy the drawing result from the parent(cWidgetForm) to the cWidgetBase?
    Last edited by dreammanor; Jan 29th, 2019 at 12:26 PM.

  14. #14
    PowerPoster
    Join Date
    Jun 2013
    Posts
    4,346

    Re: The 1001 questions about vbRichClient5 (2019-01-29)

    As for your last questions...

    One does not need any outside SubClassing, to change the MouseCursor on given Widgets.
    The engine (as it is) supports to change MouseCursors on the fly, using normal Cairo-Surfaces
    (which can be derived from PNG- or SVG-resources -or even dynamically constructed in an empty Surface "on the fly"
    (e.g. the dynamic MouseCursor, which reports the Widget-Position + -Dimensions in Desing-Mode is a good example for the latter).

    And a Win10-compatible Theme can be implemented without using the WinAPI as well (directly in a cThemeWin10.cls) -
    see, the Win7-compatible Themes were implemented completely with Cairo-Drawing -
    and compared to the Win7-Themes both: the (flat) Win10-Scrollbars - as well as the (flat) Win10-ButtonFaces are quite simple
    (it's basically only flat Rectangle-Filling and Rectangle-Stroking with the right Colors and LineWidths, depending on the different ButtonStates.

    Olaf

  15. #15

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5 (2019-01-29)

    Quote Originally Posted by Schmidt View Post
    One does not need any outside SubClassing, to change the MouseCursor on given Widgets.
    The engine (as it is) supports to change MouseCursors on the fly, using normal Cairo-Surfaces
    (which can be derived from PNG- or SVG-resources -or even dynamically constructed in an empty Surface "on the fly"
    (e.g. the dynamic MouseCursor, which reports the Widget-Position + -Dimensions in Desing-Mode is a good example for the latter).
    Ok, I see.

    Quote Originally Posted by Schmidt View Post
    And a Win10-compatible Theme can be implemented without using the WinAPI as well (directly in a cThemeWin10.cls) -
    see, the Win7-compatible Themes were implemented completely with Cairo-Drawing -
    and compared to the Win7-Themes both: the (flat) Win10-Scrollbars - as well as the (flat) Win10-ButtonFaces are quite simple
    (it's basically only flat Rectangle-Filling and Rectangle-Stroking with the right Colors and LineWidths, depending on the different ButtonStates.
    Using a cThemeWin10.cls is indeed the best solution and I've made some progress. Thank you, Olaf

  16. #16
    Sinecure devotee
    Join Date
    Aug 2013
    Location
    Southern Tier NY
    Posts
    5,338

    Re: The 1001 questions about vbRichClient5 (2019-01-29)

    Quote Originally Posted by dreammanor View Post
    All of my desktop tools will be developed based on RC5, and I'll have a lot of questions to ask Olaf and other RC5 experts. In order not to disturb other people, I concentrated all my questions about RC5 in this thread. Olaf and other RC5 experts could pick up some valuable questions to answer and ignore the worthless questions.

    New questions:

    None


    List of Archieved Questions:
    Code:
    Question 001: Resoved
    - The min line width of Cairo.LineTo................#2 link
    
    Question 002: Resoved
    - Use mouse-dragging to change the grid column width................#7 link
    
    Question 003: Resoved
    - Is there an event equivalent to WM_SETCURSOR in RC5?................#8link
    
    Question 004: Resoved
    - Use uxTheme to implement Win10 visual style in RC5................#11link
    For unanswered questions, once the time exceeds 2 weeks, I'll put them in the "List of Archieved Questions". The questions that have been solved will also be placed in it. If someone else wants to ask questions about RC5 in my thread, I'll also put them in the list above.
    I'm not familiar with the word sov or sove. And what it means when you sov again, i.e. resoved.

  17. #17

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5 (2019-01-29)

    Quote Originally Posted by passel View Post
    I'm not familiar with the word sov or sove. And what it means when you sov again, i.e. resoved.
    Hi passel, thank you for pointing out my spelling mistakes. I've changed "resoved" to "resolved".

  18. #18

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Question 007: Usage of the RC5.cDC

    Question 007: Usage of the RC5.cDC

    I'm testing cDC, but I haven't found an example related to cDC. I'd like to achieve the following three purposes:
    (1) Copy data from PictureBox to cDC (cDC.BltFrom)
    (2) Copy data from cDC to PictureBox (cDC.BltTo)
    (3) Draw win10 system controls to cDC using the DrawThemeBackground API, for example:
    Code:
        Dim DC as cDC
        Set DC = New_c.DC
        nResult = DrawThemeBackground(hTheme, RC5DC.hDC, 1, nState, m_Rect, m_Rect)
        '...
        '...

  19. #19

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Question 008: How to store a large number of pictures in the RC5 User-Controls?

    Question 008: How to store a large number of pictures in the RC5 User-Controls?

    In VB custom-controls, we often need to use StdPicture to store Picture data. For example, "Dim m_arrCellPictures(100,100) As StdPicture". I'd like to know how to store a lot of image data in RC5? Should I use RC5.cImageList or "Dim m_arrCellPictures(100,100) as cCairoSurface"? Thanks.

    Also, in RC5, is cCairoSurface used to replace the StdPicture object? Does a large amount of cCairoSurface take up a lot of computer memory?
    Last edited by dreammanor; Feb 2nd, 2019 at 01:56 PM.

  20. #20
    PowerPoster Arnoutdv's Avatar
    Join Date
    Oct 2013
    Posts
    3,554

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Just a question, when do you ever need 10.000 different images?

  21. #21
    PowerPoster
    Join Date
    Jun 2013
    Posts
    4,346

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by Arnoutdv View Post
    Just a question, when do you ever need 10.000 different images?
    Right, one rarely needs auch an amount of (Icon-like) Images...

    @dreammanor
    And that's exactly, where the global Cairo.ImageList comes in...

    Here you have a (globally reachable, even from different Dll-instances in your App) central Image-Resource-Cache,
    which can decouple your Icon-, or PNG- or SVG-Resource-Handling from "specific cWidgetBase- or cWidgetForm-instances.

    e.g. cWidgetForm.WidgetRoot.ImageKey will take up a normal String-Key (which points into that global ImageList-cCollection) -
    an then renders the current (Form-)BackGround-Image from that resource...

    Same thing with:
    - cWidgetForm.IconImageKey = ResourceStringKey (to set the Form-Icon)
    - cWidgetbase.MouseIconImageKey = ResourceStringKey (to set an arbitrary Cairo-Surface-based MouseCursor for any Widget)
    - cWidgetbase.ImageKey = ResourceStringKey (to render Images onto concrete Widget-Implementations, as e.g. cwCommandButton or cwImage, etc.)

    So that concept is supported and used throughout the whole stack which saddles on the RC5-BaseLibs,
    starting (at the lowest level) with the Cairo-Surface-Rendering-Primitive in cCairoContext:
    CC.RenderSurfaceContent CairoSurfaceOrImageListKey, OffsX, OffsY, ...

    The approach (IMO) brings a lot of flexibility (due to the "normal StringKey-Params) into the ImageResource-Handling
    "further down the App, or App-Helper-Dlls" without requiring "attention to detail in the Sub-Areas of a given GUI" regarding Image- or Icon-Rendering.

    All you need to ensure (in a central place at App-Startup, even encapsulatable externally within an Icon-Resource-Loader-Dll) is,
    to priorily "fill in the right images, uwing the right Keys" (into the App-wide visible Cairo.ImageList-Instance).
    That way you can later change to "better fitting, or modernized - or higher-resolution" Icon- or Image-Resources in a central place
    (without changing Widget- or Form-Code, since these will "slavishly render, what's currently behind their unchanged ImageKey").

    So - for your Grid-Cell-Implementation that means, that in your Cell-Properties-UDT you would not need a
    "PlaceHolder" of type StdPicture (or better cCairoSurface) - no, all you need is a Cell.ImageKey-Property of type String.
    And in your Cell-Rendering-Routine you would place a simple:
    If Len(CurCell.ImageKey) Then CC.RenderSurfaceContent CurCell.ImageKey, xOffs, yOffs, ...
    ... to be able to render (priorily cached) CairoSurface-Content directly from such a Resource-StringKey.

    Olaf

  22. #22

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by Arnoutdv View Post
    Just a question, when do you ever need 10.000 different images?
    Quote Originally Posted by Schmidt View Post
    Right, one rarely needs auch an amount of (Icon-like) Images...
    Whether such an amount of images are needed depends on the users of the Spread control . My Spread control needs to be fully compatible with Farpoint Spread. Farpoint Spread can set different images for each cell and also can get images from ImageList.
    Last edited by dreammanor; Feb 3rd, 2019 at 10:35 AM.

  23. #23

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by Schmidt View Post
    @dreammanor
    And that's exactly, where the global Cairo.ImageList comes in...

    Here you have a (globally reachable, even from different Dll-instances in your App) central Image-Resource-Cache,
    which can decouple your Icon-, or PNG- or SVG-Resource-Handling from "specific cWidgetBase- or cWidgetForm-instances.

    e.g. cWidgetForm.WidgetRoot.ImageKey will take up a normal String-Key (which points into that global ImageList-cCollection) -
    an then renders the current (Form-)BackGround-Image from that resource...

    Same thing with:
    - cWidgetForm.IconImageKey = ResourceStringKey (to set the Form-Icon)
    - cWidgetbase.MouseIconImageKey = ResourceStringKey (to set an arbitrary Cairo-Surface-based MouseCursor for any Widget)
    - cWidgetbase.ImageKey = ResourceStringKey (to render Images onto concrete Widget-Implementations, as e.g. cwCommandButton or cwImage, etc.)

    So that concept is supported and used throughout the whole stack which saddles on the RC5-BaseLibs,
    starting (at the lowest level) with the Cairo-Surface-Rendering-Primitive in cCairoContext:
    CC.RenderSurfaceContent CairoSurfaceOrImageListKey, OffsX, OffsY, ...

    The approach (IMO) brings a lot of flexibility (due to the "normal StringKey-Params) into the ImageResource-Handling
    "further down the App, or App-Helper-Dlls" without requiring "attention to detail in the Sub-Areas of a given GUI" regarding Image- or Icon-Rendering.

    All you need to ensure (in a central place at App-Startup, even encapsulatable externally within an Icon-Resource-Loader-Dll) is,
    to priorily "fill in the right images, uwing the right Keys" (into the App-wide visible Cairo.ImageList-Instance).
    That way you can later change to "better fitting, or modernized - or higher-resolution" Icon- or Image-Resources in a central place
    (without changing Widget- or Form-Code, since these will "slavishly render, what's currently behind their unchanged ImageKey").

    So - for your Grid-Cell-Implementation that means, that in your Cell-Properties-UDT you would not need a
    "PlaceHolder" of type StdPicture (or better cCairoSurface) - no, all you need is a Cell.ImageKey-Property of type String.
    And in your Cell-Rendering-Routine you would place a simple:
    If Len(CurCell.ImageKey) Then CC.RenderSurfaceContent CurCell.ImageKey, xOffs, yOffs, ...
    ... to be able to render (priorily cached) CairoSurface-Content directly from such a Resource-StringKey.

    Olaf
    OK, I see. I'll add the ImageKey property to the spread cells, thank you Olaf.

    In addition, the global RC5.ImageList is very nice, but there is a small problem, that is, when the WidgetForms are uninstalled, we need to manually delete the unwanted images from the RC5.ImageList, otherwise they will always occupy the computer memory.

  24. #24
    PowerPoster
    Join Date
    Jun 2013
    Posts
    4,346

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by dreammanor View Post
    ... the global RC5.ImageList is very nice, but there is a small problem, that is,
    when the WidgetForms are uninstalled, we need to manually delete the unwanted images from the RC5.ImageList,
    otherwise they will always occupy the computer memory.
    No, when I wrote "globally available" - then I meant only App-wide (as in "Windows-Process-wide").
    If the Apps Process terminates, the allocated memory of the ImageSurfaces in the Cairo.ImageList will be gone.

    A graceful cleanup of the contents of the global Cairo.ImageList will happen -
    (among other things which were cached globally in the RC5-COM-Dll-instance which was loaded into your App-Process),
    when you call New_c.CleanupRichClientDll explicitely (as e.g. recommended when you use Cairo in normal VB-Forms) -
    or the same cleanup will happen implicitely, when Cairo.WidgetForms.EnterMessageLoop is exited (as the last instruction in your Sub Main())

    Olaf

  25. #25

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by Schmidt View Post
    No, when I wrote "globally available" - then I meant only App-wide (as in "Windows-Process-wide").
    If the Apps Process terminates, the allocated memory of the ImageSurfaces in the Cairo.ImageList will be gone.

    A graceful cleanup of the contents of the global Cairo.ImageList will happen -
    (among other things which were cached globally in the RC5-COM-Dll-instance which was loaded into your App-Process),
    when you call New_c.CleanupRichClientDll explicitely (as e.g. recommended when you use Cairo in normal VB-Forms) -
    or the same cleanup will happen implicitely, when Cairo.WidgetForms.EnterMessageLoop is exited (as the last instruction in your Sub Main())

    Olaf
    Sorry, I didn't express my meaning clearly. I mean:

    Code:
    oForm As New FrmTest
    ...
    ...
    Set oForm = Nothing
    When "Set oForm = Nothing" is executed, the resources (including image data) in the oForm are all cleared. But the global RC5.ImageList just clears the resources after the Apps Process terminates.
    Last edited by dreammanor; Feb 3rd, 2019 at 08:56 PM.

  26. #26
    Frenzied Member wqweto's Avatar
    Join Date
    May 2011
    Posts
    1,491

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by dreammanor View Post
    When "Set oForm = Nothing" is executed, the resources (including image data) in the oForm are all cleared. But the global RC5.ImageList just clears the resources after the Apps Process terminates.
    Can you remove entries from RC5.ImageList? If so, you can do the cleanup manually in Form_Terminate I suppose.

    cheers,
    </wqw>

  27. #27
    Frenzied Member
    Join Date
    Apr 2012
    Posts
    1,098

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by wqweto View Post
    Can you remove entries from RC5.ImageList? I
    </wqw>
    Yes, both individually and collectively.
    If you don't know where you're going, any road will take you there...

    My VB6 love-children: Vee-Hive and Vee-Launcher

  28. #28

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by wqweto View Post
    Can you remove entries from RC5.ImageList? If so, you can do the cleanup manually in Form_Terminate I suppose.

    cheers,
    </wqw>
    Quote Originally Posted by ColinE66 View Post
    Yes, both individually and collectively.
    Yes, this is why I said we need to manually delete the unwanted images from the RC5.ImageList.

    If RC5.ImageList could add a function to easily clear the memory of the WidgetForms, such as ImageList.CleanupWidgetFormImages or ImageList.CleanupWidgetForm(Me), that would be great.
    Last edited by dreammanor; Feb 4th, 2019 at 12:23 PM.

  29. #29
    Frenzied Member
    Join Date
    Apr 2012
    Posts
    1,098

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by dreammanor View Post
    If RC5.ImageList could add a function to easily clear the memory of the WidgetForms, such as ImageList.CleanupWidgetFormImages or ImageList.CleanupWidgetForm(Me), that would be great.
    Such a feature would have to make assumptions for you which you may not like. How would such a clean-up know which image keys may be referenced by other objects (if not now, then later on)? I don't think you've thought this through: Sometimes the developer has to take responsibility for cleaning up things that are no longer wanted...
    If you don't know where you're going, any road will take you there...

    My VB6 love-children: Vee-Hive and Vee-Launcher

  30. #30

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    If RC5 allows the creation of a local ImageList, then I could clear the memory of the images in the following way:

    cfTest.cls

    Code:
    Option Explicit
    
    Private m_ImageList As cImageList
    
    Private Sub Class_Initialize()
        Set m_ImageList = New_c.ImageList        ' This line of code is invalid			
    End Sub
    
    Private Sub Class_Terminate()
        Set m_ImageList = Nothing
    End Sub

    However, RC5 does not allow the creation of a local ImageList, and RC5 has only a unique global ImageList. So I need to create a new class cMyImageList.cls based on the interface of the global Cairo.ImageList to simulate a local ImageList, for example:

    cMyImageList.cls
    Code:
    Function AddIconFromByteArray(Key As String, B() As Byte, [DesiredWidth As Long], [DesiredHeight As Long]) As cCairoSurface
    
    
    Function AddIconFromFile(Key As String, FileName As String, [DesiredWidth As Long], [DesiredHeight As Long]) As cCairoSurface
    
    Function AddIconFromResourceFile(Key As String, ResFileName As String, ResourceID As Integer, [DesiredWidth As Long], [DesiredHeight As Long]) As cCairoSurface
    
    Function AddImage(Key As String, FileNameOrByteArray, [DesiredWidth As Long], [DesiredHeight As Long], [KeepAspectRatio As Boolean], [OriginalWidth As Long], [OriginalHeight As Long]) As cCairoSurface
    
    Function AddSurface(Key As String, Srf As cCairoSurface) As cCairoSurface
    
    Property Count As Long
    
    Property Exists(Key As String) As Boolean
    
    Property Item(Key As String) As cCairoSurface
    
    Sub Remove(Key As String)
    
    ...
    
    ...
    
    ...
    In addition, I also intend to try another way, is to save the ImageKeys in a Widgets or WidgetForm into a cCollection, and in the WidgetForm_Terminate(), remove the ImageKeys in the cCollection from the Global ImageList.

    Although it's not difficult to manually clear the images memory, it would be more reasonable to put these operations in RC5.
    Last edited by dreammanor; Feb 5th, 2019 at 10:52 AM.

  31. #31
    Frenzied Member
    Join Date
    Apr 2012
    Posts
    1,098

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Yes, I've mentioned to Olaf in the past that being able to instantiate a non-global ImageList class would be useful. One potential problem with a global list is that you can get 'silently replaced' content (due to ImageKey collisions) if you aren't aware of what is already contained in that list (which could happen when, for example, using RC5 dlls written by other people).
    If you don't know where you're going, any road will take you there...

    My VB6 love-children: Vee-Hive and Vee-Launcher

  32. #32
    PowerPoster
    Join Date
    Jun 2013
    Posts
    4,346

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by dreammanor View Post
    RC5 does not allow the creation of a local ImageList, and RC5 has only a unique global ImageList.
    That's because a local ImageList does not make much sense (IMO).
    Not when we talk about shared Resource-Images and -Icons which might be needed in
    more than a single Form- or Widget-Instance during the lifetime of an Application.

    Just think this through for a moment (logically)...:
    - When the Main-Form dies (as the last Form in a GUI-App) - then the whole App is about to shutdown - and the global ImageList-content dies along with the App anyways, no special cleanup needed.
    - When a Sub-Form dies (the Main-Form - and thus the App still remaining in memory) - then you might need the cached ImageList-content again soon - so why delete it - or (even worse) later re-load&cache it in your next Sub-Form-Load again - under the same Keys you just destroyed a short while ago?

    Resources which might be used and shared "in many places" (in Sub-Forms and Sub-Widgets) are best stored in a central place once.
    And the ideal place for that is a global ImageList - and the ideal time to fill that List (with the Resource-Keys and -Values) is at App-Startup (in Sub Main() and not in some Load-Event of a Sub-Form or Widget).

    That said, what's your scenario really?
    Is it still the Image-Caching for Cell-Images of a Grid-Widget (which some Cells might render - and some not)?

    If yes, I'd think that we don't really talk about "thousands" of different images such a Grid need to render in its cells.
    We probably talk about a dozen differing (or so) images - which then might need to be rendered across a few hundred cells in the current Scroll-View
    (some cells then rendering the same Image - one of the dozen cached ones - when these Cells share the same Image-StringKey).

    So, if it's "a dozen or two" - of (usually Icon-Sized) Cell-Images the Grid needs to cache -
    the global ImageList would be a good place for that IMO (especially when multiple instance of the Grid are used, which might share the same Cell-Images and ImageKeys)

    If those "Grid-Cell-Images" come in the hundreds - and are "very special" because they are "used only locally in this current Grid-instance",
    then why not use a normal cCollection at cwMyGrid-Level to load and hold these Images (and no, there's no need to write a special cLocalImageList-Class for that).

    In your Widget-Paint-Event (which renders the Cell-Images) you could then easily do a double-check (whilst keeping the ImageStringKeys in your Cell-Props).
    Code:
      'in W_Paint of your cwMyGrid-Widget-Class:
    
      Dim oImg As cCairoSurface 'use a procedure-local Surface-Reference to buffer the ObjPtr of one of the cached ImageSurfaces, it there are any...
      If MyImgCol.Exists(W.ImageKey) Then Set oImg = MyImgCol(W.ImageKey) 'first lookup in the private ImageCol
      If oImg Is Nothing And Cairo.ImageList.Exists(W.ImageKey) Then Set oImg = Cairo.ImageList(W.ImageKey) 'second lookup in the global one
      
      If Not oImg Is Nothing then CC.RenderSurfaceContent oImg, xOffs, yOffs, ...  'finally the Cell-image-Rendering (if such an Image existed in the two Cols)
    So, the above Grid-Implementation is now capable to render either from its Class-instance-local ImageCol (looking there first) -
    and if not found there - the Widgets W.ImageKey is checked for existence in the global ImageList as a fallback.
    And no - in neither case will you need to cleanup any of the two Cols:
    - the Widget-local ImgCol will be destroyed automatically when the Widget dies
    - the global ImageList-content should not be touched - because it holds shared resource-names, which might be needed elsewhere soon

    HTH

    Olaf

  33. #33

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Hi Olaf, thank you for your detailed explanation, it is very useful to me.

    I know that developing PropertyGrid on the basis of VList is a good solution. But I'm more familiar with Spread, so I decided to develop the PropertyGrid based on my Spread control. For this, I spent 3 weeks rewriting my Spread control with RC5. Most of the work has been done now, leaving only the ComboBox control and cThemeWin10.cls not yet developed.

    So, when I was talking about the PropertyGrid, I was actually talking about my new Spread control(Pure RC5 Spread).

    What is the scenario of my RC5 Spread? In my planning, the scenario of Spread is unlimited. At least three times (three different projects), when I used Farpoint Spread, the picture of each cell was different (there were thousands of different images in a Spread control), and the datasources of the images are three: database, file , stdPicture object.

    In the above application scenario, each Spread page need display 20-100 different images, but when browsing the next page, the image resources of the previous page need to be cleared. That is to say, in Farpoint Spread and my Spread control, when setting Spread.MaxCols = 0 or Spread.MaxRows = 0, all image resources in Spread must be cleared. Although RC5.cCollection can do the job, Local-ImageList is a better choice.

    In addition, Farpoint Spread can set different images for each cell in several ways:

    Code:
    Function LoadPicture(FileName As String, PictType As PictureTypeConstants) As StdPicture
    Function LoadPictureBuffer(Buffer, Size, PictType As PictureTypeConstants) As StdPicture
    Function LoadResPicture(hInstance As Long, ResourceName As String, ResourceType As String, PictType As PictureTypeConstants) As StdPicture
    
    Function SavePicture(Picture As StdPicture, FileName As String, PictType As PictureTypeConstants) As Boolean
    Function SavePictureBuffer(Picture As StdPicture, PictType As PictureTypeConstants, Buffer, Size) As Boolean
    
    Property Get TypePictPicture() As StdPicture
    Property Set TypePictPicture(NewPicture As StdPicture)
    I need to implement the above functions in my spread control too, and also need to add an ImageKey property, all the requirements indicate that a Local-ImageList is my best choice.
    Last edited by dreammanor; Feb 7th, 2019 at 09:09 PM.

  34. #34

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: The 1001 questions about vbRichClient5 (2019-02-03)

    Quote Originally Posted by Schmidt View Post
    In your Widget-Paint-Event (which renders the Cell-Images) you could then easily do a double-check (whilst keeping the ImageStringKeys in your Cell-Props).
    Code:
      'in W_Paint of your cwMyGrid-Widget-Class:
    
      Dim oImg As cCairoSurface 'use a procedure-local Surface-Reference to buffer the ObjPtr of one of the cached ImageSurfaces, it there are any...
      If MyImgCol.Exists(W.ImageKey) Then Set oImg = MyImgCol(W.ImageKey) 'first lookup in the private ImageCol
      If oImg Is Nothing And Cairo.ImageList.Exists(W.ImageKey) Then Set oImg = Cairo.ImageList(W.ImageKey) 'second lookup in the global one
      
      If Not oImg Is Nothing then CC.RenderSurfaceContent oImg, xOffs, yOffs, ...  'finally the Cell-image-Rendering (if such an Image existed in the two Cols)
    Yes, I have adopted your solution. Now the new pure RC5 Spread control has been developed and can be rendered in Win10 style. RC5 is really a great product. Thank you, Olaf.
    Attached Images Attached Images  
    Last edited by dreammanor; Feb 15th, 2019 at 09:50 AM.

  35. #35

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Qustion 009: Why is there no cwComboBox component in vbWidgets?

    Why is there no cwComboBox component in vbWidgets?

    I know that cwDropDown and cwDropDownList can implement most of the functions of ComboBox, but if I need to implement an Editable ComboBox, I need to combine cwTextBox, cwDropDown and cwDropDownList together.

    Why doesn't vbWidgets have a separate cwComboBox? Or is there any easy way to implement an Editable ComboBox with RC5? Thanks.

  36. #36

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Qustion 010: Are there components similar to FontDialog and ColorDialog in RC5?

    Are there components similar to FontDialog and ColorDialog in RC5?

    My PropertyGrid has basically been developed. There is still a small problem to solve now. I need to select the font and color in the PropertyGrid. I don't know if there are components like the FontDialog and ColorDialog in RC5? Or is there any simple way to quickly implement the functionality of the FontDialog and ColorDialog components?

  37. #37

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: Qustion 010: Are there components similar to FontDialog and ColorDialog in RC5?

    The PropertyGrid based on my pure RC5 Spread: (The prototype comes from Heriberto Mantilla Santamaria's PropertyGrid)

    ButtonDrawMode = Always (Categorized)
    Attached Images Attached Images  
    Last edited by dreammanor; Feb 19th, 2019 at 08:30 AM.

  38. #38

    Thread Starter
    Frenzied Member
    Join Date
    Sep 2012
    Posts
    1,598

    Re: Qustion 010: Are there components similar to FontDialog and ColorDialog in RC5?

    The PropertyGrid based on my pure RC5 Spread:

    ButtonDrawMode = CurrentCell (Alphabetical)
    Attached Images Attached Images  
    Last edited by dreammanor; Feb 19th, 2019 at 08:31 AM.

  39. #39
    New Member
    Join Date
    Mar 2017
    Posts
    6

    Re: The 1001 questions about vbRichClient5 (2019-02-19)

    dreammanor could share the examples, post #34 and post #37 to study them and learn a little more about RC5. Thank you.

  40. #40
    Addicted Member
    Join Date
    Aug 2016
    Posts
    169

    Re: Qustion 010: Are there components similar to FontDialog and ColorDialog in RC5?

    Quote Originally Posted by dreammanor View Post
    The PropertyGrid based on my pure RC5 Spread: (The prototype comes from Heriberto Mantilla Santamaria's PropertyGrid)
    I just tested HMS's code, it is slow to response while scrolling. I hope your borrow Grid is not slow than that. BTW, when can you post your "Spread"?

Page 1 of 4 1234 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Featured


Click Here to Expand Forum to Full Width