/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Resizeable Forms
Fra : Peter Lykkegaard


Dato : 02-09-02 22:10

Hejsa - Nogen hints til hvordan man kommer i gang med reizeables forms for
alvor
Jeg kan uden de store sværdslag lave en enkel formular med en datagrid der
følger efter bunden/venstre side
Men det begynder at bliver lidt tricky når jeg har flere controller der skal
resizes på hver deres måde
Ex, jeg har følgende på en formular

En række knapper der skal følge højre side
En grid der skal have fast højde men skalere i bredden
En grid der skal skalere i højde + bredde
En label med fast højde/bredde der skal følge bunden
En text control med fast højde der skal følge bunden og skalere i bredden

De to grids fungerer egentlig udmærket, med nogle korrektioner får minimum
højde
Men resten ligner noget der er løgn

Jeg bruger (forsøger at bruge) controllens Move metode sammen med
Formularens ScaleWidth/-Height/ - etc

Hints/links modtages med glæde
På forhånd tak

mvh/Peter Lykkegaard



 
 
preben nielsen (03-09-2002)
Kommentar
Fra : preben nielsen


Dato : 03-09-02 18:18


"Peter Lykkegaard" <polonline@hotmail.com> skrev i en meddelelse
news:3d73d437$0$27662$edfadb0f@dspool01.news.tele.dk...
> Hejsa - Nogen hints til hvordan man kommer i gang med reizeables
forms for

> Jeg kan uden de store sværdslag lave en enkel formular med en
datagrid der
> følger efter bunden/venstre side
> Men det begynder at bliver lidt tricky når jeg har flere
controller der skal
> resizes på hver deres måde
> Ex, jeg har følgende på en formular
>
> En række knapper der skal følge højre side
> En grid der skal have fast højde men skalere i bredden
> En grid der skal skalere i højde + bredde
> En label med fast højde/bredde der skal følge bunden
> En text control med fast højde der skal følge bunden og skalere
i bredden
>
> De to grids fungerer egentlig udmærket, med nogle korrektioner
får minimum
> højde
> Men resten ligner noget der er løgn

Det er da ellers ikke så svært

Et forslag til forenkling af koden er at placere controls, som
skal flyttes sammen på en frame (evt. usynlig) - f.eks. dine
knapper i højre side. Så slipper du for at lave kode som placerer
hver knap - du skal blot placere din frame.

> Jeg bruger (forsøger at bruge) controllens Move metode sammen
med
> Formularens ScaleWidth/-Height/ - etc

Smid mig evt. din form og jeg skal gerne kigge på det....

> Hints/links modtages med glæde

Du ville nok kunne lide at bruge vb.Net hvor faciliteter såsom
disse er standard.


--
/\ preben nielsen
\/\ prel@post.tele.dk



Peter Lykkegaard (04-09-2002)
Kommentar
Fra : Peter Lykkegaard


Dato : 04-09-02 15:32

Som svar på skriblerier nedfældet af preben nielsen :

> "Peter Lykkegaard" <polonline@hotmail.com> skrev i en meddelelse
> news:3d73d437$0$27662$edfadb0f@dspool01.news.tele.dk...
>> Hejsa - Nogen hints til hvordan man kommer i gang med reizeables
>> forms
>
> Det er da ellers ikke så svært

*G*

> Et forslag til forenkling af koden er at placere controls, som
> skal flyttes sammen på en frame (evt. usynlig) - f.eks. dine
> knapper i højre side. Så slipper du for at lave kode som placerer
> hver knap - du skal blot placere din frame.

Jeg havde overvejet om det var vejen frem
Der er en "top/left limit" der har drillet en del
>
> Du ville nok kunne lide at bruge vb.Net hvor faciliteter såsom
> disse er standard.

Jep, men det er ikke en option - endnu

Jeg fandt nogle klasser der hjælper lidt med det jeg gerne vil
http://www.freevbcode.com/ShowCode.Asp?ID=4332

mvh/Peter Lykkegaard



preben nielsen (04-09-2002)
Kommentar
Fra : preben nielsen


Dato : 04-09-02 16:14


"Peter Lykkegaard" <polonline@hot.mail.com> skrev i en meddelelse
news:0Nod9.81$g26.1521@news.get2net.dk...

> Jeg havde overvejet om det var vejen frem
> Der er en "top/left limit" der har drillet en del

Hvad er problemet med dem egentlig ? Eksempel ?

-prel



Peter Lykkegaard (04-09-2002)
Kommentar
Fra : Peter Lykkegaard


Dato : 04-09-02 16:27

Som svar på skriblerier nedfældet af preben nielsen :

> "Peter Lykkegaard" <polonline@hot.mail.com> skrev i en meddelelse
> news:0Nod9.81$g26.1521@news.get2net.dk...
>
>> Jeg havde overvejet om det var vejen frem
>> Der er en "top/left limit" der har drillet en del
>
> Hvad er problemet med dem egentlig ? Eksempel ?
>
Et stk datagrid der skal have fast højde og skalere i bredden med en minimum
længde
Virker fint med Control.Move etc

Nedenunder et stk datagrid der skal skalere i højden og bredden med en
minimum længde/højde Virker nogenlunde med Control.Move etc
Får nogle problemer når jeg skalere formen til lille højde

Neden under igen en label- og en textcontrol der skal klæbe til bunden, og
skalere i bredden
Når skalere formen ned til en limit skal de to controller ikke følge med
bunden længere
Virker ikke
Her kunne man placere begge control i en frame

Derudover har jeg en række knapper øverst der skal klæbe tilhøjre, og nogle
ekstra text controller øverst der bare skal være as is

En længere smøre
Jeg havde ikke lige tålmodighed til at fedte med det

Med anchor klassen jeg nævnede i tidligere indlæg så spiller det bare max,
og de tog ingen tid at sætte det op

Btw kan man begrænse hvor meget man kan skalere en form (ned)?

mvh/Peter Lykkegaard



Tomas Christiansen (04-09-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 04-09-02 20:52

Peter Lykkegaard skrev:
> Btw kan man begrænse hvor meget man kan skalere en form (ned)?

Kan du ikke styre det ved resize events?

If Size < Smallest Then Size = Smallest

-------
Tomas


Claus H (06-09-2002)
Kommentar
Fra : Claus H


Dato : 06-09-02 21:27

Hej Peter (og andre).

Jeg har også bokset en hel del med dette i VB6, men har for et års tid siden
fået skrevet en klasse (gengivet nedenfor), der gør det meste af arbejdet
for mig.
Fidusen er at lade en formular delegere sin resize-event videre til klassen,
der så resizer-kontrollerne, som specificeret.
Den kan bruges sådan:

Private fTool as clsFormTools

Private Sub Form_Load()
Set fTool = New clsFormTools
With fTool ' Dovenskab - jeg gider ikke skrive det i hver linie
Set .Owner = Me ' Delegér events fra Formen til Klassen
' Angiv hvilke kontroller der skal resizes og hvordan
.MoveOnResize Me.lblTekst, mdTopLeft ' Flyt lodret/vandret
.MoveOnResize Me.txtTekstBox, , sdWidth
End With
End Sub
- parametrene til MoveOnResize vises automatisk, når du bruger den.

Klassen gør iøvrigt en anden ting (der har irriteret mig i VB) - den
"husker" automatisk hvor på skærmen brugeren efterlod formularen (samt i
hvilken
størrelse).

Jeg beklager, at jeg kun har kunnet finde en gl. version - den aktuelle kan
også håndtere min/max størrelser på formen, men det er ret enkelt at lægge
ind.

For mit eget vedkommende, så bruger jeg denne klasse hver gang jeg har en
formular (også selvom den ikke kan resizes), hvilket sparer en utroligt
masse kodearbejde.

God fornøjelse (hvis du altså kan bruge den)

Claus H.

Her er kildeteksten til klassen:

VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "clsFormTools"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit

Public Enum MoveDirection
mdTop
mdLeft
mdTopLeft
mdNone
End Enum
Public Enum SizeDirection
sdHeight
sdWidth
sdHeightWidth
sdNone
End Enum

Private Type typCtrlsToMove
Ctrl As Control
Move As MoveDirection
Size As SizeDirection
ColIX As Long
End Type
Private CtrlsToMove() As typCtrlsToMove
Private CtrlsCount As Long

Private WithEvents mOwner As Form
Attribute mOwner.VB_VarHelpID = -1
Private mSavePos As Boolean

Private fW As Long, fH As Long
Private bW As Long, bH As Long

Public Sub MoveOnResize(Ctrl As Control, Optional cMove As MoveDirection =
mdNone, Optional cSize As SizeDirection = sdNone, Optional ColumnIX As Long)
Dim IX As Long, cIX As Long
Dim ErNy As Boolean
Dim dW As Long, dH As Long

' Se om kontrollen evt. findes i forvejen
If CtrlsCount < 1 Then
ErNy = True
Else
ErNy = True
For IX = 1 To CtrlsCount
If CtrlsToMove(IX).Ctrl Is Ctrl Then
cIX = IX
ErNy = False
Exit For
End If
Next IX
End If
If ErNy Then
CtrlsCount = CtrlsCount + 1
If CtrlsCount > UBound(CtrlsToMove) Then
ReDim Preserve CtrlsToMove(CtrlsCount + 9)
End If
cIX = CtrlsCount
End If
With CtrlsToMove(cIX)
Set .Ctrl = Ctrl
.Move = cMove
.Size = cSize
End With
If ErNy Then
dW = mOwner.Width - bW
dH = mOwner.Height - bH
With CtrlsToMove(cIX)
If .Move = mdLeft Or .Move = mdTopLeft Then
.Ctrl.Left = .Ctrl.Left + dW
End If
If .Move = mdTop Or .Move = mdTopLeft Then
.Ctrl.Top = .Ctrl.Top + dH
End If
If .Size = sdHeight Or .Size = sdHeightWidth Then
.Ctrl.Height = .Ctrl.Height + dH
End If
If .Size = sdWidth Or .Size = sdHeightWidth Then
.Ctrl.Width = .Ctrl.Width + dW
End If
If IsMissing(ColumnIX) Then
.ColIX = -1
Else
.ColIX = ColumnIX
End If
End With
End If
End Sub

Public Property Let SavePos(vData As Boolean)
mSavePos = vData
End Property
Public Property Get SavePos() As Boolean
SavePos = mSavePos
End Property

Public Property Set Owner(vData As Form)
Set mOwner = vData
fW = mOwner.Width
fH = mOwner.Height
bW = fW
bH = fH
DoLoadPos
End Property
Public Property Get Owner() As Form
Set Owner = mOwner
End Property

Private Sub Class_Initialize()
mSavePos = True
ReDim CtrlsToMove(10)
End Sub

Private Sub mOwner_Load()
fW = mOwner.Width
fH = mOwner.Height
DoLoadPos
End Sub

Private Sub mOwner_Resize()
Dim dW As Long, dH As Long
Dim IX As Long

dW = mOwner.Width - fW
dH = mOwner.Height - fH

For IX = 1 To CtrlsCount
With CtrlsToMove(IX)
If .Move = mdLeft Or .Move = mdTopLeft Then
.Ctrl.Left = .Ctrl.Left + dW
End If
If .Move = mdTop Or .Move = mdTopLeft Then
.Ctrl.Top = .Ctrl.Top + dH
End If
If .Size = sdHeight Or .Size = sdHeightWidth Then
.Ctrl.Height = .Ctrl.Height + dH
End If
If .Size = sdWidth Or .Size = sdHeightWidth Then
.Ctrl.Width = .Ctrl.Width + dW
If .ColIX >= 0 Then
On Error Resume Next
' Resize af individuelle kolonner!
' Flexgrid:
If .Ctrl.ColWidth(.ColIX) + dW > 0 Then
.Ctrl.ColWidth(.ColIX) = .Ctrl.ColWidth(.ColIX) + dW
Else
.Ctrl.ColWidth(.ColIX) = 0
End If
End If
End If
End With
Next IX
fW = mOwner.Width
fH = mOwner.Height
End Sub

Private Sub mOwner_Unload(Cancel As Integer)
DoSavePos
End Sub

Private Sub DoLoadPos()
mOwner.Top = GetSetting(App.EXEName, mOwner.Name, "Top", mOwner.Top)
mOwner.Left = GetSetting(App.EXEName, mOwner.Name, "Left", mOwner.Left)
Select Case mOwner.BorderStyle
Case vbSizable, vbSizableToolWindow
mOwner.Width = GetSetting(App.EXEName, mOwner.Name, "Width",
mOwner.Width)
mOwner.Height = GetSetting(App.EXEName, mOwner.Name, "Height",
mOwner.Height)
mOwner.WindowState = GetSetting(App.EXEName, mOwner.Name,
"WindowState", mOwner.WindowState)
End Select
End Sub
Private Sub DoSavePos()
SaveSetting App.EXEName, mOwner.Name, "Top", mOwner.Top
SaveSetting App.EXEName, mOwner.Name, "Left", mOwner.Left
Select Case mOwner.BorderStyle
Case vbSizable, vbFixedToolWindow
SaveSetting App.EXEName, mOwner.Name, "Width", mOwner.Width
SaveSetting App.EXEName, mOwner.Name, "Height", mOwner.Height
SaveSetting App.EXEName, mOwner.Name, "WindowState",
mOwner.WindowState
End Select
End Sub








Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste