I mitt program är det svårt för personer med bärbara datorer att se hela programmet som t.ex är ett schema. Jag skulle då vilja köra upp formen till Top = -2000. Då åker hela fomen upp ett snäpp och hela schemat flyttas upp så jag borde se allt. På en vanlig dator med stor skärm finns det mycket space kvar under schemat. Men, på dom bärbara datorerna visas inte hela formen, den bryter så att jag ej ser hela schemat. Det finns dock mycket utrymme nedanför formen som är det vanliga skrivbordet men den går inte att dra ner så att hela schemat syns. Vad jag förstår är 18000 maxvärdet för en form. Har sannolikt något med att någon redraw inte hanteras rätt. Det problemmet slet jag med någon månad.Storlek på en form
I koden för att flytta upp formen använder jag:
Form1.WindowState = 0
Form1.Top = -2000
Form1.Height = 18000
I koden för att återställa formen använder jag bara:
Schema.WindowState = 2
Sv: Storlek på en form
Gör istället en annan, vettigare lösning. Ett förslag är:
1. Ge schemat dynamisk storlek.
2. Visa det litet i fönstret.
3. Ha en funktion "Visa helskärm" som tar bort allt annat och bara visar schemat i hela fönstret.
Det finns många varianter på den här lösningen och det beror förstås på hur det ska användas.Sv:Storlek på en form
Problemmet är att folk i allmännhet inte förstår det här med Twips vs pixel.
Nu måste det finnas smartare sätt att lösa detta med en .ocx.
Hur som helst, läs o begrunda.
<code>
Function ResizeForm(FormName As Form, designX As Long, _
designY As Long, screenCorr As Single) As Boolean
'Så här ser koden ut i Form_Load när design upplösning är 800 * 600
'Dvs 15 Twips/pixel = 12000 * 9000 twips normal teckenstorlek TrueType
'Private Sub Form_Load()
'Dim retBool As Boolean, screenCorr As Single
'Me.Move 0, 0, 12000, 8580 'Min aktuella Form utan korrektion
' screenCorr = Screen.Width / 12000
'If screenCorr <> 1 Then
' retBool = ResizeForm(frmPPM, 12000, 9000, screenCorr)
'End If
' Me.Show
' Me.Refresh
Dim contrCount As Long, i As Long, indx As Long
Dim aControl As Control, hFont As Single
hFont = screenCorr 'Fontjusterare , här krävs experiment
FormName.Top = FormName.Top * screenCorr
FormName.Left = FormName.Left * screenCorr
FormName.Width = FormName.Width * screenCorr
FormName.Height = FormName.Height * screenCorr
contrCount = FormName.Controls.Count - 1
On Error Resume Next
' Alla Controler har inte dessa properties
For i = 0 To contrCount
Set aControl = FormName.Controls(i)
aControl.Width = aControl.Width * screenCorr
aControl.Height = aControl.Height * screenCorr
aControl.Left = aControl.Left * screenCorr
aControl.Top = aControl.Top * screenCorr
'*******************************
' Här testar du TrueType fonter, hFont skall justeras.
aControl.FontSize = aControl.FontSize * hFont
aControl.Font.Size = aControl.Font.Size * hFont
' *********
If aControl.Name = "lstFonder" Then _
aControl.Height = aControl.Height * 1.2
If aControl.Name = "panControl" Then _
aControl.Top = aControl.Top - 6
If TypeOf FormName.Controls(i) Is DBGrid Then
For indx = 0 To 6
aControl.Columns(indx).Width = _
aControl.Columns(indx).Width * screenCorr
Next ' TypeOf
End If
If TypeOf FormName.Controls(i) Is StatusBar Then
For indx = 1 To 6
aControl.Panels(indx).MinWidth = _
aControl.Panels(indx).MinWidth * screenCorr
Next 'indx
End If
If TypeOf FormName.Controls(i) Is Line Then
aControl.x1 = aControl.x1 * screenCorr
aControl.x2 = aControl.x2 * screenCorr
aControl.y1 = aControl.y1 * screenCorr
aControl.y2 = aControl.y2 * screenCorr
End If 'TypeOf
Next 'i
On Error GoTo 0
Set aControl = Nothing
ResizeForm = True
End Function
</code>