Page 2 of 2 FirstFirst 12
Results 41 to 77 of 77

Thread: Krools Common Controls - Documentation and an Update/Compile Utility

  1. #41
    Member Dragokas's Avatar
    Join Date
    Aug 2015
    Location
    Ukraine
    Posts
    740

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Looks promisingly. Looking forward to test your software =)
    BTW, I'd suggest to overlook a helper code for missing Wow64RevertWow64FsRedirection, because there are some scenarios, e.g. in ShellW, where it is not paired due to using "goto" statements. It's also good practice to store "OldValue" parameter globally to prevent "out of sync" even if above case happened.
    The same actual for all other functions like "File Exist" where I don't see redirector functions at all, which surely have to be implemented in tools like "file manager".

    Quote Originally Posted by MountainMan View Post
    I didn't know you could run VB6.EXE, even the commandline version, without elevating.
    This is a default behaviour after installation. Perhaps, you patched exe file via manifest, or set Admin mark in exe's or shortcut's properties, that's why it is always ask you for elevation.
    I don't insist that it should be "must have" feature, since I can always create a special shortcut to bypass UAC, but ability to compile as non-elevated where possible would be good manner. Also, the user should understand he can manually start your tool elevated if he knows his project require higher privileges in order to compile.
    Last edited by Dragokas; Jul 27th, 2021 at 05:40 AM.
    Malware analyst, VirusNet developer, HiJackThis+ author || my CodeBank works

  2. #42

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    When I installed VB6 I set my system to elevate VB6 each time it was run. I did that because everybody I had read (some here) say that because VB6 writes into a section of the registry that isn't accessible any more without elevation. What cases have you found it acceptable to run VB6.EXE without elevation?

    Tell me more about helper code. When I use Goto I try to ensure that I don't have any orphaned or "out of sync" variables.If you see any in my code please let me know.

  3. #43
    Member Dragokas's Avatar
    Join Date
    Aug 2015
    Location
    Ukraine
    Posts
    740

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by MountainMan View Post
    When I installed VB6 I set my system to elevate VB6 each time it was run. I did that because everybody I had read (some here) say that because VB6 writes into a section of the registry that isn't accessible any more without elevation. What cases have you found it acceptable to run VB6.EXE without elevation?
    I'll split answer in 2 use cases:
    1) Run IDE.
    Personally, I see the only reason when one needs to run IDE non-elevated - to be able debug code in the same (or very close) environment as it will be run further by user to have the opportunity to catch all those possible "access denied" errors and so. Or when you, e.g., develop an application which by design should always be run with restricted permissions to prevent cases, e.g., when you think some function should work normally both as admin / and non-admin, but it is not true (like the above case with SHFileOperation).

    In all other "design" cases, VB6 IDE is really suffered from those access denied errors when one try to add new, not yet registered components / references and so on, which write themselves to HKLM and thus required admin access. Such a way, yes, it's much convenient to work always as evelated.

    2) Compile.
    It's also convenient to compile project as elevated every time.
    But it's not always convenient for end user. Like, if one wants to integrate OCX2StdExe into another builder script which by design is not intended to run as admin.
    Surely, it's up to you, do a little change to support non-elevated compilation, or stay as is. But if second, than a logical question: why not force "requireAdministrator" instantly in the manifest of your tool...

    Quote Originally Posted by MountainMan View Post
    Tell me more about helper code. When I use Goto I try to ensure that I don't have any orphaned or "out of sync" variables.If you see any in my code please let me know.
    Well, look ShellW function.
    Code:
    j = Wow64DisableWow64FsRedirection(DisableWOW)
    Firstly, I suggest to declare DisableWOW globally. So, the system can re-use those value when needed (when you'll have more such use cases in your code, of course).
    Even, if Wow64RevertWow64FsRedirection pair will be lost, you will not lose tracking of DisableWOW value, used by system for special purposes to sync the redirector state.

    Second, you have a lot of labels for "goto", such as Leaving/DoSee0/DoSEE1. E.g., see this part:
    Code:
                ShellProcInfo.hProcess = 0
                GoTo Leaving
                End If
             AsAdmin = AdminYes
             GoTo RunElevated ' failed to run un-elevated & AsAdmin is AdminOnlyIfNeeded
          Else
             i = Err.LastDllError
             End If
          End If
       End If
    '#If (Win64 = 0) Then
    ' If hModule <> 0 Then FreeLibrary hModule
    '#End If
    If IsWOW64 Then
       're-enable redirection
       j = Wow64RevertWow64FsRedirection(DisableWOW)
       If j = 0 Then
    If those goto executed, it jump over Wow64RevertWow64FsRedirection, so the redirector remains disabled.
    I didn't learn all the code, just a quick look.

    Another potential lose of pair could happen if code trapped runtime error for some reason.

    And the last, to make code (faster?/more stable): file system redirector affects only C:\Windows\System32 (with 2 exclusions), so no need to manipulate it for other paths. Simple way is to check just for "C:\Windows"). I'm using such helper routine.
    Second reason is such Microsoft does not suggest to disable it for a long time. So, it's very important to track this moment carefully. Some functions from my practice are working incorrectly with redirector turned off (example: WinVerifyTrust).
    Malware analyst, VirusNet developer, HiJackThis+ author || my CodeBank works

  4. #44
    Addicted Member
    Join Date
    Apr 2017
    Location
    India
    Posts
    218

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by MountainMan View Post
    Nineteen years ago I had a cardiac arrest and I was dead for 10 minutes. That really makes you look at life differently. I realize that a)I am not in control like i thought I was and b)I don't know if i will be on this planet for another nano-second so I'd better make the most out of what I have.

    I have benefited a lot from this forum and this is one way I can give back. My contribution to this is tiny compared to what Krool has done. I hope you find it worthwhile...
    First of all, thanks a lot, MountainMan, for being always extremely kind, thankful and humble in your words. And, coming to your greatly useful work which I find many are getting benefited from, I also join them in thanking you sincerely, though I have not started using your work though.

    Actually, with our dear Krool's update on 13th Oct, I thought I will start using the OCX version hereafter. So, I needed to do the reverse (StdExe2Ocx) for my situation. So, I searched in the net and found this link - https://dev.xenforo.relay.cool/index...-vbccr.882529/. I saw that you have also replied therein. So, based on the same, few days back, I attempted to do the reverse (StdExe2Ocx) on taking ComCtlsDemo itself as an example.

    I just replaced## all the references in the forms (.frm files) from ComCtlsDemo to VBCCR17. Then, edited the .vbp file suitably (added object reference to VBCCR17, removed references to all user control files) and started it. It all worked correctly^^, but still you can add your own invaluable tips in confirming whether this is all that is required (or further more things need to be done). Next, I attempted a similar procedure for converting my own important project which has 50+ forms, many of Krool's controls (incl. vbFlexGrid) and SSTabEx control. It all seems to work perfectly only though I have not individually opened and checked each screen after starting the executable.

    (##) Instead of sed, I searched (and searched and searched) and found out an old yet superb freeware ('Replace Text' by Ecobyte [formerly 'BK ReplaceEM' by Bill Klein]). This gem of a freeware has very powerful features. More specifically, it did what I wanted - replace multiple search strings in multiple files - with an ever so easy configuration. The 3-point 'License Agreement' for this software brought heartwarming tears in my eyes. As far as I can remember, I have never seen a 'License Agreement' of such a nature in any freeware. Sure the writer of that license agreement must be a kind soul like you. God Bless him! God Bless you! God Bless all!

    (^^) except one line of code - Animation1.LoadRes 100 (which is in the Form_Load event of MainForm), when the executable (ComCtlsDemo.exe) is run. Curious to know why. I tried certain things like deleting and adding the resource file again, etc., but this line of code never worked. I felt like adding the .avi animation demo file to a different .res file, remove the existing .res file, add the new .res file and then see whether the aforesaid line of code works with the ocx version but then I am not familiar with .res files. So, could not afford to spend time on that.

    As of now, I did not want to write to Krool on all of the above, since I thought you yourself can definitely help me on this, so that Krool can continue to concentrate on enhancing his controls.

    I take this opportunity to once again thank, in tons, our dear Krool, for his stupendous free controls, which are a great boon to the whole world society.

    More than anything, I am extremely happy today to have written to a compassionate person like you. God is Great. All Thanks to the Lord Almighty.

    Kind Regards.

    "Gratitude is a currency that we can mint for ourselves, and spend without fear of bankruptcy." - Fred De Witt Van Amburgh

  5. #45
    Addicted Member
    Join Date
    Apr 2017
    Location
    India
    Posts
    218

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by MountainMan View Post
    I apologize for taking so long to reply. I have had some serious medical issues I had to fight through. I have just released an update to this utility which addresses your problem as well as many others. Please see post #1. ... .. .
    I just now read, this message of yours. I, for one, very well know about fighting through serious medical issues, because of my own personal experiences in that front. So, my sincerest prayers, from the very bottom of my heart, for the welfare of a great heart like yours, ever.

    By the by, I have had a very quick look into your project and I have to say the ToolTips is awesome. Thanks to you and The Trick. And, the resizing of controls' and texts' sizes, as form is resized, is fabulous. I shall explore more as and when time permits and share with you.

    My utmost prayers for the very best of healths to you at all times..... I have just now prayed so to the Lord Almighty.

    Kind regards.

  6. #46

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    As you know, I only wrote the utility to go from the OCX version to the StdEXE version. Te reason I did not go the other way was that I figured the number of developers using the StdEXE version is extremely small, especially since for the last couple of years Krool has said in his first post on the StdEXE version that this version is unstable in the IDE and that he recommended using the OCX version for development. So if you use my utility, you can develop with the OCX version and then do a commandline compile with the StdEXE version to produce an EXE file with no dependencies and without the instability of using the StdEXE version in the IDE.

    I think your approach to going the other way is fine but I suggest 2 more things need to be done. First, when you use the OCX version you do not need OLEGuids.tlb since it is effectively already compiled into VBCCRxx.OCX so you can remove it from your project references. It doesn't end up nn the compiled EXE anyway but it helps to remove some confusion to remove it.

    Second, if you want to remove the OCX dependency in the final EXE file you will need to get and use the side-by-side manifest from Krool's first post for the OCX version.

  7. #47
    Addicted Member
    Join Date
    Apr 2017
    Location
    India
    Posts
    218

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by MountainMan View Post
    ... .. . since for the last couple of years Krool has said in his first post on the StdEXE version that this version is unstable in the IDE and that he recommended using the OCX version for development. So if you use my utility, you can develop with the OCX version and then do a commandline compile with the StdEXE version to produce an EXE file with no dependencies and without the instability of using the StdEXE version in the IDE.

    I think your approach to going the other way is fine but I suggest 2 more things need to be done. First, when you use the OCX version you do not need OLEGuids.tlb since it is effectively already compiled into VBCCRxx.OCX so you can remove it from your project references. It doesn't end up in the compiled EXE anyway but it helps to remove some confusion to remove it.

    Second, if you want to remove the OCX dependency in the final EXE file you will need to get and use the side-by-side manifest from Krool's first post for the OCX version.
    Thanks for that tip on 'OLEGuids.tlb', MountainMain.

    By the by, my app has been getting deployed as Std-Exe version only in users' systems so far.

    But, for development also, I was forced to use the Std-Exe version itself (though quite unstable) so far because of the long-pending (years long) fix in the RichTextBox control. That's why I wrote that with Krool's recent update (on 13th Oct), I have switched over to using his OCX version for development. Before this fix, I needed to effect my own modifications in the RichTextBox.ctl code, every time krool released an update to VBCCR Std-Exe version.

    Well, coming to OCX version, suppose I decide to deploy the OCX version's compiled executable itself hereafter in my users' systems, using the side by side approach (i.e. without registering the ocx in the user's system). Then, kindly let me know the following:

    1. My project has to include the “VBCCR16SideBySideAndVisualStyles.res” file (since obviously I want the visual styles too along with side by side) and not the “VBCCR16SideBySide.res” file. Right? I have read the relevant portions of your ReadMe.docx file regarding this and it suggests that only. Anyway, just confirming from you again.

    2. For large projects where most or almost all of my forms contain many of krool's controls, since I deploy my ocx version's compiled executable in my user's system,
    a. Will there be any reduction in load time of my app?
    b. Will there be any reduction in memory usage of my app?
    c. Will there be increase in speed of execution of my app's various modules?

    3. If your answer to questions "a,b,c" above are 'No", then is there any other advantage at all in deploying the ocx version's executable in my user's systems? If there is absolutely no advantage at all (for sure), then finally, I will convert my project from 'ocx version' to 'std-exe' version (I may use your utility of course) so that I shall continue to deploy the std-exe version itself in my users' systems.

    Kind regards.

    N.B. Thanks for such a detailed documentation (your 'ReadMe.docx')
    Last edited by softv; Oct 22nd, 2021 at 09:32 AM.

  8. #48

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    softv,

    I am not sure why you want to use the OCX version for distribution. The main reason I wrote my utility was so that you could develop with the OCX version and then use my utiliity to make an EXE based on the StdEXE version. That way you have only the VBCCR controls you actually use included in the EXE and there is no requirement to use the OCX at all with the EXE file that is made (also means you don't need to do the side-by-side stuff with the EXE.

    If you have the side-by-side stuff included in a manifest, it is temporarily removed when the EXE is made so that the SXS is not in the final EXE.

    Unless I am missing something, this seems like a much better solution for you. You will always develop with he much more stable OCX version and be able to make the StdEXE version whenever you want and as often as you want (my utility leaves your OCX version alone).

  9. #49
    Addicted Member
    Join Date
    Apr 2017
    Location
    India
    Posts
    218

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by MountainMan View Post
    softv,

    I am not sure why you want to use the OCX version for distribution. The main reason I wrote my utility was so that you could develop with the OCX version and then use my utiliity to make an EXE based on the StdEXE version. That way you have only the VBCCR controls you actually use included in the EXE and there is no requirement to use the OCX at all with the EXE file that is made (also means you don't need to do the side-by-side stuff with the EXE.

    If you have the side-by-side stuff included in a manifest, it is temporarily removed when the EXE is made so that the SXS is not in the final EXE.

    Unless I am missing something, this seems like a much better solution for you. You will always develop with he much more stable OCX version and be able to make the StdEXE version whenever you want and as often as you want (my utility leaves your OCX version alone).
    // I am not sure why you want to use the OCX version for distribution. //
    Sorry. I did not mean to say that I am going to use the OCX version for distribution. As written already, I just wanted to know that if at all myself/anybody decides to use the ocx version, are there any advantages at all in doing so? I just wished to know the answers to my 3 questions (a, b, c) as below. That's all. Nothing else.

    For large projects where most or almost all of my forms contain many of krool's controls, if at all I/anyone decides to deploy the ocx version's compiled executable in user's system,
    a. Will there be any reduction in load time of such an app?
    b. Will there be any reduction in memory usage of such an app?
    c. Will there be increase in speed of execution of such an app's various modules?

    Hope I have made myself clear now. Thanks.


    Kind regards.

  10. #50

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    I do not believe that an EXE made with the OCX version will load faster, reduce memory consumption or increase execution speed versus running an EXE that has been made with the StdEXE version. The advantage I see for the OCX version is stability in the IDE.

    Load time with the StdEXE version should be a bit less since not all controls will necessarily be in the EXE and on today's PC's the StdEXE version is only loading one file instead of 2. On today's PC's though, I don't think the load times will be very noticeable.

    OCX will have a bit higher memory consumption since it has all the code and variables for all of the controls instead of just ones you are using in your EXE. This is likely a few MB which also is not a big deal on modern PC's.

    Since the OCX and EXE have the same code for the controls and they are both compiled I would anticipate execution speed to be the same except possibly for a slight difference in initialization.

    So I only use the OCX version for development due to its stability and then I use the StdEXE for production code.

  11. #51
    Addicted Member
    Join Date
    Apr 2017
    Location
    India
    Posts
    218

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by MountainMan View Post
    I do not believe that an EXE made with the OCX version will load faster, reduce memory consumption or increase execution speed versus running an EXE that has been made with the StdEXE version. The advantage I see for the OCX version is stability in the IDE.

    Load time with the StdEXE version should be a bit less since not all controls will necessarily be in the EXE and on today's PC's the StdEXE version is only loading one file instead of 2. On today's PC's though, I don't think the load times will be very noticeable.

    OCX will have a bit higher memory consumption since it has all the code and variables for all of the controls instead of just ones you are using in your EXE. This is likely a few MB which also is not a big deal on modern PC's.

    Since the OCX and EXE have the same code for the controls and they are both compiled I would anticipate execution speed to be the same except possibly for a slight difference in initialization.

    So I only use the OCX version for development due to its stability and then I use the StdEXE for production code.
    Thanks a TON, MountainMain, for your immediate reply with clear-cut answers. Thank you so much.

    Kind regards.

  12. #52
    New Member
    Join Date
    Sep 2021
    Posts
    8

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    hi MountainMan, after researching I found your idea of using the tool is the best, but I have the following problem, please help:
    - I copied VBCCR17.OCX to syswow64 (my computer win 10 64bit), I have registered regsvr32 successfully.
    - But when I run the project OCX2StdExe the error message "there are no VBCCRxx.OCX or VBFLXGDxx.OCX files on this PC!"
    Name:  Capture.jpg
Views: 1322
Size:  40.0 KB Name:  Capture2.jpg
Views: 1305
Size:  32.6 KB

  13. #53

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    minhtungph,

    I think I have found the problem. Until 25 Oct, there had been only one version of each of Krool's OCX controls (one for 1.7, 1 for 1.6 etc.) and my utility only looked for the one version (1.0) of VBCCR17.OCX. As of Krool's version 1.7.32 the .OCX file is now 1.1 and is registered as such. I will have to modify my code to allow for versions 1.0 and 1.1 of VBCCR17.OCX. I might be able to get to it this weekend.

  14. #54
    New Member
    Join Date
    Sep 2021
    Posts
    8

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    @MountainMan!
    thank you for all you do for the vb6 community, i will wait for your new tool, good luck

  15. #55

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Version 3.1 has been released (see post #1). It now handles the changes to the VBCCROCX17 package released on 25 Oct 2021 (and all later versions).

  16. #56

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Version 3.2 is available for download at the bottom of post #1 in this thread. It now is able to handle the newest version of VBFLXGRDxx.OCX (v1.5). As before, it handles all of the VBCCRxx.OCX versions up through the present v1.7.

  17. #57
    Lively Member
    Join Date
    Oct 2014
    Posts
    92

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Hello!

    ToolBarResFileTest.zip

    Name:  ResError.jpg
Views: 1011
Size:  21.3 KB

    Name:  ResError2.jpg
Views: 1151
Size:  33.1 KB

    Compiler Results:

    file not found: '..\ToolRes.RES'
    'C:\ActiveXs\Krool\Krool\Zip\ToolBarTest\StdEXE\ToolBarTest.vbp' One or more of the attributes are incorrect. Some or all properties are set incorrectly。

  18. #58

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    sileyoufu,

    I had an error of deleting the .RES file if it didn't contain a manifest. Since one of the main reasons for using Krool's controls is to get theming, it is not normal for the resource file to not contain a manifest. At any rate I really meant to just skip over the manifest-less .RES file but I had a line in there to delete it. That's fixed and I added some additional error handling stuff. See the attachments at the bottom of post #1.

    Also, this is similar to a test program from last year where you were referencing one of Krool's controls with a variable in your code (the Load procedure of form frmToolBarTemp.frm). If you remember, the last time you did this I advised that it would be very difficult for me to track variables in your code to figure out which control you were using so I put the Special form that you get to from the Options form for the compiler. In your case, check the Toolbar control so it will be forced to be added.

    Let me know how the new version works.

  19. #59
    Lively Member
    Join Date
    Oct 2014
    Posts
    92

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    MountainMan:
    Thank you very much for your reply and help:
    1. In the development of the project, in addition to the two types of controls (source code), VBCCR and VBFLXGRD, other files without source code may be used, such as: RC6.dll, RC6Widgets.dll, gregn6.dll (Grid ++Report 6http://www.rubylong.cn/), Png file, Svg file, manifest file...
    2. I want to put all of the above in the Res file. After compilation, it is an independent exe file. When the project is released, only an exe file needs to be released to the user. When the EXE file is running, C6.dll and RC6Widgets.dll are automatically released. gregn6.dll to the local current folder (Using OCX Files with SxS Technologyhttps://www.vbforums.com/showthread....=1#post5212143)
    3.At any rate I really meant to just skip over the manifest-less .RES file-------whether it can be used as an option, it is up to the user to decide whether to delete or keep the RES file as it is
    4. The Google translation used in the above content, if there is any unclear expression, please forgive me!
    thank you for your help!
    Last edited by smileyoufu; Dec 22nd, 2021 at 09:23 AM.

  20. #60

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    OK, so now you've got me puzzled. In order to take advantage pf themes and modern-looking forms and controls, you have to specify using Comctl32.dll v6 and as far as I know, with VB6 you either have to have an appropriate external manifest (discouraged in recent years) or essentially have that manifest information included in a resource file. You don't have a manifest file nor does your resource file have the right XML to specify Comctl32.dll v6. Yet you are wanting to use at least some of Krool's controls and although they can sort of be used without activating visual styles (through Comctl32.dll v6) the controls look and behave better if they do. Since you already have a resource file why not use LaVolpe's Manifest Cr5eatr II on this site to embed a simple manifest into your resource file so you can get the benefits of the newer controls?

    I would use Google translate to put this into your language but I don't know what that is...

  21. #61
    Lively Member
    Join Date
    Oct 2014
    Posts
    92

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Thank you very much for your reply and help
    1. This tool is very practical, very easy to use, I have been using it;
    2. According to your suggestion, I added a list to the project, and now the project can be compiled normally
    3. Now I encounter a small problem: VBCCR17.OCX version number: 1.7.45 , This file uses VBCCR1.ocx New Version: null (the project can be compiled normally)
    4.cbutUpdate button (Update .OCX References) Enabled=False, cannot be used
    5. Above, please help to solve it when it is convenient.

    In addition: My language is simplified Chinese, you can continue to use English, I will use Google Translate to view the page

    thank you very much!

    Name:  CCR17.jpg
Views: 1015
Size:  37.2 KB

  22. #62
    Fanatic Member
    Join Date
    Oct 2005
    Posts
    558

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Looks like a cool project. I downloaded it but it won't run. First, a missing form as it loads "c:\Files & File Systems\FileOps\mFileStufflite.bas"
    Then a variable that's not defined: NameIncrNoCase

    Is there another demo somewhere or any tips on how to get this thing working? It looks very interesting.

  23. #63
    Lively Member
    Join Date
    Oct 2014
    Posts
    92

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Hello MountainMan! Thank you for providing the very practical "OCX2StdExe" tool, which I have been using and has been of great help to me.

    Krool's VBCCR17.OCX version has been updated to 1.7.53

    The version of VBFLXGRD15 has been updated to VBFLXGRD16 with version number 1.6.0.

    OCX2StdExe v3.2.1 is no longer compatible with the new version of controls mentioned above. Do you have any plans to upgrade "OCX2StdExe" to adapt to VBCCR17.OCX1.7.53 and VBFLXGRD16 1.6.0 in the near future.

    Thank you very much!

  24. #64

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by smileyoufu View Post
    Hello MountainMan! Thank you for providing the very practical "OCX2StdExe" tool, which I have been using and has been of great help to me.

    Krool's VBCCR17.OCX version has been updated to 1.7.53

    The version of VBFLXGRD15 has been updated to VBFLXGRD16 with version number 1.6.0.

    OCX2StdExe v3.2.1 is no longer compatible with the new version of controls mentioned above. Do you have any plans to upgrade "OCX2StdExe" to adapt to VBCCR17.OCX1.7.53 and VBFLXGRD16 1.6.0 in the near future.

    Thank you very much!
    An update is coming within the week to address your concerns.

  25. #65
    Lively Member
    Join Date
    Oct 2014
    Posts
    92

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Hello MountainMan!

    Thank you for your prompt response and look forward to your update.

    During long-term use of the OCX2StdExe tool, the following issues were encountered:

    1.Sometimes when compiling a program, OCX2StdExe3.2.1 will prompt "XX module already exists", causing compilation failure. Even if the corresponding "XX module" is deleted, other modules will prompt "XX module already exists", causing compilation failure Reason: Under unknown circumstances, duplicate lines appeared in the '. vbp' file, resulting in compilation failure. Unable to find the reason for duplicate lines in '. vbp'. The method I am currently using is to delete duplicate lines in '. vbp' and then compile it to work properly. It is recommended to confirm if there are any duplicate lines when adding code to ". vbp" in the new version of "OCX2StdExe". If there are duplicates, do not add them (or delete the duplicate lines in ". vbp"), which can relatively solve this problem (if you want to find the reason for the duplicate lines in ". vbp", it may be more complex).

    2. I often use the "OCX2StdExe" tool to compile DLLs, but when compiling Dll files, I cannot set "component version compatibility". Even if it is the same code, without any modifications or recompilations, it cannot be set to "component version compatibility", and the "component version compatibility" prompt cannot be set. I don't know if there is any way to solve this problem.

    3. It is recommended to add the "Copy to StdEXE" function without compiling. For the convenience of running and copying code to "StdEXE" when compilation fails, for troubleshooting and debugging purposes (or manually compiling files if necessary).

    Thank you very much!

  26. #66

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Version 3.3 is now uploaded in message #1. The biggest changes are 1) it now supports VBFLexGrid v1.6 and 2) it works better with VBCCR17.

  27. #67

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    smileyoufu,

    Can you please send me a copy of a program you have that shows the problems you describe in post #65 above? Thanks.

  28. #68
    PowerPoster
    Join Date
    Jan 2020
    Posts
    3,737

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    i need a tool,your project have 10 usercontrol,i want to remove 9 usercontrol,only live listview control,how to do?

    or ,how to remove all functions for not need?remove other modules file? remove other forms?

  29. #69
    Hyperactive Member
    Join Date
    Jun 2016
    Location
    España
    Posts
    498

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by xiaoyao View Post
    i need a tool,your project have 10 usercontrol,i want to remove 9 usercontrol,only live listview control,how to do?

    or ,how to remove all functions for not need?remove other modules file? remove other forms?
    https://www.vbforums.com/showthread....use&highlight=

  30. #70
    Lively Member
    Join Date
    Oct 2014
    Posts
    92

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by MountainMan View Post
    smileyoufu,

    Can you please send me a copy of a program you have that shows the problems you describe in post #65 above? Thanks.
    Hello MountainMan!



    Thank you for your reply.

    I have been quite busy lately and rarely appear on forums. I apologize for the late response. Please forgive me!

    There are many program files and the volume after packaging is also large, making it impossible to upload the entire project. Please excuse me!

    I have provided the "VBP" file separately, please refer to the attachment for details.

    The text for duplicate lines in VBP is "frmCreateFrom2. frm", I hope it can be helpful!
    Name:  duplicate rows.jpg
Views: 425
Size:  64.6 KB
    VBP files.zip
    Last edited by smileyoufu; Sep 14th, 2023 at 05:08 AM.

  31. #71
    Lively Member
    Join Date
    Oct 2014
    Posts
    92

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Hello MountainMan!

    1. Compiling the following OCX version using OCX2StdExe v3.3 reported an error:

    2. Error message:

    1) Could not open

    2) Could not open folder

    3) Type mismatch (see the highlighted yellow line in the screenshot for details)

    3. VBCCR17.OCX version: 1.7.69; VBFLXGRD16.OCX Version: 1.6.35

    Can you help repair it? Thank you very much!

    Name:  2.jpg
Views: 406
Size:  42.8 KB
    Name:  3.jpg
Views: 410
Size:  43.0 KB
    Name:  4.jpg
Views: 413
Size:  40.1 KB
    Name:  5.jpg
Views: 408
Size:  32.4 KB

  32. #72
    Member
    Join Date
    Aug 2016
    Posts
    50

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    I'm sorry, but your tool never worked for me. I get errors that search for files with a .bax extension. Does it really work for anyone?

  33. #73
    Member
    Join Date
    Aug 2016
    Posts
    50

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    This script that I programmed in BASH for Linux, you have to copy it to the directory of your visual basic project, execute it in Linux bash and it generates a .bat with which you can later execute as many times as you want to compile the project with visual studio 6 in windows.

    Code:
    #!/bin/bash
    # Script to convert VBCCR17 OCX to StdExe
    # Run in WLinux/Kali/PengWin. Download Ubuntu or Kali from Microsoft Store and run this script.
    # Modify variable "PROJECT_VB" and "ComCtlsDemoDIR"
    # Enable the dependencies you need
    # This script create a Batch File to run in Windows and not modify XXX_*.vbp
    #
    #v1.7.0
    #
    # Create by Ulises Cuñe @ulises2k
    #
    ###MODIFY THIS###
    PROJECT_VB="StrategyTester.vbp"
    ComCtlsDemoDIR="ComCtlsDemo"
    
    #Enable Module Dependencias	TRUE=Enable / FALSE=Disable
    EnableComCtlsBase=TRUE
    EnableCommon=TRUE
    EnableVisualStyle=TRUE
    EnableVTableHandle=TRUE
    EnableISubClass=TRUE
    EnableCommonDialog=TRUE
    
    VBCCRXX=VBCCR17
    VB6EXE="c:\Archivos de programa\Microsoft Visual Studio\VB98\VB6.EXE"
    CreateBatchWindows=TRUE
    ###MODIFY THIS###
    
    ###DON'T TOUCH###
    function Check() {
    	if [ ! -d "$ComCtlsDemoDIR/Builds" ]; then
    		ComCtlsDemoDIR=$(echo $ComCtlsDemoDIR | tr '/' '\\')
    		echo "Directory $ComCtlsDemoDIR\Builds not exist. Edit this script and modify variable ComCtlsDemoDIR and run again"
    		exit 1
    	fi
    	if [ ! -f "$PROJECT_VB" ]; then
    		echo "File $PROJECT_VB not exist. Edit this script and modify variable PROJECT_VB and run again"
    		exit 2
    	fi
    }
    
    ###DON'T TOUCH###
    function Main() {
    	cp "$PROJECT_VB" "XXX_$PROJECT_VB"
    
    
    	#Add reference to OLEGuids
    	>convert_OCX2StdExe_vbp.txt
    	echo 'Reference=*\G{5A2B9220-BF07-11E6-9598-0800200C9A66}#1.0#0#C:\WINDOWS\system32\OLEGuids.tlb#OLE Guid and interface definitions' >> convert_OCX2StdExe_vbp.txt
    
    	#Delete reference to OCX
    	#sed -i -e 's/Object={AEACE989-6973-4D87-9F9D-04A487D3679D}#1.0#0;\ VBCCR11.OCX//g' "XXX_$PROJECT_VB"
    	#sed -i -e 's/Object={A1B7D620-9184-40D2-B545-9307A6E0C109}#1.0#0;\ VBCCR12.OCX//g' "XXX_$PROJECT_VB"
    	#sed -i -e 's/Object={07C05129-C2E5-483C-8237-8636C3F11E4E}#1.0#0;\ VBCCR13.OCX//g' "XXX_$PROJECT_VB"
    	#sed -i -e 's/Object={A99BDCD4-AB6D-490E-A03D-BF90764CBC6B}#1.0#0;\ VBCCR14.OCX//g' "XXX_$PROJECT_VB"
    	#sed -i -e 's/Object={43C88BE4-8BE0-4661-B06E-9A2F6AD0D267}#1.0#0;\ VBCCR15.OCX//g' "XXX_$PROJECT_VB"
    	#sed -i -e 's/Object={0DF5D14C-08DD-4806-8BE2-B59CB924CFC9}#1.0#0;\ VBCCR16.OCX//g' "XXX_$PROJECT_VB"
    	#sed -i -e 's/Object={7020C36F-09FC-41FE-B822-CDE6FBB321EB}#1.0#0;\ VBCCR17.OCX//g' "XXX_$PROJECT_VB"
    	sed -i -e 's/Object={7020C36F-09FC-41FE-B822-CDE6FBB321EB}#1.3#0;\ VBCCR17.OCX//g' "XXX_$PROJECT_VB"
    
    	NAME=$(grep "^Name=\"" $PROJECT_VB | cut -d "=" -f 2 | cut -d '"' -f 2)
    	FORM=$(grep "^Form=" $PROJECT_VB | grep -v "^IconForm=" | cut -d "=" -f 2 | tr -d "\r")
    	RESOURCEFILE=$(grep "^ResFile32=\"" $PROJECT_VB | cut -d "=" -f 2 | cut -d '"' -f 2)
    	>convert_OCX2StdExe_controls_tmp.txt
    	>convert_OCX2StdExe_batch.bat
    
    	#Replace RESOURCEFILE with XXX_$fileoriginal
    	if ! [ -z "$RESOURCEFILE" ] ; then
    		sed -i -e "s/$RESOURCEFILE/XXX_$RESOURCEFILE/g" "XXX_$PROJECT_VB"
    
    		if [ $CreateBatchWindows == TRUE ] ; then
    			echo "del /F /Q XXX_$RESOURCEFILE && copy $RESOURCEFILE XXX_$RESOURCEFILE" >> convert_OCX2StdExe_batch.bat
    		fi
    	fi
    
    	for f in $FORM ; do
    		#Convert Slash Windows to Linux
    		f=$(echo $f | tr '\\' '/')
    		ffilename=${f##*/}
    		fpath=${f%/*}
    		if [ $fpath == $ffilename ] ; then
    			cp $ffilename XXX_$ffilename
    			###MODIFY THIS###
    			#sed -i -e 's/Object\ =\ "{AEACE989-6973-4D87-9F9D-04A487D3679D}#1.0#0";\ "VBCCR11.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{A1B7D620-9184-40D2-B545-9307A6E0C109}#1.0#0";\ "VBCCR12.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{07C05129-C2E5-483C-8237-8636C3F11E4E}#1.0#0";\ "VBCCR13.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{A99BDCD4-AB6D-490E-A03D-BF90764CBC6B}#1.0#0";\ "VBCCR14.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{43C88BE4-8BE0-4661-B06E-9A2F6AD0D267}#1.0#0";\ "VBCCR15.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{0DF5D14C-08DD-4806-8BE2-B59CB924CFC9}#1.0#0";\ "VBCCR16.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{7020C36F-09FC-41FE-B822-CDE6FBB321EB}#1.0#0";\ "VBCCR17.OCX"//g' XXX_$f
    			sed -i -e 's/Object\ =\ "{7020C36F-09FC-41FE-B822-CDE6FBB321EB}#1.0#0";\ "VBCCR17.OCX"//g' XXX_$ffilename
    			sed -i -e "s/Begin\ $VBCCRXX\./Begin\ $NAME./g" XXX_$ffilename
    			sed -i -e "s/As\ $VBCCRXX\./As\ /g" XXX_$ffilename
    
    			sed -i -e "s/$ffilename/XXX_$f/g" "XXX_$PROJECT_VB"
    
    			if [ $CreateBatchWindows == TRUE ] ; then
    				echo "del /F /Q XXX_$ffilename && copy $ffilename XXX_$ffilename" >> convert_OCX2StdExe_batch.bat
    			fi
    
    		else
    			cp $f $fpath/XXX_$ffilename
    
    			###MODIFY THIS###
    			#sed -i -e 's/Object\ =\ "{AEACE989-6973-4D87-9F9D-04A487D3679D}#1.0#0";\ "VBCCR11.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{A1B7D620-9184-40D2-B545-9307A6E0C109}#1.0#0";\ "VBCCR12.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{07C05129-C2E5-483C-8237-8636C3F11E4E}#1.0#0";\ "VBCCR13.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{A99BDCD4-AB6D-490E-A03D-BF90764CBC6B}#1.0#0";\ "VBCCR14.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{43C88BE4-8BE0-4661-B06E-9A2F6AD0D267}#1.0#0";\ "VBCCR15.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{0DF5D14C-08DD-4806-8BE2-B59CB924CFC9}#1.0#0";\ "VBCCR16.OCX"//g' XXX_$f
    			#sed -i -e 's/Object\ =\ "{7020C36F-09FC-41FE-B822-CDE6FBB321EB}#1.0#0";\ "VBCCR17.OCX"//g' XXX_$f
    			sed -i -e 's/Object\ =\ "{7020C36F-09FC-41FE-B822-CDE6FBB321EB}#1.0#0";\ "VBCCR17.OCX"//g' $fpath/XXX_$ffilename
    			sed -i -e "s/Begin\ $VBCCRXX\./Begin\ $NAME./g" $fpath/XXX_$ffilename
    			sed -i -e "s/As\ $VBCCRXX\./As\ /g" $fpath/XXX_$ffilename
    
    			sed -i -e "s/$$ffilename/XXX_$$ffilename/g" $fpath/XXX_$ffilename
    
    			if [ $CreateBatchWindows == TRUE ] ; then
    				echo "del /F /Q XXX_$ffilename && copy $f $fpath/XXX_$ffilename" >> convert_OCX2StdExe_batch.bat
    			fi
    		fi
    
    
    
    		cat $f | grep "Begin $VBCCRXX." | cut -d "." -f 2 | cut -d " " -f 1 >> convert_OCX2StdExe_controls_tmp.txt
    	done
    	cat convert_OCX2StdExe_controls_tmp.txt | sort | uniq > convert_OCX2StdExe_controls.txt
    
    	#Call to function of controls used in form
    	echo "Controls used:"
    	for c in $(cat convert_OCX2StdExe_controls.txt) ; do
    		$c
    		echo $c
    	done
    
    	rm -f convert_OCX2StdExe_controls_tmp.txt
    	rm -f convert_OCX2StdExe_controls.txt
    
    	MODULE=$(grep "^Module=" $PROJECT_VB | cut -d "=" -f 2 | cut -d ";" -f 2 | tr -d "\r")
    	for m in $MODULE ; do
    		#Convert Slash Windows to Linux
    		m=$(echo $m | tr '\\' '/')
    		mfilename=${m##*/}
    		mpath=${m%/*}
    		if [ "$mfilename" != "Common.bas" ] && [ "$mfilename" != "VisualStyles.bas" ] && [ "$mfilename" != "ComCtlsBase.bas" ] && [ "$mfilename" != "VTableHandle.bas" ]; then
    			if [ $mpath == $mfilename ] ; then
    				cp $mfilename XXX_$mfilename
    
    				sed -i -e "s/As\ $VBCCRXX\./As\ /g" XXX_$mfilename
    				sed -i -e "s/$mfilename/XXX_$mfilename/g" "XXX_$PROJECT_VB"
    
    				if [ $CreateBatchWindows == TRUE ] ; then
    					echo "del /F /Q XXX_$mfilename && copy $mfilename XXX_$mfilename" >> convert_OCX2StdExe_batch.bat
    				fi
    			else
    				cp $m $mpath/XXX_$mfilename
    
    				sed -i -e "s/As\ $VBCCRXX\./As\ /g" $mpath/XXX_$mfilename
    				sed -i -e "s/$mfilename/XXX_$mfilename/g" "XXX_$PROJECT_VB"
    
    				if [ $CreateBatchWindows == TRUE ] ; then
    					echo "del /F /Q XXX_$mfilename && copy $m $mpath/XXX_$mfilename" >> convert_OCX2StdExe_batch.bat
    				fi
    
    			fi
    		fi
    
    	done
    
    	CLASS=$(grep "^Class=" $PROJECT_VB | cut -d "=" -f 2 | cut -d ";" -f 2 | tr -d "\r")
    	for c in $CLASS ; do
    		#Convert Slash Windows to Linux
    		c=$(echo $c | tr '\\' '/')
    		cfilename=${c##*/}
    		cpath=${c%/*}
    		if [ "$cfilename" != "ISubclass.cls" ] && [ "$cfilename" != "CommonDialog.cls" ]; then
    			if [ $cpath == $cfilename ] ; then
    				cp $cfilename XXX_$cfilename
    
    				sed -i -e "s/As\ $VBCCRXX\./As\ /g" XXX_$cfilename
    				sed -i -e "s/$cfilename/XXX_$cfilename/g" "XXX_$PROJECT_VB"
    
    				if [ $CreateBatchWindows == TRUE ] ; then
    					echo "del /F /Q XXX_$cfilename && copy $cfilename XXX_$cfilename" >> convert_OCX2StdExe_batch.bat
    				fi
    
    			else
    				cp $c $cpath/XXX_$cfilename
    
    				sed -i -e "s/As\ $VBCCRXX\./As\ /g" $cpath/XXX_$cfilename
    				sed -i -e "s/$cfilename/XXX_$cfilename/g" "XXX_$PROJECT_VB"
    
    				if [ $CreateBatchWindows == TRUE ] ; then
    					echo "del /F /Q XXX_$cfilename && copy $c $cpath/XXX_$cfilename" >> convert_OCX2StdExe_batch.bat
    				fi
    
    			fi
    		fi
    
    	done
    
    	if [ $EnableComCtlsBase == TRUE ] ; then
    		ComCtlsBase
    	fi
    
    	if [ $EnableCommon == TRUE ] ; then
    		Common
    	fi
    
    	if [ $EnableVisualStyle == TRUE ] ; then
    		VisualStyle
    	fi
    
    	if [ $EnableVTableHandle == TRUE ] ; then
    		VTableHandle
    	fi
    
    	if [ $EnableISubClass == TRUE ] ; then
    		ISubClass
    	fi
    
    	if [ $EnableCommonDialog == TRUE ] ; then
    		CommonDialog
    	fi
    
    	#Create a Bat for exec in Windows
    	#FART Download from https://sourceforge.net/projects/fart-it/
    	if [ $CreateBatchWindows == TRUE ] ; then
    
    		echo "if not exist \"fart.exe\" ( echo \"Donwload fart.exe from https://sourceforge.net/projects/fart-it/\" && pause && exit ) " >> convert_OCX2StdExe_batch.bat
    		echo "fart.exe XXX_*.frm \"Begin $VBCCRXX.\" \"Begin $NAME.\" " >> convert_OCX2StdExe_batch.bat
    		echo "fart.exe XXX_*.frm --remove \"$VBCCRXX.\" " >> convert_OCX2StdExe_batch.bat
    		echo "fart.exe XXX_*.bas --remove \"$VBCCRXX.\" " >> convert_OCX2StdExe_batch.bat
    		OUTDIR=$(grep "^Path32=" "XXX_$PROJECT_VB" | cut -d "=" -f 2)
    		if [ -z $OUTDIR ] ; then
    			OUTDIR='%CD%'
    		fi
    		echo "\"$VB6EXE\" /make \"XXX_$PROJECT_VB\" /outdir $OUTDIR " >> convert_OCX2StdExe_batch.bat
    		echo "if %ERRORLEVEL% NEQ 0 ( echo Compile failed. ) else ( del XXX_*.frm XXX_*.frx XXX_*.bas XXX_*.cls ) " >> convert_OCX2StdExe_batch.bat
    		echo "echo \"Finish\" " >> convert_OCX2StdExe_batch.bat
    	fi
    
    }
    
    ###### MODULE AND CLASS ######
    function ComCtlsBase() {
    	echo "Module=ComCtlsBase; $ComCtlsDemoDIR\\Builds\\ComCtlsBase.bas" >> convert_OCX2StdExe_vbp.txt
    }
    
    function Common() {
    	echo "Module=Common; $ComCtlsDemoDIR\\Common\\Common.bas" >> convert_OCX2StdExe_vbp.txt
    }
    
    function VisualStyle() {
    	echo "Module=VisualStyles; $ComCtlsDemoDIR\\Common\\VisualStyles.bas" >> convert_OCX2StdExe_vbp.txt
    }
    
    function VTableHandle() {
    	echo "Module=VTableHandle; $ComCtlsDemoDIR\\Builds\\VTableHandle.bas" >> convert_OCX2StdExe_vbp.txt
    }
    
    function ISubClass() {
    	echo "Class=ISubclass; $ComCtlsDemoDIR\\Builds\\ISubclass.cls" >> convert_OCX2StdExe_vbp.txt
    }
    
    function CommonDialog() {
    	echo "Class=CommonDialog; $ComCtlsDemoDIR\\Builds\\CommonDialog.cls" >> convert_OCX2StdExe_vbp.txt
    }
    #######CONTROLS#######
    function ImageList() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\ImageList\ImageList.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ImageList\PPImageListGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ImageList\PPImageListImages.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=ImlListImages; $ComCtlsDemoDIR\Builds\ImageList\ImlListImages.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=ImlListImage; $ComCtlsDemoDIR\Builds\ImageList\ImlListImage.cls" >> convert_OCX2StdExe_vbp.txt
    }
    
    function ListView() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\ListView\ListView.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ListView\PPListViewImageLists.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ListView\PPListViewSorting.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ListView\PPListViewGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwColumnHeader; $ComCtlsDemoDIR\Builds\ListView\LvwColumnHeader.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwColumnHeaders; $ComCtlsDemoDIR\Builds\ListView\LvwColumnHeaders.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwListItem; $ComCtlsDemoDIR\Builds\ListView\LvwListItem.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwListItems; $ComCtlsDemoDIR\Builds\ListView\LvwListItems.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwListSubItem; $ComCtlsDemoDIR\Builds\ListView\LvwListSubItem.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwListSubItems; $ComCtlsDemoDIR\Builds\ListView\LvwListSubItems.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwGroup; $ComCtlsDemoDIR\Builds\ListView\LvwGroup.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwGroups; $ComCtlsDemoDIR\Builds\ListView\LvwGroups.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwVirtualListItem; $ComCtlsDemoDIR\Builds\ListView\LvwVirtualListItem.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwVirtualListItems; $ComCtlsDemoDIR\Builds\ListView\LvwVirtualListItems.cls" >> convert_OCX2StdExe_vbp.txt
    
    	echo "Class=LvwWorkArea; $ComCtlsDemoDIR\Builds\ListView\LvwWorkArea.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LvwWorkAreas; $ComCtlsDemoDIR\Builds\ListView\LvwWorkAreas.cls" >> convert_OCX2StdExe_vbp.txt
    
    }
    
    function ProgressBar() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\ProgressBar\ProgressBar.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ProgressBar\PPProgressBarGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function RichTextBox() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\RichTextBox\RichTextBox.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "Module=RichTextBoxBase; $ComCtlsDemoDIR\Builds\RichTextBox\RichTextBoxBase.bas" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\RichTextBox\PPRichTextBoxGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function TabStrip() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\TabStrip\TabStrip.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\TabStrip\PPTabStripTabs.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\TabStrip\PPTabStripGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbsTabs; $ComCtlsDemoDIR\Builds\TabStrip\TbsTabs.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbsTab; $ComCtlsDemoDIR\Builds\TabStrip\TbsTab.cls" >> convert_OCX2StdExe_vbp.txt
    }
    
    function ToolBar() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\ToolBar\ToolBar.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbrButtons; $ComCtlsDemoDIR\Builds\ToolBar\TbrButtons.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbrButton; $ComCtlsDemoDIR\Builds\ToolBar\TbrButton.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbrButtonMenus; $ComCtlsDemoDIR\Builds\ToolBar\TbrButtonMenus.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbrButtonMenu; $ComCtlsDemoDIR\Builds\ToolBar\TbrButtonMenu.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbrButtonProperties; $ComCtlsDemoDIR\Builds\ToolBar\TbrButtonProperties.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ToolBar\PPToolBarButtons.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ToolBar\PPToolBarGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function TreeView() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\TreeView\TreeView.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TvwNodes; $ComCtlsDemoDIR\Builds\TreeView\TvwNodes.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TvwNode; $ComCtlsDemoDIR\Builds\TreeView\TvwNode.cls" >> convert_OCX2StdExe_vbp.txt
    
    	echo "Class=TvwSelectedNodes; $ComCtlsDemoDIR\Builds\TreeView\TvwSelectedNodes.cls" >> convert_OCX2StdExe_vbp.txt
    
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\TreeView\PPTreeViewGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function Animation() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\Animation\Animation.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\Animation\PPAnimationGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function CheckBoxW() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\CheckBoxW\CheckBoxW.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function ComboBoxW() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\ComboBoxW\ComboBoxW.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function CommandButtonW() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\CommandButtonW\CommandButtonW.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function CommandLink() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\CommandLink\CommandLink.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\CommandLink\PPCommandLinkGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function CoolBar() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\CoolBar\CoolBar.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=CbrBands; $ComCtlsDemoDIR\Builds\CoolBar\CbrBands.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=CbrBand; $ComCtlsDemoDIR\Builds\CoolBar\CbrBand.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\CoolBar\PPCoolBarGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\CoolBar\PPCoolBarBands.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=CbrBandProperties; $ComCtlsDemoDIR\Builds\CoolBar\CbrBandProperties.cls" >> convert_OCX2StdExe_vbp.txt
    }
    
    function DTPicker() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\DTPicker\DTPicker.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\DTPicker\PPDTPickerGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function FontCombo() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\FontCombo\FontCombo.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function FrameW() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\FrameW\FrameW.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function HotKey() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\HotKey\HotKey.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function ImageCombo() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\ImageCombo\ImageCombo.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=ImcComboItems; $ComCtlsDemoDIR\Builds\ImageCombo\ImcComboItems.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=ImcComboItem; $ComCtlsDemoDIR\Builds\ImageCombo\ImcComboItem.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ImageCombo\PPImageComboGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function IPAddress() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\IPAddress\IPAddress.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\IPAddress\PPIPAddressGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function LabelW() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\LabelW\LabelW.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function LinkLabel() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\LinkLabel\LinkLabel.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LlbLinks; $ComCtlsDemoDIR\Builds\LinkLabel\LlbLinks.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=LlbLink; $ComCtlsDemoDIR\Builds\LinkLabel\LlbLink.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\LinkLabel\PPLinkLabelGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function ListBoxW() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\ListBoxW\ListBoxW.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function MCIWnd() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\MCIWnd\MCIWnd.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function MonthView() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\MonthView\MonthView.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\MonthView\PPMonthViewGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function OptionButtonW() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\OptionButtonW\OptionButtonW.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function Pager() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\Pager\Pager.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\Pager\PPPagerGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function Slider() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\Slider\Slider.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\Slider\PPSliderGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\Slider\PPSliderAppearance.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function SpinBox() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\SpinBox\SpinBox.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\SpinBox\PPSpinBoxGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function StatusBar() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\StatusBar\StatusBar.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=SbrPanelProperties; $ComCtlsDemoDIR\Builds\StatusBar\SbrPanelProperties.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=SbrPanels; $ComCtlsDemoDIR\Builds\StatusBar\SbrPanels.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=SbrPanel; $ComCtlsDemoDIR\Builds\StatusBar\SbrPanel.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\StatusBar\PPStatusBarGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\StatusBar\PPStatusBarPanels.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function SysInfo() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\SysInfo\SysInfo.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function TabStrip() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\TabStrip\TabStrip.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\TabStrip\PPTabStripTabs.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\TabStrip\PPTabStripGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbsTabs; $ComCtlsDemoDIR\Builds\TabStrip\TbsTabs.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbsTab; $ComCtlsDemoDIR\Builds\TabStrip\TbsTab.cls" >> convert_OCX2StdExe_vbp.txt
    }
    
    function TextBoxW() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\TextBoxW\TextBoxW.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\TextBoxW\PPTextBoxWText.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function ToolBar() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\ToolBar\ToolBar.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbrButtonProperties; $ComCtlsDemoDIR\Builds\ToolBar\TbrButtonProperties.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbrButtons; $ComCtlsDemoDIR\Builds\ToolBar\TbrButtons.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbrButton; $ComCtlsDemoDIR\Builds\ToolBar\TbrButton.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbrButtonMenus; $ComCtlsDemoDIR\Builds\ToolBar\TbrButtonMenus.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TbrButtonMenu; $ComCtlsDemoDIR\Builds\ToolBar\TbrButtonMenu.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ToolBar\PPToolBarButtons.pag" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\ToolBar\PPToolBarGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function TreeView() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\TreeView\TreeView.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TvwNodes; $ComCtlsDemoDIR\Builds\TreeView\TvwNodes.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "Class=TvwNode; $ComCtlsDemoDIR\Builds\TreeView\TvwNode.cls" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\TreeView\PPTreeViewGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function UpDown() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\UpDown\UpDown.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "PropertyPage=$ComCtlsDemoDIR\Builds\UpDown\PPUpDownGeneral.pag" >> convert_OCX2StdExe_vbp.txt
    }
    
    function VirtualCombo() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\VirtualCombo\VirtualCombo.ctl" >> convert_OCX2StdExe_vbp.txt
    	echo "Module=VirtualComboBase; $ComCtlsDemoDIR\Builds\VirtualCombo\VirtualComboBase.bas" >> convert_OCX2StdExe_vbp.txt
    }
    
    function VListBox() {
    	echo "UserControl=$ComCtlsDemoDIR\Builds\VListBox\VListBox.ctl" >> convert_OCX2StdExe_vbp.txt
    }
    
    function AddToVBProject() {
    
    	#Get Number Firts Form=
    	TOTALLINES=$(wc -l "XXX_$PROJECT_VB" | cut -d " " -f 1)
    	NUMLINE=$(grep "Form=" "XXX_$PROJECT_VB" -n -m 1 -o | cut -d : -f 1)
    	NUMLINE=$(($NUMLINE-1))
    
    	head -$(($NUMLINE)) "XXX_$PROJECT_VB" > convert_OCX2StdExe_vbp.tmp
    	#Convert Linux File to Windows # CRLF endline
    	awk 'sub("$", "\r")' convert_OCX2StdExe_vbp.txt >> convert_OCX2StdExe_vbp.tmp
    	tail -$(($TOTALLINES-$NUMLINE)) "XXX_$PROJECT_VB" >> convert_OCX2StdExe_vbp.tmp
    	cp convert_OCX2StdExe_vbp.tmp "XXX_$PROJECT_VB"
    	rm -f convert_OCX2StdExe_vbp.tmp
    	rm -f convert_OCX2StdExe_vbp.txt
    
    	awk 'sub("$", "\r")' convert_OCX2StdExe_batch.bat > convert_OCX2StdExe_Windows.bat
    	rm -f convert_OCX2StdExe_batch.bat
    
    }
    
    ###DON'T TOUCH###
    #Check Directory ComCtlsDemo and File Visual Baic Project
    Check
    #Convert Slash Linux to Windows
    ComCtlsDemoDIR=$(echo $ComCtlsDemoDIR | tr '/' '\\')
    #Start Function
    Main
    AddToVBProject
    echo "Finish"
    Last edited by pepegriyo2016; Oct 3rd, 2023 at 11:14 PM.

  34. #74
    Lively Member
    Join Date
    Oct 2014
    Posts
    92

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by MountainMan View Post
    Version 3.3 is available for download at the bottom of this post. The program now handles all versions of VBCCRxx,OCX up through the current v1.7 and it handles all VBFLXGRDxx.OCX versions up through the just-released v1.6.

    ……

    This is version 3.3 of this utility.
    Hello MountainMan!

    I have been using your tool. Version 3.3, there is an error in the image below. Could you please help me fix it at your convenience? This error has been bothering me for a long time. Thank you!

    Name:  微信图片_20231128222225.jpg
Views: 207
Size:  38.3 KB

    Name:  微信图片_20231128222237.jpg
Views: 205
Size:  43.0 KB

    Name:  微信图片_20231128222246.jpg
Views: 205
Size:  43.1 KB

    Name:  微信图片_20231128222258.jpg
Views: 213
Size:  40.5 KB

  35. #75

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Smileyoufu,

    The OCX2StdExe does not have any of Krool's controls in it so you can't specify it as the VB6 project.

    You should compile OCX2StdExe normally within the VB6 IDE. Then use the .EXE file that VB6 generates to work on other programs you have that do use Krool's controls.

    MountainMan

  36. #76
    Lively Member
    Join Date
    Oct 2014
    Posts
    92

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Quote Originally Posted by MountainMan View Post
    Smileyoufu,

    The OCX2StdExe does not have any of Krool's controls in it so you can't specify it as the VB6 project.

    You should compile OCX2StdExe normally within the VB6 IDE. Then use the .EXE file that VB6 generates to work on other programs you have that do use Krool's controls.

    MountainMan
    Hello MountainMan!

    I have specially created an example in the attachment to reproduce the error. The attachment contains relevant screenshots with error information. Please help! Thank you very much!OCX2StdExe3.3ErrorTest.zip

    Name:  Error (2).jpg
Views: 157
Size:  40.9 KB

    Name:  Error (4).jpg
Views: 156
Size:  37.3 KB

    Name:  Error (5).jpg
Views: 155
Size:  36.3 KB

    Name:  Error (6).jpg
Views: 148
Size:  29.7 KB

  37. #77

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2015
    Location
    Colorado USA
    Posts
    261

    Re: Krools Common Controls - Documentation and an Update/Compile Utility

    Version 3.4 of this utility is available in post #1. The only change is that it now handles VBFlexGrid through v1.7.

Page 2 of 2 FirstFirst 12

Tags for this Thread

Posting Permissions

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



Click Here to Expand Forum to Full Width