GRAVAR POSICAO DE CONTROLES NO FORM
Como faço para gravar a posição e o tamanho dos controles no Form em um arquivo ini?
Olá Zeus, não seria mais fácil guardar estes valores no registro do Windows ? O exemplo abaixo guarda a posicao do form1 mas pode guardar qualquer valor :
Private Sub Form_Load()
Form1.Top = GetSetting("NomeMeuAplicativo", "Posicoes", "Form1Top", 0)
Form1.Left = GetSetting("NomeMeuAplicativo", "Posicoes", "Form1Left", 0)
End Sub
Private Sub Form_Unload(Cancel As Integer)
SaveSetting "NomeMeuAplicativo", "Posicoes", "Form1Top", Form1.Top
SaveSetting "NomeMeuAplicativo", "Posicoes", "Form1Left", Form1.Left
End Sub
Private Sub Form_Load()
Form1.Top = GetSetting("NomeMeuAplicativo", "Posicoes", "Form1Top", 0)
Form1.Left = GetSetting("NomeMeuAplicativo", "Posicoes", "Form1Left", 0)
End Sub
Private Sub Form_Unload(Cancel As Integer)
SaveSetting "NomeMeuAplicativo", "Posicoes", "Form1Top", Form1.Top
SaveSetting "NomeMeuAplicativo", "Posicoes", "Form1Left", Form1.Left
End Sub
Bom, se quer em arquivo ini entao tente esta :
Const NomeArquivoIni = "c: este.ini"
Private Declare Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, _
ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Public Function GravaINI(sSection As String, sKey As String, ByVal sValue As String) As Boolean
Dim lR As Long
Dim sItemValue As String
sValue = Trim$(sValue)
sItemValue = Trim$(sItemValue) & vbNullChar
lR = WritePrivateProfileString(sSection, sKey, sValue, NomeArquivoIni)
If lR = 0 Then GravaINI = False Else GravaINI = True
End Function
Public Function LeINI(sSection As String, sKey As String, sDefault As String) As String
Dim lR As Long
Dim sReturnedValue As String
sReturnedValue = Space$(512)
lR = GetPrivateProfileString(sSection, sKey, sDefault, sReturnedValue, 512, NomeArquivoIni)
If lR = 0 Then LeINI = vbNullString Else LeINI = Left$(sReturnedValue, lR)
End Function
Private Sub Form_Load()
Form1.Top = LeINI("Posicoes", "Form1Top", 0)
Form1.Left = LeINI("Posicoes", "Form1Left", 0)
End Sub
Private Sub Form_Unload(Cancel As Integer)
GravaINI "Posicoes", "Form1Top", Form1.Top
GravaINI "Posicoes", "Form1Left", Form1.Left
End Sub
Desculpe não ter respondido antes mas é o seguinte ;
A pavalra "Posicoes" é só um termo para especificar a seçao onde será guardada a informacao e Form1Top seria a chave, Veja como vai ficar no arquivo ini :
[Posicoes]
Form1Top = 50
Form1Left = 90
Na verdade com o código que postei vc não precisa se preocupar com nada que é gravado e de que forma tambem, é só utilizar a funcao e pronto.
Zeus para utilizar arrays faca o seguinte:
A pavalra "Posicoes" é só um termo para especificar a seçao onde será guardada a informacao e Form1Top seria a chave, Veja como vai ficar no arquivo ini :
[Posicoes]
Form1Top = 50
Form1Left = 90
Na verdade com o código que postei vc não precisa se preocupar com nada que é gravado e de que forma tambem, é só utilizar a funcao e pronto.
Zeus para utilizar arrays faca o seguinte:
Private Sub Form_Load()
Dim x As Integer
For x = 0 To Text1.Count - 1
Text1(x).Top = LeINI("Posicoes", "Text1_" & x & "_Top", 0)
Text1(x).Left = LeINI("Posicoes", "Text1_" & x & "_Left", 0)
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim x As Integer
For x = 0 To Text1.Count - 1
GravaINI "Posicoes", "Text1_" & x & "_Top", Text1(x).Top
GravaINI "Posicoes", "Text1_" & x & "_Left", Text1(x).Left
Next
End Sub
Com o codigo acima o arquivo ini ficaria assim :
[Posicoes]
Text1_0_Top=0
Text1_0_Left=0
Text1_1_Top=500
Text1_1_Left=0
Text1_2_Top=1000
Text1_2_Left=0
Text1_3_Top=1500
Text1_3_Left=0
Lembre-se que os valores comecara tudo com 0, pois o valor padrao que coloquei no exemplo foi 0, mas pode ser alterado :
'Coloquei
Text1(x).Top = LeINI("Posicoes", "Text1_" & x & "_Top", 0)
''Pode mudar para
Text1(x).Top = LeINI("Posicoes", "Text1_" & x & "_Top", 100)
[Posicoes]
Text1_0_Top=0
Text1_0_Left=0
Text1_1_Top=500
Text1_1_Left=0
Text1_2_Top=1000
Text1_2_Left=0
Text1_3_Top=1500
Text1_3_Left=0
Lembre-se que os valores comecara tudo com 0, pois o valor padrao que coloquei no exemplo foi 0, mas pode ser alterado :
'Coloquei
Text1(x).Top = LeINI("Posicoes", "Text1_" & x & "_Top", 0)
''Pode mudar para
Text1(x).Top = LeINI("Posicoes", "Text1_" & x & "_Top", 100)
Zeus o codigo de exemplo é só para lhe mostrar como guardar as posicoes e restaura-las posteriormente, vc tera que adapatar o código para o que vc quer.
Mesmo assim darei uma olhada no seu projeto, ok ?
Mesmo assim darei uma olhada no seu projeto, ok ?
Ve se agora vai :
Private Sub Form_Load()
Dim controle As Control
For Each controle In Me.Controls
controle.Top = LeINI("Posicoes", controle.Name & "(" & controle.Index & ")Top", 0)
controle.Left = LeINI("Posicoes", controle.Name & "(" & controle.Index & ")Left", 0)
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim controle As Control
For Each controle In Me.Controls
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ")Top", controle.Top
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ")Left", controle.Left
Next
End Sub
Private Sub Form_Load()
Dim controle As Control
For Each controle In Me.Controls
controle.Top = LeINI("Posicoes", controle.Name & "(" & controle.Index & ")Top", 0)
controle.Left = LeINI("Posicoes", controle.Name & "(" & controle.Index & ")Left", 0)
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim controle As Control
For Each controle In Me.Controls
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ")Top", controle.Top
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ")Left", controle.Left
Next
End Sub
Para o código acima funcionar todos os controles tem que ser array. Até os botoes e labels...
Nao entendi muito bem o seu codigo do projeto !
Zeus, vc entendeu o codigo que te mandei ? As funcoes LeIni e GravaIni precisam ter como parametro o nome da chave e o valor.
Como vc tem controles que possuem indice, vc nao pode gravar somente o nome pois causaria conflito na hora de ler os dados, entao neste caso vc deve criar um nome que varia conforme o indice, algo parecido como NomeControleIndex, quando nao houver indice vc so precisa gravar o nome do controle algo como NomeControle.
Estude um pouco mais o codigo que lhe enviei....
Zeus, vc entendeu o codigo que te mandei ? As funcoes LeIni e GravaIni precisam ter como parametro o nome da chave e o valor.
Como vc tem controles que possuem indice, vc nao pode gravar somente o nome pois causaria conflito na hora de ler os dados, entao neste caso vc deve criar um nome que varia conforme o indice, algo parecido como NomeControleIndex, quando nao houver indice vc so precisa gravar o nome do controle algo como NomeControle.
Estude um pouco mais o codigo que lhe enviei....
ZEUS, estudarei melhor o seu projeto para ver se da para ajudar, fique no aguardo, ok ?
Zeus, se só o label é array entao tente :
Private Sub Form_Load()
Dim controle As Control
For Each controle In Me.Controls
If TypeOf controle Is Label Then
controle.Top = LeINI("Posicoes", controle.Name & ".Top", 0)
controle.Left = LeINI("Posicoes", controle.Name & ".Left", 0)
controle.Width = LeINI("Posicoes", controle.Name & ".Width", 0)
controle.Heigth = LeINI("Posicoes", controle.Name & ".Heigth", 0)
ElseIf TypeOf controle Is TextBox Then
controle.Top = LeINI("Posicoes", controle.Name & "(" & controle.Index & ").Top", 0)
controle.Left = LeINI("Posicoes", controle.Name & "(" & controle.Index & ").Left", 0)
controle.Width = LeINI("Posicoes", controle.Name & "(" & controle.Index & ").Width", 0)
controle.Heigth = LeINI("Posicoes", controle.Name & "(" & controle.Index & ").Heigth", 0)
End If
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim controle As Control
For Each controle In Me.Controls
If TypeOf controle Is Label Then
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ").Top", controle.Top
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ").Left", controle.Left
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ").Width", controle.Width
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ").Heigth", controle.Heigth
ElseIf TypeOf controle Is TextBox Then
GravaINI "Posicoes", controle.Name & ".Top", controle.Top
GravaINI "Posicoes", controle.Name & ".Left", controle.Left
GravaINI "Posicoes", controle.Name & ".Width", controle.Width
GravaINI "Posicoes", controle.Name & ".Heigth", controle.Heigth
End If
Next
End Sub
Nao esqueça de mudar os valores padroes 0 na funcao LeIni.
Private Sub Form_Load()
Dim controle As Control
For Each controle In Me.Controls
If TypeOf controle Is Label Then
controle.Top = LeINI("Posicoes", controle.Name & ".Top", 0)
controle.Left = LeINI("Posicoes", controle.Name & ".Left", 0)
controle.Width = LeINI("Posicoes", controle.Name & ".Width", 0)
controle.Heigth = LeINI("Posicoes", controle.Name & ".Heigth", 0)
ElseIf TypeOf controle Is TextBox Then
controle.Top = LeINI("Posicoes", controle.Name & "(" & controle.Index & ").Top", 0)
controle.Left = LeINI("Posicoes", controle.Name & "(" & controle.Index & ").Left", 0)
controle.Width = LeINI("Posicoes", controle.Name & "(" & controle.Index & ").Width", 0)
controle.Heigth = LeINI("Posicoes", controle.Name & "(" & controle.Index & ").Heigth", 0)
End If
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim controle As Control
For Each controle In Me.Controls
If TypeOf controle Is Label Then
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ").Top", controle.Top
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ").Left", controle.Left
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ").Width", controle.Width
GravaINI "Posicoes", controle.Name & "(" & controle.Index & ").Heigth", controle.Heigth
ElseIf TypeOf controle Is TextBox Then
GravaINI "Posicoes", controle.Name & ".Top", controle.Top
GravaINI "Posicoes", controle.Name & ".Left", controle.Left
GravaINI "Posicoes", controle.Name & ".Width", controle.Width
GravaINI "Posicoes", controle.Name & ".Heigth", controle.Heigth
End If
Next
End Sub
Nao esqueça de mudar os valores padroes 0 na funcao LeIni.
Tópico encerrado , respostas não são mais permitidas