Avatar billede celal Nybegynder
30. april 2003 - 15:55 Der er 9 kommentarer og
1 løsning

Placering af Childform på en MDIform

Jeg har en Childform (helpbox) i en MDIform. hvergang helpbox bliver flyttet skal der undersøges om helpbox´s nye placering er inden for en bestemt placering.Hvis den er det, skal placeringen for helpbox ændres, så den bliver placeret helt til venstre på MDI formen, ellers skal der ikke ske noget med placeringen.

hvor og hvad kan jeg bruge til at undersøge ændring på en forms placering? I må meget gerne skrive noget kode, for jeg er lidt ny i Visual Basic.
Avatar billede mortrr Praktikant
30. april 2003 - 17:40 #1
Hvis du gerne vil undgå at skulle lave noget alt for besværlig kodning, med subclassing af vinduer og lign, så kunne man bare placere en timer på formularen, som trigger fx hvert halve sekund (eller mindre), som flytter MDI'en. Det vil ikke belaste cpu'en når formularen ikke flyttes.

Dim SaveLeft As Long, SaveTop As Long
Sub PositionMDI()
    If Form1.Left <> SaveLeft Or Form1.Top <> SaveTop Then
        MDIForm1.Left = Form1.Left - MDIForm1.Width
        MDIForm1.Top = Form1.Top
        SaveLeft = Form1.Left
        SaveTop = Form1.Top
    End If
End Sub
Private Sub Form_Load()
    MDIForm1.Show
    PositionMDI
    Timer1.Interval = 200
    Timer1.Enabled = True
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Unload MDIForm1
End Sub

Private Sub Timer1_Timer()
    PositionMDI
End Sub
Avatar billede celal Nybegynder
01. maj 2003 - 15:42 #2
okay, prøver det lige engang, så vender jeg tilbage
Avatar billede celal Nybegynder
01. maj 2003 - 16:32 #3
Hvor skal jeg smide koden hen?
Avatar billede celal Nybegynder
01. maj 2003 - 16:39 #4
Kan du ikke forklrae mig hvad der præsis sker i koden? og hvor og på hvilken form jeg smide koden ind på?
Avatar billede mortrr Praktikant
01. maj 2003 - 17:09 #5
Den viste kode er et eksempel på hvordan koden kunne se ud, men ikke det du er ude efter. Det var mere princippet i det.

Men du skrev jo sådan set at du var ny i vb, så jeg må hellere lave en mere præcis en, som svarer mere til det du er ude efter.

Private Sub MDIForm_Load()
    Form1.Left = 0
    Form1.Width = 3000
    Form1.Height = 2000
    Form1.Show
    Timer1.Interval = 500
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    If Form1.Left > 0 And Form1.Left < 1000 And Form1.Top > 0 And Form1.Top < 1000 Then
      Form1.Left = 0
      Form1.Top = 0
    End If
End Sub

En MDIForm med en Timer og en Form. Hvert halve sekund kigger den på Form1's position, og hvis den er i nærheden af øverste venstre hjørne, flyttes den til 0,0
Avatar billede celal Nybegynder
05. maj 2003 - 14:24 #6
Jeg har lagt fælgende kode ind på MDIform:

Private Sub Form_Load()
       
    frmHelpBox.Left = 0
    frmHelpBox.Width = 3000
    frmHelpBox.Height = 2000
    frmHelpBox.Show
    Timer1.Interval = 500
    Timer1.Enabled = True

End Sub

Private Sub Timer1_Timer()
   
    If frmHelpBox.Left < 1000 Then
      frmHelpBox.Left = 0
      frmHelpBox.Top = 0
    End If

End Sub

Men det virker ikke. Når jeg flytte formen til left under 1000 sker deer ikke noget. Hvad gøre jeg galt? jeg tror slet ikke at Timer1_Timer() bliver aktiveret på noget tidspunkt...
Avatar billede celal Nybegynder
05. maj 2003 - 15:30 #7
Det skal lige sisges at mit program starter med en splash screen, som så lukker MDIformen op, kan det have noget med det at gøre?

Private Sub Form_Load()
    frmSplash.Show
    lblVersion.Caption = "Version " & App.Major & "." & App.Minor & "." & App.Revision
    lblProductName.Caption = App.Title
   
    Dim Success As String
 
    WindowState = vbNormal
 
    Left = (Screen.Width - Width) / 2
    Top = (Screen.Height - Height) / 2
 
  Dim PauseTime, Start, Finish, TotalTime
  PauseTime = 5  ' Set duration.
  Start = Timer  ' Set start time.
 
  frmMDI.Show
  Load frmMDI
  frmTreeView.Show
  'frmTreeView.Top = 0
  frmTreeView.Width = 3000
  'frmTreeView.Left = 0
  frmTreeView.Height = 9000
  frmHelpBox.Show
  'frmHelpBox.Top = 0
  frmHelpBox.Width = 3000
  'frmHelpBox.Left = 12300
  frmHelpBox.Height = 9000
   
      Unload Me

End Sub


Hvad kan der være galt?
Avatar billede celal Nybegynder
05. maj 2003 - 16:30 #8
har nu fundet ud af at form_load aldrig blev aktiveret, så har lavet den rigtige MDIForm_Load, som bliver aktiveret:

Private Sub MDIForm_Load()

    frmMDI.Show
    'PositionMDI
    frmTreeView.Show
  frmTreeView.Top = 0
  frmTreeView.Width = 3000
  frmTreeView.Left = 0
  frmTreeView.Height = 9000
  frmHelpBox.Show
  frmHelpBox.Top = 0
  frmHelpBox.Width = 3000
  frmHelpBox.Left = 12300
  frmHelpBox.Height = 9000
   
    Timer1.Interval = 500
    Timer1.Enabled = True
   
End Sub



Men nu får jeg en anden fejl, "Compilor error, Variable not defined"
Den varialble som den ikke kan finde er "Timer1". Hvordan erklære jeg Timer1? bliver det ikke erklæret automatisk, så jeg har lavet funktionen  Private Sub Timer1_Timer() ??
Avatar billede mortrr Praktikant
05. maj 2003 - 16:38 #9
Timer1 er en Timer som du skal sætte ind på MDI-formularen.
Avatar billede celal Nybegynder
16. maj 2003 - 22:37 #10
okay, tak for det....
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