Den OCX den ligger også på alle systemer som standard. Men bare afvis mit iøvrigt rigtige svar på dit oprindelige spørgsmål. Jeg kender ikke noget API kald der kan klare det. VH CK
CK -> Hehe, små slag! Det var da alt du behøvede at sige, så hvis du opretter et svar kan du få dine (velfortjente) point. Troede faktisk godt at man kunne give points til et svar man tidligere havde afslået, men nok om det... -Sion
kedde65: Faktisk så er dit svar ikke korrekt ! Du finder kun størrelsen (højden) af det rect der angiver hvor du kan have ikoner på skrivebordet. Det betyder at hvis du har et andet program kørende som ændrer på workarea ligesom ICQ. så vil du få et forkert resultat.
Hvis du skal finde højden af Tray(Processlinien) så kan du bare finde hwnd'et til det og aflæse dets rect
Type RECT left As Long top As Long right As Long bottom As Long End Type
Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Function GetTrayHwnd() As Long GetTrayHwnd = FindWindow("Shell_TrayWnd", "") End Function
public function GetTrayHeight() as long Dim r As RECT dim ret as long ret = GetWindowRect(GetTrayHwnd(), r) GetTrayHeight = r.bottom - r.top end function
hvis du gerne vil bruge kedde65's metode som API opkald kan du gøre flg.
Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uiParam As Long, pvParam As Any, ByVal fWinIni As Long) As Long
Type RECT left As Long top As Long right As Long bottom As Long End Type
const SPI_SETWORKAREA = 47
public func() as long dim WrkArea as RECT SystemParametersInfo SPI_SETWORKAREA, 0, wrkArea, 0 msgbox (Screen.Height/15) - (WrkArea .bottom - WrkArea .top) end function
krismort-> Det ser satme godt ud, men hvad er forskelligen på de to forslag? I øvrigt kan jeg heller ikke få det andet forslag til at virke; siger at 'SPI_SETWORKAREA' er "Invalid Outside Procedure". -Sion
Jeg har ikke testet noget af de eksempler men jeg kan se at der er en fejl under deklaratinoen af proceduren func() der skal stå function inden func()
Forskellen på de to måder er entligt ganske simpel.. Metode nummer2 altså sidste indlæg eller den som kedde65 osse har forslået, finder bare højden på arbejdssområdet af skærmen. Derefter trækker vi hele skærmens højde fra arbejdsområdet.. normalt vil du så få processliniens højde MEEEN hvis du starter eller har et program kørende der ændrer på arbejdsområdets højde så vil du ikke længerer få et korrekt resultat på¨højden af processlinien... resultatet vil simpelt blive for stort... ICQ er et af de programmer der ændrer på arbejdsområdet... men ICQ har dog ikke nogen betydning for ICQ ændrer ikke højden men feks. office olign har en lille menubar som kan sættes i toppen af skærmen og den ændrer osse på arbejdsomrpådet... Den første metode jeg foreslog er såre simpel ... det er det samme som at tage højden på en form i visual basic.. bare med API opkald... Processlinien er osse en form og jeg finder dens hwnd ved at søge på dens klassenavn "TRAYHWND" (på engelsk hedder den ikke processlinien men Tray!) Derefter overfører jeg processlinien til et rektangel der svarer til dets størrelse.. aflæser og aflæser højden ved at finde forskellen mellem mellem koordinaterne til vinduet ... delta tror jeg nok det hedder på matematisk!
Kristian -> Holy shit - det har du satme styr på! Du er nu den lykkelige ejer af 30 ekstra points! MVH Sion
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.