Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    hWnd di form Excel x API AlwaysOnTop

    in eseguibile VB apro un file .xls


    Public XLAPP As New excel.Application

    FILEXLS = CommonDialog1.FileName
    XLAPP.Workbooks.Open FILEXLS

    fin qui tutto bene - vorrei che il file .xls rimanesse AlwaysOnTop anche passando il focus alla form dell'eseguibile VB - crederei di poterlo fare con queste API

    ' API constants declarations.
    Const SWP_NOSIZE = &H1
    Const SWP_NOMOVE = &H2
    Const SWP_NOREDRAW = &H8
    Const HWND_TOPMOST = -1
    Const HWND_NOTOPMOST = -2

    ' API functions declarations.
    Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
    ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, _
    ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

    e quindi questa function

    Public Function Window_SetAlwaysOnTop(hWnd As Long, AlwaysOnTop As Boolean) As Boolean
    If AlwaysOnTop Then
    Window_SetAlwaysOnTop = SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, _
    SWP_NOREDRAW Or SWP_NOSIZE Or SWP_NOMOVE)
    Else
    Window_SetAlwaysOnTop = SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, _
    SWP_NOREDRAW Or SWP_NOSIZE Or SWP_NOMOVE)
    End If
    End Function


    ma mi serve hWnd del file .xls, e non c'è verso - non trovo il modo di recuperarlo

    chi mi aiuta?
    sharkcloud's mail
    men get crazy in congregations and get wiser only one by one (g m sumner aka sting)

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da sharkcloud
    in eseguibile VB apro un file .xls
    Il linguaggio di programmazione va specificato anche nel titolo della discussione.

    Originariamente inviato da sharkcloud
    chi mi aiuta?
    sharkcloud's mail
    Va bene fornire il proprio indirizzo privato, ma esorto sempre i partecipanti alla discussione a rispondere qui in modo da condividere con tutti le proprie opinioni affinchè chi si trova nella stessa situazione, in futuro, possa ricercare una soluzione già pronta.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3

    ...acc! ho sbagliato di nuovo!!!

    oops e stra- oops!
    ho appena mandato la risposta alla tua nota.... nella tua mail personale!!! scusa sono abituata a un altro sito e faccio un po' di confusione
    comunque, sì, è vero, mi sono sbagliata - cercherò di non farlo più
    l'indirizzo di e-mail pensavo fosse una gentilezza - se non va, toglilo pure - anch'io sono d'accordo che è più bello tutto in comune
    scusa la mia inesperienza
    grazie e ciao
    men get crazy in congregations and get wiser only one by one (g m sumner aka sting)

  4. #4
    usa l'api findwindows()

    codice:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    nel primo parametro metti la stringa che c'è nella caption di excell nel secondo vbnull string
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  5. #5
    ti ringrazio, ma ahimè non mi funziona
    ho anche provato a invertire l'ordine in cui passare i parametri - mi sembrava che nella dichiarazione fossero all'inverso di come mi hai detto tu - ma ciccia.

    io ho inteso così:

    Public Sub chkAlwaysOnTop_Click()
    Dim CAPT As String
    Dim NLL As String
    Dim RES As Long

    CAPT = XLAPP.Application.ActiveWindow.Caption
    NLL = vbnull
    RES = (FindWindow(NLL, CAPT))

    VALE = hWnd(RES)
    Window_SetAlwaysOnTop VALE, chkAlwaysOnTop.Value
    End Sub


    (VALE dichiarato Public as Long nel module)
    -allora: scritto così s'incavola e mi dice

    Compile error:
    Wrong number of arguments or invalid property assignment
    riferito a
    VALE = hWnd(RES)


    per curiosità ho commentato VALE = hWnd(RES)
    tanto per vedere cosa ci va in RES - resta sempre a zero
    CAPT però è giusto la caption del form di Excel - posso anche forzarla, ma ci va dentro solo "filename" (per dire) - NON ci va
    "Microsoft Excel - filename" ...è qui che toppa?

    grazie
    men get crazy in congregations and get wiser only one by one (g m sumner aka sting)

  6. #6
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, modifica in questa maniera:
    codice:
    CAPT = XLAPP.Caption 
    RES = FindWindow(vbNullString, CAPT)
    Jupy

  7. #7
    grazie Jupy,
    ora finalmente in RES ci va a finire un long verosimile!
    ...è già un passetto avanti - ma ancora non va
    MSDN dice che la proprietà hWnd si applica all'oggetto "application", e ridicolmente usa come esempio proprio un oggetto Excel - ma non è vero!!!!!
    codificando così come di seguito (ho provato tutte e tre le linee commentate, una alla volta), per le prime due ottengo sempre un bel

    Run-Time error '438'
    Object doesn't support this property or method


    mentre con la terza mi becco un

    Compile error:
    Wrong number of arguments or invalid property assignment


    ("VALE" è dichiarato Public nel Module)
    -----------

    se dichiaro Dim VALE as Long nell'ambito della stessa Sub,
    invece cambiano un po' i messaggi di errore ma la solfa non cambia

    Public Sub chkAlwaysOnTop_Click()
    Dim CAPT As String
    Dim RES As Long

    CAPT = XLAPP.Caption
    RES = FindWindow(vbNullString, CAPT)

    'VALE = XLAPP.Application.hWnd
    'VALE = XLAPP.hWnd
    'VALE = hWnd(RES)

    Window_SetAlwaysOnTop VALE, chkAlwaysOnTop.Value
    End Sub

    grazie comunque per l'aiuto!!! ...chissà se prima o poi ce la faccio... ma a te funziona???

    men get crazy in congregations and get wiser only one by one (g m sumner aka sting)

  8. #8
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    no, io non ho provato.
    ma tu hai fatto in questa maniera?:
    codice:
    Public Sub chkAlwaysOnTop_Click() 
       Dim CAPT As String 
       Dim RES As Long 
    
       CAPT = XLAPP.Caption 
       RES = FindWindow(vbNullString, CAPT) 
    
       Window_SetAlwaysOnTop RES, chkAlwaysOnTop.Value 
    End Sub
    Jupy

  9. #9
    sì, l'ho fatto e adesso all'apertura QUALCHE VOLTA (non sempre) per un po' sta on top - non ALWAYS, però... e non riesco a capire...
    certe volte posso cliccare in qualunque altra area e resta su per cinque o sei volte, o dieci... poi va dietro, GRR.. altre volte alla prima volta che clicco sulla form dietro (quella dell'eseguibile), sparisce immediatamente con una pernacchia - no, la pernacchia la sento io nella mia mente... è frustrante...

    sto cercando di capire dove mettere i debugging per beccare che cosa fa - secondo me lo sbaglio che faccio è che devo trovare il modo di chiamare quella sub OGNI VOLTA che succede qualunque cosa - ma cosa faccio? faccio TUTTO dentro a Public Sub chkAlwaysOnTop_Click???

    comunque grazie!
    men get crazy in congregations and get wiser only one by one (g m sumner aka sting)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.