FormName.Top – определяет положении формы по вертикале
FormName.Left – положение формы по горизонтали
Просто считываешь значения этих параметров и записываешь в файл, а при загрузке формы считываешь из файла предыдущие значения, ни чего сложного
Создай новый проект, удали предыдущий код и вставь этот
Private Sub Form_Load()
Dim X As Integer, Y As Integer
Dim TextString() As String
Open ("C:\InfForm.txt" For Binary As #1
TextString = Split(Input(LOF(1), 1), vbCrLf)
X = Val(TextString(0))
Y = Val(TextString(1))
Close #1
Me.Left = X
Me.Top = Y
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim X As String, Y As String
Kill ("C:\InfForm.txt"
Open ("C:\InfForm.txt" For Binary As #1
X = Format(Me.Left)
Y = Format(Me.Top)
Put #1, , X + vbCrLf + Y
Close #1
End Sub
Чуть не забыл, перд тем как запускать проект, создай файл "C:\InfForm.txt" и запиши в него значения положения формы, типа
500
500
ну вообщем сам разберёшься
MyProgramm - имя твоей проги; Left, Top - координаты верхнего левого угла формы; Width, Height - размер формы; метод SaveSetting записывает в реестр данные:
Чуть не забыл, перд тем как запускать проект, создай файл "C:\InfForm.txt" и запиши в него значения положения формы, типа
Уууууу...
А потом удивляемся что прога не работает под Windows Vista с включенным Protected Mode...
Да и не только под Vista...
Мож лучше будем удалять файл explorer.exe и на его место писать настройки формы?
1. Юзай реестр или пиши в специально предназначеную для этого директорию - Application Data
2. Никогда не прописывай в программе абсолютных путей - всегда найдется пользователь у которого Windwos стоит на диске Z.
Юзай реестр или пиши в специально предназначеную для этого директорию - Application Data
- Если на компе установлено несколько экзымпляров проги, то реестр не катит. Лучше писать в файл, с привязкой к App.Path.
Например: AppPath+"\proginfo.dat"
- Если на компе установлено несколько экзымпляров проги, то реестр не катит.
Откуда такая информация?
Просто нужно писать в HKEY_CURRENT_USER.
Лучше писать в файл, с привязкой к App.Path.
Например: AppPath+"\proginfo.dat"
Если за компьютером работают два пользователя? А если десять? Почему они должны делить между собой настройки прогарммы, интерфейса, сохраненные пароли? :-0
И с чего ты взял, что тебе дадут писать в папку установленого приложения?
Права записи в Program Files (куда скорее всего будет установлено приложение) у пользователя скорее всего не будет - это касается как серверных ОС, так и Vista.
Факт в том, что если программа хочет писать в Program Files, а доступа туда нет, то это глюк программы, а если она пытается писать туда куда положено (в данном случае - Application Data), и туда прав писать нету, то пользователь - сам себе чебурашка что трогал ручками ACL, и у него наверняка половина софта на компе глючить будет при таком раскладе, т.е. к разработчику ПО тут претензий нету.
Если за компьютером работают два пользователя? А если десять? Почему они должны делить между собой настройки прогарммы, интерфейса, сохраненные пароли? :-0
Ну, согласен. А что если попробовать для каждого пользователя создавать свой файл с настройками,
типа
"C:\Documents and Settings\user\MySettingss...и т.д."
Ну, согласен. А что если попробовать для каждого пользователя создавать свой файл с настройками,
типа
"C:\Documents and Settings\user\MySettingss...и т.д."
Примерно так, надо только по Майкрософтовским гайдансам посмотреть, где именно брать инфу о том, куда писать настройки.
Что значит "на компьютере установлено несколько экземпляров программы"?
Откровенно говоря, я очень долго думал, какой бы привести пример...
Ну, понятно, что речь не о программах, которые устанавливаются при помощи различных Setup в папку ProgramFiles. Речь о тех прогах, кот. просто извлекаются из архивов. Например, текстовый редактор AkelPad. Но!!! даже если предположить, что на компе работают 10 человек, и все они распаковали у себя в документах этот AkelPad, то вероятность того, что найдется хоть один ненормальный юзер, распаковавший эту прогу дважды и требующий от каждой своих собственных настроек очень мала. Эта вероятность настолько мала, что про пост №8 можно смело забыть и вспомнить про посты №7 и №9 где тов. Бранд сказал:
Здравствуйте! Подскажите ,пожалуйста, как добиться того, чтобы окно, открывалось в том же положении, в каком было закрыто пользователем.
- Может тебе такое подойдет ...
- Скажы чем плох такой вариант ?
- modFormPosition.bas
Option Explicit
'+-------------------------------------------
'|Даний модуль доповнуе 'Visual Basic' такою
'|самою властивiстью як у 'Borland Delphi'
'|( Form.Aling:= Client ).
'|З маленьким доповненням 'Indention' вiдступ.
'+-------------------------------------------
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
 ByVal hwnd11 As Long, ByVal hwnd12 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd1 As Long, _
lpRect As RECT) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Dim TrayRect As RECT
Dim Trayhwnd As Long
'----------************
Public Sub FormPosition(ByVal Forme As Form, Optional Indention As Long = 0)
'----------************
' Находим описатель трея
Trayhwnd = FindWindowEx(0, 0, "Shell_TrayWnd", vbNullString)
' Получаем размеры трея
GetWindowRect Trayhwnd, TrayRect