Avatar billede slapstick Nybegynder
01. oktober 2003 - 13:40 Der er 7 kommentarer og
1 løsning

resize igen igen igen

jeg har det her kode jeg har fået af lokespas(her fra elsperten) der resizer en kontrol i takt med man resizer programmet
men den ændrer på startstørrelsen på den kontrol der skal resizes når man resizer programmet så det blir helt underligt
har lagt en compilet version af programmet her: http://www.cartacorp.dk/test.exe
og her er et billede af hvordan programmet skal se ud når man starter det: http://www.cartacorp.dk/program.jpg
og til sidst så er der her en rar fil med både screenshot, compilet test.exe og sourcekoden: http://www.cartacorp.dk/test.rar
Avatar billede sjh Nybegynder
01. oktober 2003 - 13:55 #1
'-------------------------------- Form1 --------------------------------
Option Explicit

Private Sub Form_Load()
  WdthResize = (Me.Width / 15)
  HeightResize = (Me.Height / 15)
  HookResize Me.hwnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
  UnHookResize Me.hwnd
End Sub
'-------------------------------- Form1 --------------------------------



'-------------------------------- modResize.bas --------------------------------
Option Explicit

Private Type WINDOWPOS
        hwnd As Long
        hWndInsertAfter As Long
        x As Long
        y As Long
        cx As Long
        cy As Long
        FLAGS As Long
End Type

Private m_Wdth As Long
Private m_Height As Long

Private Const WM_WINDOWPOSCHANGING = &H46
Private Const WM_WINDOWPOSCHANGED = &H47
Private Const GWL_WNDPROC = (-4)

Private hProc As Long

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, lParam As WINDOWPOS) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Sub HookResize(ByVal lhwnd As Long)
  hProc = SetWindowLong(lhwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Public Sub UnHookResize(ByVal lhwnd As Long)
  If hProc <> 0 Then
    Call SetWindowLong(lhwnd, GWL_WNDPROC, hProc)
  End If
End Sub

Public Property Get WdthResize() As Long
  Wdth = m_Wdth
End Property

Public Property Let WdthResize(ByVal lValue As Long)
  m_Wdth = lValue
End Property

Public Property Get HeightResize() As Long
  Height = m_Height
End Property

Public Property Let HeightResize(ByVal lValue As Long)
  m_Height = lValue
End Property

Private Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, lParam As WINDOWPOS) As Long
  If Msg = WM_WINDOWPOSCHANGING Then
    If lParam.cx < m_Wdth Then lParam.cx = m_Wdth
    If lParam.cy < m_Height Then lParam.cy = m_Height
  End If
WindowProc = CallWindowProc(hProc, hwnd, Msg, wParam, lParam)
End Function
'-------------------------------- modResize.bas --------------------------------
Avatar billede sjh Nybegynder
01. oktober 2003 - 14:04 #2
den med Text1 kan gøres sådan:


Private Sub Form_Resize()
  If Me.WindowState <> 1 Then
    Text1.Move 10, 510, Me.ScaleWidth - 30, Me.ScaleHeight - 520
  End If
End Sub
Avatar billede slapstick Nybegynder
01. oktober 2003 - 14:06 #3
ok det ser seriøst ud
resizer den alle kontroller når man ændrer størrelse på programmet eller kan man sige det er enkelte kontroller?
Avatar billede sjh Nybegynder
01. oktober 2003 - 14:08 #4
nej den gør kun at det ikke ser underligt ud (modResize.bas)
Avatar billede lokespas Nybegynder
01. oktober 2003 - 14:10 #5
der var nogle fejl i Resize
som jeg har rettet

Private Sub Form_Resize()
On Error Resume Next

If frmStartWidth > Me.Width Then Me.Width = frmStartWidth
If frmStartHeight > Me.Height Then Me.Height = frmStartHeight
If WindowState = vbMinimized Then Exit Sub

x_scale = ScaleWidth / frmNewWidth
y_scale = ScaleHeight / frmNewHeight 'her omkring var en fejl

Text1.Width = x_scale * Text1.Width
Text1.Height = y_scale * Text1.Height

frmNewWidth = ScaleWidth
frmNewHeight = ScaleHeight 'her var en fejl

End Sub
Avatar billede sjh Nybegynder
01. oktober 2003 - 14:12 #6
Avatar billede martin_moth Mester
01. oktober 2003 - 14:15 #7
Hvad er dit problem - at kontrollen er for stor til start?

Det er meget simpelt at styre - du kan jo bare i formens resize-event styre .Width og .Height på din kontrol, og angive disse som funktioner af formens bredde/højde.

Form1_Resize
  MyControl.Height = Form1.Height - 10
  MyControl.Width = Form1.Width - 10
End Sub

Så er kontrollen ALTID samme størrelse som formen pånær 10 - dvs. hvis du placerer kontrollen 5 fra top og venstre kant når du designer, vil kontrollen altid have afstanden 5 ud til alle formens kanter - uanset hvad størrelse formen har.

Og så skal du nok sørge for at formen ikke kan blive FOR lille - men det har du styr på, kan jeg se...

Har ikke kikket på din kode - men ovenstående fortæller vel også tilstrækkeligt :o)
Avatar billede slapstick Nybegynder
01. oktober 2003 - 15:46 #8
sjh det spiller perfekt så her er point! :)
lokespas mange tak for hjælpen men det sovser stadig lidt så bruger sjh's løsning :)
martin det var desværre ik lige det jeg sku bruge men tak for hjælpen anyway :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester