CommonDialog

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

CommonDialog

Сообщение Diac » 02.02.2005 (Ср) 1:11

Кто знает, как сохранить выбранные юзером через CommonDialog настройки шрифта, чтобы при очередном запуске программы они оставались. :?:

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 02.02.2005 (Ср) 3:15

Попробуй с использованием *.INI

Diac
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.01.2005 (Пт) 14:41
Откуда: Ставрополь

Сообщение Diac » 02.02.2005 (Ср) 11:02

Попробуй с использованием *.INI

Как?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 02.02.2005 (Ср) 11:09

Можно через GetSetting и SaveSettings

А если через ини то так:
Код: Выделить всё
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 Any, ByVal lpkeyname As Any, _
        ByVal lpstring As Any, ByVal lpfilename As String) As Long
Public Sub writeINI(sINIFile As String, sSection As String, sKey As String, sValue As String)
    Dim N As Integer
    Dim sTemp  As String
    sTemp = sValue
    For N = 1 To Len(sValue)
        If Mid$(sValue, N, 1) = vbCr Or Mid$(sValue, N, 1) = vbLf Then Mid$(sValue, N) = " "
    Next N
    N = WritePrivateProfileString(sSection, sKey, sTemp, sINIFile)
End Sub
Public Function sGetINI(sINIFile As String, sSection As String, sKey As String, sdefault As String)
    Dim sTemp  As String * 256
    Dim nLength As Integer
    sTemp = Space$(256)
    nLength = GetPrivateProfileString(sSection, sKey, sdefault, sTemp, 255, sINIFile)
    sGetINI = Left$(sTemp, nLength)
End Function


Diac
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.01.2005 (Пт) 14:41
Откуда: Ставрополь

Сообщение Diac » 02.02.2005 (Ср) 12:02

А какой код обработки события
Код: Выделить всё
Private Sub Command1_Click()Я идиот! Убейте меня, кто-нибудь!??
End Sub

Простите, я в этих АПИ слабовато разбираюсь. :cry:

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 02.02.2005 (Ср) 12:17

На вот пример для наглядности

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 02.02.2005 (Ср) 12:40

Объясни что тебе надо реализовать в программе (только в рамках CommonDialog и сохранения инфы), а я напишу код.. =)
Да здесь его помещу.. =)

С уважением Андрей.

Diac
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.01.2005 (Пт) 14:41
Откуда: Ставрополь

Сообщение Diac » 02.02.2005 (Ср) 14:08

У меня в программе есть RichTextBox. Шрифт в нем, допустим, Arial, размер 12 и т. д. Чтобы юзеру на свой вкус изменить настройки шрифта, он нажимает кнопочку, вызывает CommonDialog и выбирает шрифт. Но если закрыть приложение, то, когда в следующий раз запускаешь программу, то выбранные юзером настройки шрифта не сохраняются, а опять шрифт стоит Arial, 12. Так вот, как быть, чтобы при следующем запуске программы был шрифт, который выбрал пользователь в предыдущий раз? :?:

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 02.02.2005 (Ср) 14:22

Ну вот и юзай мой пример ибо рулез :D

при выходе будешь писать, а при загрузке считывать

Diac
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.01.2005 (Пт) 14:41
Откуда: Ставрополь

Сообщение Diac » 02.02.2005 (Ср) 14:30

Ну вот и юзай мой пример ибо рулез при выходе будешь писать, а при загрузке считывать

Попробую :scratch:

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 02.02.2005 (Ср) 14:47

а не легче использовать SaveSetting и GetSetting имхо легче...

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 02.02.2005 (Ср) 15:03

Собственно обещал - на получай.. =)

Не забудь к проекту через References
Подключить "Microsoft Scripting Runtime"

Добавить в модуль (обычно я зову его mdlINI):

Код: Выделить всё
Option Explicit
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
Private Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long
Private Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long

Private sFile As String

Public Property Get INIFile() As String
INIFile = sFile
End Property

Public Property Let INIFile(s_file As String)
sFile = s_file
End Property

Private Sub Class_Initialize()
If Len(sFile) > 0 Then
sFile = App.EXEName & ".ini"
End If
End Sub


Public Sub WriteP_INI(sSection, sKEy As String, sValue As String)
Dim lRes As Long
lRes = WritePrivateProfileString(sSection, sKEy, sValue, sFile)
End Sub


Public Function GetP_INI(sSection As String, sKEy As String, Optional sDefault As String) As String
Dim lRes As Long
Dim lLen As Long
Dim sTstr As String
sTstr = Space$(512)
lRes = GetPrivateProfileString(sSection, sKEy, sDefault, sTstr, Len(sTstr), sFile)

If lRes > 0 Then
sTstr = Strings.Left$(sTstr, lRes)
End If

If Len(sTstr) = 512 Then sTstr = ""
GetP_INI = sTstr
End Function


Public Sub WriteWinINIString(sSection As String, sKEy As String, sValue As String)
Dim lRes As Long
lRes = WriteProfileString(sSection, sKEy, sValue)
End Sub


Public Function GetWinINIString(sSection, sKEy, Optional sDefault As String) As String
Dim lRes As Long
Dim lTlen As Long
Dim sTstr As String
sTstr = Space$(512)
lRes = GetProfileString(sSection, sKEy, sDefault, sTstr, Len(sTstr))

If lRes > 0 Then
sTstr = Strings.Left$(sTstr, lRes)
End If
GetWinINIString = sTstr
End Function



А это форма:

Код: Выделить всё
'Использование просто, разберёться даже младенец.. =)
'CMD-Имя кнопки
'CD-Имя диалога (CommonDialog)
'RTB-Имя RichTextBox

Dim UserFont As StdFont
Dim fso As New FileSystemObject
Dim fil As File
Dim txt As TextStream
Option Explicit

Private Sub CMD_Click()
'Устанавливаем параметры для CommonDialog
With CD
.FontBold = UserFont.Bold
.FontItalic = UserFont.Italic
.FontName = UserFont.Name
.FontSize = UserFont.Size
.FontStrikethru = UserFont.Strikethrough
.FontUnderline = UserFont.Underline
End With

CD.Flags = cdlCFScreenFonts
CD.ShowFont

' Задаём параметры для UserFont,для RichTextBox задавать параметры фонта не надо будет, так как UserFont и RTB.Font были связаны =)
With UserFont
.Bold = CD.FontBold
.Italic = CD.FontItalic
.Name = CD.FontName
.Size = CD.FontSize
.Strikethrough = CD.FontStrikethru
.Underline = CD.FontUnderline
End With
End Sub

Private Sub Form_Load()
Set UserFont = RTB.Font
Load_Properties
End Sub


Private Sub Load_Properties()
Dim sIF As String
sIF = Replace(App.Path & "\Prop.ini", "\\", "\") 'Это на тот случай, если пользователь установит прогу в корень диска (и такое бывает! ;))
INIFile = sIF 'Устанавливаем путь к Ini файлу

With UserFont
.Name = GetP_INI("UserFont", "Font_Name", "Arial") 'Грузим из INI имя шрифта, по дефолту - Arial
.Bold = GetP_INI("UserFont", "Font_Bold", "False") 'Грузим из INI жирность шрифта, по дефолту - False
.Italic = GetP_INI("UserFont", "Font_Italic", "False") 'Грузим из INI наклонность шрифта, по дефолту - False
.Size = GetP_INI("UserFont", "Font_Size", "12") 'Грузим из INI размер шрифта, по дефолту - 12
.Strikethrough = GetP_INI("UserFont", "Font_Str", "False") 'Грузим из INI зачёркнутость шрифта, по дефолту - False
.Underline = GetP_INI("UserFont", "Font_Underline", "False") 'Грузим из INI подчёркнутость шрифта, по дефолту - False
End With
End Sub


Private Sub Write_Properties(UserFont As StdFont)
Dim OutSrc As String
Dim sIF As String
sIF = Replace(App.Path & "\Prop.ini", "\\", "\")

'Задаём параметры в переменную OutSrc
With UserFont
OutSrc = "[UserFont]" & vbCrLf & _
"Font_Name=" & .Name & vbCrLf & _
"Font_Bold=" & .Bold & vbCrLf & _
"Font_Italic=" & .Italic & vbCrLf & _
"Font_Size=" & .Size & vbCrLf & _
"Font_Str=" & .Strikethrough & vbCrLf & _
"Font_Underline=" & .Underline
End With

'Использование сис-мы FSO не случайно, оно на тот случай, если файла на месте не окажеться, функция WriteP_INI НЕ создаёт файл.
fso.CreateTextFile (sIF)
Set fil = fso.GetFile(sIF)
Set txt = fil.OpenAsTextStream(ForWriting)
txt.Write OutSrc
txt.Close

'Параметры сохранены
End Sub



Конечно использование SaveSetting и GetSetting проще... :wink:

Если надо, можно написать и с использованием этих функций.. :roll:

Нужны будут комменты, пиши.. :D

С уважением Андрей.
Последний раз редактировалось Крост 02.02.2005 (Ср) 15:06, всего редактировалось 1 раз.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 02.02.2005 (Ср) 15:05

Кто к чему привык :)

Я например всегда (почти) юзаю ини

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 02.02.2005 (Ср) 15:07

Я кстати тоже INI, имхо незнаю.. =)
Просто нравится... =)
Хороший :D, плохой :x, злой :twisted:.

(Не)Люблю кАпаться в чЮжих сорсах.

Хочешь узнать что такое Piligrim? Прошу - http://www.piligrim-gps.ru/

Diac
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.01.2005 (Пт) 14:41
Откуда: Ставрополь

Сообщение Diac » 02.02.2005 (Ср) 15:49

Код: Выделить всё
Private Sub Load_Properties()
Dim sIF As String
sIF = Replace(App.Path & "\Prop.ini", "\\", "\") 'Это на тот случай, если пользователь установит прогу в корень диска (и такое бывает! ;))
INIFile = sIF 'Устанавливаем путь к Ini файлу

With UserFont
.Name = GetP_INI("UserFont", "Font_Name", "Arial") 'Грузим из INI имя шрифта, по дефолту - Arial
.Bold = GetP_INI("UserFont", "Font_Bold", "False") 'Грузим из INI жирность шрифта, по дефолту - False
.Italic = GetP_INI("UserFont", "Font_Italic", "False") 'Грузим из INI наклонность шрифта, по дефолту - False
.Size = GetP_INI("UserFont", "Font_Size", "12") 'Грузим из INI размер шрифта, по дефолту - 12
.Strikethrough = GetP_INI("UserFont", "Font_Str", "False") 'Грузим из INI зачёркнутость шрифта, по дефолту - False
.Underline = GetP_INI("UserFont", "Font_Underline", "False") 'Грузим из INI подчёркнутость шрифта, по дефолту - False
End With
End Sub

Но, мне нужно, чтобы по дефолту не это грузилось, а те настройки, которые были выбраны во время предыдущей работы приложения. :!:

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 02.02.2005 (Ср) 16:53

Diac, в Form_QueryUnload(к примеру)пропиши код сохранения данных CommonDialog в INI файл. А при запуски (Form_Load) извлечекай из INI нужную тебе информацию… И работай...

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 02.02.2005 (Ср) 20:34

По дефолту значения будут ставиться такими, если в INI файле параметр с таким именем будет отсутствовать, если же он будет, то значение параметра в VB не будет дефолтным, оно возьмётся из INi.
Хороший :D, плохой :x, злой :twisted:.

(Не)Люблю кАпаться в чЮжих сорсах.

Хочешь узнать что такое Piligrim? Прошу - http://www.piligrim-gps.ru/

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 02.02.2005 (Ср) 20:37

Я ж ему уже кидал пример работы с INI

Diac
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 28.01.2005 (Пт) 14:41
Откуда: Ставрополь

Сообщение Diac » 02.02.2005 (Ср) 23:37

Спасибо всем за помощь. Но дошло до меня объяснение Александра80 и его исходник. Спасибо, Александр80. :D

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 03.02.2005 (Чт) 0:44

Пожалуйста! :lol: Проще надо, ребята..., тогда Вас будут понимать. :wink: :lol:
Хотя много полезного и я узнал... :? Всем большое спасибо :wink:


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList