Announcement

Collapse
No announcement yet.

How to hide DDT initially

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Semen Matusovski
    replied
    Eric --
    I reconstructed a program, which updates a release through Internet.
    To be able to replace itself, "updater" creates and restarts own copy.

    In WM_INITDIALOG "updater"
    1. Tests name of exe and restarts, if necessary (should be absolutelly invisible).
    2. Retrieves some settings from regisry, calculates CRC of files to compare then with description on Web-server.
    Enough long - on my PC - about 2-3 sec, but on customers PCes could be up to 10 sec.
    During this time I plan to show independent "Welcome".

    Of course, I can do all before Dialog Show, but I don't like to have global variables or to retrieve something again.

    ------------------
    E-MAIL: [email protected]

    Leave a comment:


  • Scott Turchin
    replied
    I've done the height-Width at zero and you still get a pixel on teh screen and the taskbar shows a box...so if hiding it is the intention it doesn't work




    ------------------
    Scott

    Leave a comment:


  • Eric Pearson
    replied
    > Is there another than Dialog Show way to set "DDT" callback ?

    You're right, I forgot that DIALOG SHOW specifies the callback function, so you have to use it.

    Is this your program's main dialog? And if so, is it important to keep the Task Bar button from appearing too?

    Have you tried creating a dialog with a height and/or width of zero?

    -- Eric

    ------------------
    Perfect Sync Development Tools
    Perfect Sync Web Site
    Contact Us: mailto:[email protected][email protected]</A>

    Leave a comment:


  • Semen Matusovski
    replied
    Edwin --
    Yes, your way is workable, but this is exactly workaround.
    Of course, can be used another events
    Code:
       #Compile Exe
       Option Explicit
       #Include "win32api.inc"
       CallBack Function DlgProc As Long
          Static MayShow As Long
          Select Case CbMsg
             Case %WM_NCPAINT ' %WM_ERASEBKGND ' %WM_PAINT ' %WM_ERASEBKGND '
                Incr MayShow: If MayShow = 1 Then ShowWindow CbHndl, %SW_HIDE
             Case %WM_TIMER: ShowWindow CbHndl, %SW_SHOW: KillTimer CbHndl, 1
          End Select
       End Function
    
       Function PbMain
          Local hDlg As Long
          Dialog New 0, "DDT Skeleton",,, 240, 180 To hDlg
          SetTimer hDlg, 1, 3000, ByVal 0
          Dialog Show Modal hDlg Call DlgProc
       End Function
    But I don't understand, why it's necessary to search workaround.
    If I set SW_HIDE before Dialog Show, why engine "thinks" that it's more clever than a developer ?
    It's possible to understand default WS_VISIBLE, but when styles or state are defined explicity - sorry ...


    Eric --
    I prefer to have PbMain from two statements Dialog New/Dialog Show and to do all in callback.
    Is there another than Dialog Show way to set "DDT" callback ?
    I am ready to use Dialog Hide Modal hDlg Call DlgProc, but can't find this statement in PB manual

    ------------------
    E-MAIL: [email protected]

    Leave a comment:


  • Eric Pearson
    replied
    Semen --

    Maybe I am missing something, but if you don't want your dialog to "show", why are you using DIALOG SHOW?

    The fact that the DIALOG NEW function returns a handle to the dialog must mean that the dialog is being created by that step, right? Why not just avoid using DIALOG SHOW until you want the dialog to become visible? Use a loop with DIALOG DOEVENTS and it seems like it should work exactly like a "normal" hidden window.

    -- Eric


    ------------------
    Perfect Sync Development Tools
    Perfect Sync Web Site
    Contact Us: mailto:[email protected][email protected]</A>

    Leave a comment:


  • Edwin Knoppert
    replied
    This was the only thing i could make it to work.
    Still, the current window loses focus..

    Code:
    #Compile Exe
     
    Option Explicit
     
    #include "win32api.inc"
     
    CallBack Function DlgProc() As Long
     
        Static MayShow As Long
        Dim pWP As WINDOWPOS Ptr
     
        Select Case CbMsg
        Case %WM_INITDIALOG
     
            MayShow = 0
     
        Case %WM_WINDOWPOSCHANGING, %WM_WINDOWPOSCHANGED
     
            If MayShow = 0 Then
     
                pWP = CbLparam
                @pWP.Flags = @pWP.Flags And Not %SWP_SHOWWINDOW
                @pWP.Flags = @pWP.Flags And Not %SWP_NOACTIVATE
                @pWP.Flags = @pWP.Flags And Not %SWP_NOZORDER
                @pWP.Flags = @pWP.Flags Or %SWP_HIDEWINDOW
     
            End If
     
        Case 10000
     
            Sleep 2000
            MayShow = 1
     
            ShowWindow CbHndl, %SW_SHOW
     
        End Select
     
    End Function
     
    Function WinMain ( ByVal hCurInstance  As Long, _
                       ByVal hPrevInstance As Long, _
                       lpszCmdLine         As Asciiz Ptr, _
                       ByVal nCmdShow      As Long ) As Long
     
        Dim a       As Long
        Dim hDlg    As Long
        Dim Result  As Long
     
        Dialog New 0, "DDT Skeleton",,, 240, 180 _
            ,  %WS_OVERLAPPED _
            Or %WS_SYSMENU _
            Or %WS_MINIMIZEBOX _
            Or %WS_MAXIMIZEBOX _
            Or %WS_THICKFRAME _
            Or %WS_CLIPSIBLINGS _
            Or %WS_CLIPCHILDREN _
            To hDlg
     
        If hDlg = 0 Then Exit Function
     
    '    Dialog Show Modeless hDlg Call DlgProc To Result
     
        PostMessage hDlg, 10000, 0, 0
     
        Dialog Show Modal hDlg Call DlgProc To Result
     
        Function = 1
     
    End Function
    ------------------

    Leave a comment:


  • Aldo Cavini
    replied
    Semen,

    may be this one message will not be deleted...

    I found you can minimize the DDT inside the WM_INITDIALOG section (ShowWindow CBHNDL, %SW_MINIMIZE). This works, without flashes - Don't know if it is sufficient for you...

    Aldo

    ------------------

    Leave a comment:


  • Semen Matusovski
    replied
    Aldo --
    I see, you deleted your suggestion.

    Edwin --
    Hooks are not a problem (I can detect even WM_NCCREATE), but can't understand how this way can prevent ShowWindow, which is inside "Dialog Show Modal".
    Further I can hide a window without any problems, but flashes.

    Just now typically I use a property, that Dialog Show Modal resizes a window, if there is %WS_CAPTION in Dialog New.
    WM_SIZE (as I understand) occurs after ShowWindow, which does Dialog Show Modal, but before processing next message from query.
    Can't say that this is a good method (unlike workable).


    [This message has been edited by Semen Matusovski (edited April 12, 2001).]

    Leave a comment:


  • Edwin Knoppert
    replied
    Semen,

    Global Hook?

    Or LockWindowUpdate GetDesktophWnd()
    Flashes a little on release.

    ------------------

    Leave a comment:


  • Lance Edmonds
    replied
    Thanks for the info, but I'm not sure what a P2B motherboard is... Mine is a 5EH with an AMD/k266 socket 7. Plenty of folks with this board seem to have problems according to a search of the Matrox forums, however, many seem to have got it going too. After updating the BIOS 3 times, Win2K crashes at the very last 'bar' of the startup screen progress bar, but it reboots so fast I cant read the message.

    I'm going to have to video the screen and pause the tape to read the message!



    ------------------
    Lance
    PowerBASIC Support
    mailto:[email protected][email protected]</A>

    Leave a comment:


  • Eddy Van Esch
    replied
    Originally posted by Lance Edmonds:
    I've been working to get my G450 dual-head going (it hates my motherboard for some as-yet unknown reason)
    Lance,
    I had a problem also with G450 dual-head graphics card. It seems that this
    does NOT work with P2B motherboards. You need a P3B motherboard.

    Kind regards
    Eddy
    [email protected]


    ------------------
    [email protected]

    Leave a comment:


  • Wayne Diamond
    replied
    Not sure if this is what you're after, but what about Steve Hutchesson's 1-byte-patch made to a compiled executable that made console apps run invisibly? Not sure if it'll work on GUI apps or not

    Best of luck,
    Wayne



    ------------------

    Leave a comment:


  • Lance Edmonds
    replied
    If you created a new Window (dialog) Class, then that would very likely work, but you'd not be able to use DDT, so you could just create a SDK or RC-style dialog without the %WS_VISIBLE...


    ------------------
    Lance
    PowerBASIC Support
    mailto:[email protected][email protected]</A>

    Leave a comment:


  • Scott Turchin
    replied
    I did everything in my power to make DDT invisible with no success, even doing the show state after the Dialog Show puts a trace on the screen so that SOMETHING showed, however brief. This is especially true on slower PC's as well where the video card may only be 512 or 1mb...

    Sorry Semen, was just a suggestion, that's the only way I could get it to work...
    I do suppose if you did that that you could use DDT on it after the fact, I've had SOME success mixing and matching although I doubt it's recommended...

    Perhaps if you created your own class? Is that possible? Using the CreatwindowEx as the class?
    That gets beyond me however.....


    Scott

    ------------------
    Scott

    Leave a comment:


  • Lance Edmonds
    replied
    The problem with displaying a dialog "outside" of the desktop at an arbitary location is that it may actually be visible in a multi-monitor PC!

    I've been working to get my G450 dual-head going (it hates my motherboard for some as-yet unknown reason), and hopefully I'll be able to figure out a way of enumerating all desktop positions that would help in this situation.

    Maybe someone has done this before me? I'd hate to have to reinvent the wheel here...

    On another note, it should be possible to use DIALOG SHOW STATE immediately after a DIALOG SHOW MODELESS statement...

    Alternatively, Post a message to the dialog (%WM_USER + 999&, etc), and respond in the dialog callback to set the visibility with DIALOG SHOW STATE. That way, it can be called "on demand" just by using PostMessage(), SendMessage(), DIALOG SEND, etc.

    ?


    ------------------
    Lance
    PowerBASIC Support
    mailto:[email protected][email protected]</A>

    Leave a comment:


  • Bern Ertl
    replied
    Semen,

    You can use:

    Code:
    DIALOG SET LOC hDlg, 5000, 5000
    between the DIALOG NEW & DIALOG SHOW.

    Put another DIALOG SET LOC in the WM_INITDIALOG when you are ready.

    That's the best solution that I can offer...



    ------------------
    Bernard Ertl

    Leave a comment:


  • Semen Matusovski
    replied
    Scott --
    I am about exactly DDT.
    Michael --
    initial state is not important
    Code:
       #Compile Exe
       #Dim All
       #Register None
       #Include "Win32Api.Inc"
       
       Function PbMain
          Local hDlg As Long
          Dialog New 0, "Modal 1..",,, 200, 50, %WS_CAPTION Or %WS_SYSMENU To hDlg
          ShowWindow hDlg, 1: Sleep 3000: ShowWindow hDlg, 0: Sleep 3000
          Dialog Show Modal hDlg
       End Function
    or
    Code:
       #Compile Exe
       #Dim All
       #Register None
       #Include "Win32Api.Inc"
       
       Function PbMain
          Local hDlg As Long
          Dialog New 0, "Modal 1..",,, 200, 50, %WS_CAPTION Or %WS_SYSMENU To hDlg
          Dialog Show State hDlg, %SW_HIDE ' <-- "hide"      
          Dialog Show Modal hDlg
       End Function
    Bern --
    1) Not comfortable (I simply want to make same actions in WM_INITDIALOG before normal appearence).
    2) DDT is too "clever"
    Code:
       #Compile Exe
       #Dim All
       #Register None
       #Include "Win32Api.Inc"
       
       Function PbMain
          Local hDlg As Long
          Dialog New 0, "Modal 1..", 5000, 5000, 100, 100, %WS_CAPTION Or %WS_SYSMENU To hDlg   
          Dialog Show Modal hDlg
       End Function
    Alone, what I want - appearence similar SDK-windows : after a command "fas" (ShowWindow ..., %SW_SHOW)
    ------------------
    E-MAIL: [email protected]



    [This message has been edited by Semen Matusovski (edited April 11, 2001).]

    Leave a comment:


  • Bern Ertl
    replied
    Semen, what about creating the dialog outside of the visible
    desktop area?



    ------------------
    Bernard Ertl

    Leave a comment:


  • Michael Mattias
    replied
    Haven't tried this myself, but what if you make the style like..
    Code:
    DIALOG NEW.......   %WS_CHILD OR %WS_CAPTION [b]AND NOT %WS_VISIBLE[/b]...
    MCM

    Leave a comment:


  • Scott Turchin
    replied
    Don't know if this helps but this is the sample I think you gave me for making an invisible window...

    My assumption is that it will have to be modeless and do not do Dialog Show ???

    Dialog Show should have an option on it to add the SW_HIDE initially, or is that a windows thing?


    Code:
    hWnd = CreateWindowEx(0,szClassName, _
                          "", _
                          %WS_POPUP Or %WS_DLGFRAME,_
                          %CW_USEDEFAULT, _
                          %CW_USEDEFAULT, _
                          %CW_USEDEFAULT, _
                          %CW_USEDEFAULT, _
                          hParent, _ '<-- assign to a parent window
                          %NULL, _
                          hInstance, _
                          ByVal %NULL)
    
    'ShowWindow hWnd, iCmdShow
    UpdateWindow hWnd
    ------------------
    Scott

    Leave a comment:

Working...
X