Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: "Запомнить" положение окон Добавлено: 02.09.06 11:31  

Автор вопроса:  Рустам
Здравствуйте! Подскажите ,пожалуйста, как добиться того, чтобы окно, открывалось в том же положении, в каком было закрыто пользователем.

Ответить

  Ответы Всего ответов: 18  

Номер ответа: 1
Автор ответа:
 Oleg



Вопросов: 9
Ответов: 16
 Профиль | | #1 Добавлено: 02.09.06 14:34
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

Ответить

Номер ответа: 2
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #2
Добавлено: 02.09.06 14:37

Private Sub Form_Load()
'Çàãðóçêà
    'Êîîðäèíàòû îêíà
    Left = Val(GetSetting("MyProgram", "Cords", "Left", Str(Left)))
    Top = Val(GetSetting("MyProgram", "Cords", "Top", Str(Top)))
    'Ðàçìåðû îêíà
    Width = Val(GetSetting("MyProgram", "Cords", "Width", Str(Width)))
    Height = Val(GetSetting("MyProgram", "Cords", "Height", Str(Height)))
End Sub

Private Sub Form_Unload(Cancel As Integer)
'Ñîõðàíåíèå
    'Êîîðäèíàòû îêíà
    SaveSetting "MyProgram", "Cords", "Left", Str(Left)
    SaveSetting "MyProgram", "Cords", "Top", Str(Top)
    'Ðàçìåðû îêíà
    SaveSetting "MyProgram", "Cords", "Width", Str(Width)
    SaveSetting "MyProgram", "Cords", "Height", Str(Height)
End Sub

Ответить

Номер ответа: 3
Автор ответа:
 Oleg



Вопросов: 9
Ответов: 16
 Профиль | | #3 Добавлено: 02.09.06 14:38
Чуть не забыл, перд тем как запускать проект, создай файл "C:\InfForm.txt" и запиши в него значения положения формы, типа
500
500
ну вообщем сам разберёшься

Ответить

Номер ответа: 4
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #4
Добавлено: 02.09.06 14:42
Извиняюсь за маразмные коментарии, буфер сглючил :)

MyProgramm - имя твоей проги; Left, Top - координаты верхнего левого угла формы; Width, Height - размер формы; метод SaveSetting записывает в реестр данные:

SaveSetting (ИмяПрограммы, Секция, Ключ, Значение)

Метод GetSetting возвращает данные из реестра

a = GetSetting(ИмяПрограммы, Секция, Ключ, ЗначениеПоУмолчанию)

Ответить

Номер ответа: 5
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #5
Добавлено: 02.09.06 14:43
Kill ("C:\InfForm.txt";)


Забей на бинару, юзай Open File For Output и метод Print!

Ответить

Номер ответа: 6
Автор ответа:
 mikityak



Вопросов: 23
Ответов: 237
 Профиль | | #6 Добавлено: 02.09.06 18:09
Open ("C:\InfForm.txt";) For Binary As #1


- Ого во дают ...

Ответить

Номер ответа: 7
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 02.09.06 18:14
Чуть не забыл, перд тем как запускать проект, создай файл "C:\InfForm.txt" и запиши в него значения положения формы, типа

Уууууу...
А потом удивляемся что прога не работает под Windows Vista с включенным Protected Mode...

Да и не только под Vista...

Мож лучше будем удалять файл explorer.exe и на его место писать настройки формы?

1. Юзай реестр или пиши в специально предназначеную для этого директорию - Application Data
2. Никогда не прописывай в программе абсолютных путей - всегда найдется пользователь у которого Windwos стоит на диске Z.

Ответить

Номер ответа: 8
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #8
Добавлено: 02.09.06 20:50
Юзай реестр или пиши в специально предназначеную для этого директорию - Application Data

- Если на компе установлено несколько экзымпляров проги, то реестр не катит. Лучше писать в файл, с привязкой к App.Path.
Например: AppPath+"\proginfo.dat" :)

Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 02.09.06 22:04
- Если на компе установлено несколько экзымпляров проги, то реестр не катит.

Откуда такая информация?
Просто нужно писать в HKEY_CURRENT_USER.

Лучше писать в файл, с привязкой к App.Path.
Например: AppPath+"\proginfo.dat" :)

Если за компьютером работают два пользователя? А если десять? Почему они должны делить между собой настройки прогарммы, интерфейса, сохраненные пароли? :-0

И с чего ты взял, что тебе дадут писать в папку установленого приложения?
Права записи в Program Files (куда скорее всего будет установлено приложение) у пользователя скорее всего не будет - это касается как серверных ОС, так и Vista.

Факт в том, что если программа хочет писать в Program Files, а доступа туда нет, то это глюк программы, а если она пытается писать туда куда положено (в данном случае - Application Data), и туда прав писать нету, то пользователь - сам себе чебурашка что трогал ручками ACL, и у него наверняка половина софта на компе глючить будет при таком раскладе, т.е. к разработчику ПО тут претензий нету.

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 02.09.06 22:22
- Если на компе установлено несколько экзымпляров проги, то реестр не катит.


Откуда такая информация?
Просто нужно писать в HKEY_CURRENT_USER.

Упс, не совсем правильно понял вопрос.

Что значит "на компьютере установлено несколько экземпляров программы"?

Ответить

Номер ответа: 11
Автор ответа:
 Oleg



Вопросов: 9
Ответов: 16
 Профиль | | #11 Добавлено: 02.09.06 23:25

Если за компьютером работают два пользователя? А если десять? Почему они должны делить между собой настройки прогарммы, интерфейса, сохраненные пароли? :-0


Ну, согласен. А что если попробовать для каждого пользователя создавать свой файл с настройками,
типа
"C:\Documents and Settings\user\MySettingss...и т.д."

Ответить

Номер ответа: 12
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #12 Добавлено: 03.09.06 00:01
Ну, согласен. А что если попробовать для каждого пользователя создавать свой файл с настройками,
типа
"C:\Documents and Settings\user\MySettingss...и т.д."

Примерно так, надо только по Майкрософтовским гайдансам посмотреть, где именно брать инфу о том, куда писать настройки.

Ответить

Номер ответа: 13
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #13
Добавлено: 03.09.06 00:07
Что значит "на компьютере установлено несколько экземпляров программы"?

:)
Откровенно говоря, я очень долго думал, какой бы привести пример...
Ну, понятно, что речь не о программах, которые устанавливаются при помощи различных Setup в папку ProgramFiles. Речь о тех прогах, кот. просто извлекаются из архивов. Например, текстовый редактор AkelPad. Но!!! даже если предположить, что на компе работают 10 человек, и все они распаковали у себя в документах этот AkelPad, то вероятность того, что найдется хоть один ненормальный юзер, распаковавший эту прогу дважды и требующий от каждой своих собственных настроек очень мала. Эта вероятность настолько мала, что про пост №8 можно смело забыть и вспомнить про посты №7 и №9 где тов. Бранд сказал:
1. Юзай реестр

и
Просто нужно писать в HKEY_CURRENT_USER.

______________________
С уважением, Я.

Ответить

Номер ответа: 14
Автор ответа:
 mikityak



Вопросов: 23
Ответов: 237
 Профиль | | #14 Добавлено: 04.09.06 11:10
Здравствуйте! Подскажите ,пожалуйста, как добиться того, чтобы окно, открывалось в том же положении, в каком было закрыто пользователем.


- Может тебе такое подойдет ...
- Скажы чем плох такой вариант ?

- 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

'-------------------------------------------
'  Forme.StartUpPosition = vbStartUpManual
'-------------------------------------------

'---*** Tray в нижнiй частинi екрану ***----
If TrayRect.Left < 0 And TrayRect.Top > 0 Then
   Forme.Move 0 + Indention, 0 + Indention, Screen.Width - (Indention * 2), TrayRect.Top * 15 - (Indention * 2)
End If
'-------------------------------------------
'---*** Tray в правiй частинi екрану ***----
If TrayRect.Left > 0 And TrayRect.Top < 0 Then
   Forme.Move 0 + Indention, 0 + Indention, TrayRect.Left * 15 - (Indention * 2), Screen.Height - (Indention * 2)
End If
'-------------------------------------------
'---*** Tray в верхнiй частинi екрану ***---
If TrayRect.Left < 0 And TrayRect.Top < 0 And TrayRect.Right > Screen.Width / 15 Then
   Forme.Move 0 + Indention, TrayRect.Bottom * 15 + Indention, Screen.Width - (Indention * 2), (Screen.Height) - (TrayRect.Bottom * 15) - (Indention * 2)
End If
'-------------------------------------------
'---*** Tray в лiвiй частинi екрану   ***---
If TrayRect.Left < 0 And TrayRect.Top < 0 And TrayRect.Right < Screen.Width / 15 Then
   Forme.Move TrayRect.Right * 15 + Indention, 0 + Indention, (Screen.Width) - (TrayRect.Right * 15) - (Indention * 2), Screen.Height - (Indention * 2)
End If
'-------------------------------------------
End Sub

'Indention = Indention / 15 'Переводим Twip в Pixel
'Indention = Indention * 15 'Переводим Pixel в Twip

'Programmer: mikityak@ukr.net


- Form1.frm

Private Sub Form_Load()
   Call FormPosition(Form1) 'modFormPosition
End Sub


- Ето так кстати ...
- Если твоя форма "MaxButton=True"
- Точна такаяш загрузка формы как и в любом
  "Adode Pfoto Shop"

Ответить

Номер ответа: 15
Автор ответа:
 Viper



ICQ: 249094859 

Вопросов: 0
Ответов: 310
 Профиль | | #15 Добавлено: 05.09.06 11:59
Как же так можно прочитать вопрос чтобы привести код не имеющий к нему абсолютно никакого отношения?

И ведь автор поста вопрос явно читал, о чем свидельствует цитата

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам