Окно не насвоем месте, через раз.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Юра П
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 23.12.2004 (Чт) 22:44

Окно не насвоем месте, через раз.

Сообщение Юра П » 07.03.2005 (Пн) 20:18

Уважаемые эксперты. У меня такие чудеса. Окна имеют свои координаты. Так вот при загрузке приложения, форма появляется не по своим координатам. Точнее координата Top=0, а она появляется ниже. А когда я в редакторе просто кликну на эту форму и переведу на нее фокус, то происходит "чудо" и она появляется там где ей и надо.

Что за глюк и как с ним бороться.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.03.2005 (Пн) 20:35

Какое свойство StartupPosition у формы?

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 08.03.2005 (Вт) 2:53

Начально положение формы определяется ОС при ее создании. Ты можеш на это влиять, устанавливая свойство формы StartUpPosition: CenterScreen - по центру экрана, CenterOwner - по центру родительского окна, либо Manual. В таком случае окно появляется в координатах Left и Top, заданных в дизайн-тайм. А по хорошему нужно-бы запоминать, скажем в реестре, положение и размер формы при выходе из нее и восстанавливать их при загрузке :D
То, что для одних константа, для других только переменная...

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 08.03.2005 (Вт) 3:08

У меня все настройки окна хранятся в инишке, и все работает.
:lol: :arrow:
В модуле:
Код: Выделить всё
Option Explicit

Public 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 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

Public Function ReadFromINI _
    (ByVal sINIFile As String, _
    ByVal sSection As String, _
    ByVal sKey As String, _
    Optional ByVal sDefault As String = vbNullString) As String
   
   Dim rc&, sData$

   sData$ = String$(128, Chr$(0))

   If GetPrivateProfileString(sSection, sKey, sDefault, sData$, Len(sData$), sINIFile) > 0 Then
      ReadFromINI = Left$(sData, InStr(sData$, Chr$(0)) - 1)
   Else
      ReadFromINI = sDefault
   End If
End Function

В форме:
Код: Выделить всё
Option Explicit

Private Sub Form_Load()
    'V Чтение настроек формы*******************************************************
    Dim sAppPath As String
    sAppPath = App.Path                                             'Определение местонахождения файлов с программой
    If Right$(sAppPath, 1) <> "\" Then sAppPath = sAppPath & "\"    'Проверка на местонахождение на локальном диске
    sAppPath = sAppPath & App.Title & ".ini"
    Me.Left = ReadFromINI(sAppPath, Me.Name, "Left", CStr(Me.Left))
    Me.Top = ReadFromINI(sAppPath, Me.Name, "Top", CStr(Me.Top))
    Me.Width = ReadFromINI(sAppPath, Me.Name, "Width", CStr(Me.Width))
    Me.Height = ReadFromINI(sAppPath, Me.Name, "Height", CStr(Me.Height))
    Me.WindowState = ReadFromINI(sAppPath, Me.Name, "WindowState", CStr(Me.WindowState))
    'A Чтение настроек формы*******************************************************
End Sub

Private Sub Form_Unload(Cancel As Integer)
    'V Сохранение настроек формы*******************************************************
        Dim sAppPath As String
        sAppPath = App.Path                                             'Определение местонахождения файлов с программой
        If Right$(sAppPath, 1) <> "\" Then sAppPath = sAppPath & "\"    'Проверка на местонахождение на локальном диске
        sAppPath = sAppPath & App.Title & ".ini"
    If Me.WindowState <> vbMinimized And Me.WindowState <> vbMaximized Then
        WritePrivateProfileString Me.Name, "Left", CStr(Me.Left), sAppPath
        WritePrivateProfileString Me.Name, "Top", CStr(Me.Top), sAppPath
        WritePrivateProfileString Me.Name, "Width", CStr(Me.Width), sAppPath
        WritePrivateProfileString Me.Name, "Height", CStr(Me.Height), sAppPath
    End If
        WritePrivateProfileString Me.Name, "WindowState", CStr(Me.WindowState), sAppPath
    'A Сохранение настроек формы*******************************************************
End Sub
Вложения
Project1.rar
(1.88 Кб) Скачиваний: 14
С уважением, Сергей.

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 08.03.2005 (Вт) 7:57

То же самое через GetSetting/SaveSetting:
Код: Выделить всё
Private Sub Form_Load()
With Me
.Left = GetSetting(App.Title, "Settings", "Left", .Left)
.Top = GetSetting(App.Title, "Settings", "Top", .Top)
.Width = GetSetting(App.Title, "Settings", "Width", .Width)
.Top = GetSetting(App.Title, "Settings", "Height", .Height)
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
With Me
SaveSetting App.Title, "Settings", "Left", .Left
SaveSetting App.Title, "Settings", "Top", .Top
SaveSetting App.Title, "Settings", "Width", .Width
SaveSetting App.Title, "Settings", "Height", .Height
End With
End Sub
الفيجوال بيسك الرابح

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 08.03.2005 (Вт) 17:55

Ну несовсем то. В инишке, на мой взгляд интереснее (в случае переноса программы на др. машину - проще). Да и "WindowState" тоже запоминать нужно. А вообще, тема нужная. Нечасто встретишь программу, которая положение окна запоминает.
С уважением, Сергей.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 1

    TopList