powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / CommonDialog1 ?
25 сообщений из 36, страница 1 из 2
CommonDialog1 ?
    #36438488
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал небольшую программу в Excel. Скинул ее другу. Но почему то в его Excele нету CommonDialog?
Почему ?
И как можно его установить ему? И можно ли как то эту библиотеку передавать сразу с программой?
Если работаю в VBA Excel
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36438528
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это дополнительный ActiveX, который распространяется вместе с VB 6.0 (Visual Studio 6.0)
если у тебя нет студии, то распространять не можешь
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36438710
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneэто дополнительный ActiveX, который распространяется вместе с VB 6.0 (Visual Studio 6.0)
если у тебя нет студии, то распространять не можешь

ясно...
А чем его можно заменить ? Я в своей проге, использовал только работу с цветом.
Есть что-то чем можно было бы его заменить?
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36438740
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WINAPI вызовами

гуглите:

Код: plaintext
1.
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36438761
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выше для выбора файла или директории.

это для выбора цвета: http://vbnet.mvps.org/index.html?code/comdlg/choosecolor.htm


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
'-----------------------------------------------------------------------------------------
' Copyright ©1996-2008 VBnet, Randy Birch. All Rights Reserved Worldwide.
'        Terms of use http://vbnet.mvps.org/terms/pages/terms.htm
'-----------------------------------------------------------------------------------------

'static array to contain the custom
'colours selected by the user
Private dwCustClrs( 0  To  15 ) As Long

'ChooseColor structure flag constants
Private Const CC_RGBINIT         As Long = &H1
Private Const CC_FULLOPEN        As Long = &H2
Private Const CC_PREVENTFULLOPEN As Long = &H4
Private Const CC_SOLIDCOLOR      As Long = &H80
Private Const CC_ANYCOLOR        As Long = &H100

Private Type CHOOSECOLORSTRUCT
   lStructSize     As Long
   hwndOwner       As Long
   hInstance       As Long
   rgbResult       As Long
   lpCustColors    As Long
   flags           As Long
   lCustData       As Long
   lpfnHook        As Long
   lpTemplateName  As String
End Type

Private Declare Function ChooseColor Lib "comdlg32.dll" _
   Alias "ChooseColorA" _
  (lpcc As CHOOSECOLORSTRUCT) As Long


Private Sub Form_Load()
   
  'initialize the custom colours
  'with a series of gray shades
   Dim cnt As Long
   For cnt =  240  To  15  Step - 15 
      dwCustClrs((cnt \  15 ) -  1 ) = RGB(cnt, cnt, cnt)
   Next
      
  'initialize controls
   Option1.Caption = "Display normally"
   Option1.Value = True
   Option2.Caption = "Display with Define Custom Colors open"
   Option3.Caption = "Disable Define Custom Colors button"
   Check1.Caption = "Specify initial colour is form BackColor"
   Command1.Caption = "Choose Color"
   
End Sub


Private Sub Command1_Click()

   Dim cc As CHOOSECOLORSTRUCT
   Dim r As Long
   Dim g As Long
   Dim b As Long
   
   With cc
   
     'set the flags based on the
     'check and option buttons
      .flags = CC_ANYCOLOR
      If Option2.Value = True Then .flags = .flags Or CC_FULLOPEN
      If Option3.Value = True Then .flags = .flags Or CC_PREVENTFULLOPEN
      If Check1.Value =  1  Then
         .flags = .flags Or CC_RGBINIT
         .rgbResult = Form1.BackColor
      End If
   
      'size of structure
      .lStructSize = Len(cc)
      
      'owner of the dialog
      .hwndOwner = Me.hWnd
      
      'assign the custom colour selections
      .lpCustColors = VarPtr(dwCustClrs( 0 ))
      
   End With
   
   If ChooseColor(cc) =  1  Then
   
     'assign the selected colour
     'as the form background
      Me.BackColor = cc.rgbResult
      
     'bonus .. assure the text remains
     'readable regardless of colour
     'by splitting out the respective
     'RGB values, and adjusting the text
     'colour to contrast
      Call GetRBGFromCLRREF(cc.rgbResult, r, g, b)
      Call UpdateControlShadeSelection(r, g, b)
   
   End If

End Sub


Private Sub UpdateControlShadeSelection(r As Long, g As Long, b As Long)

   Dim ctlcolor As Long
   Dim ctl As Control
   
  'if the value of the colour passed
  '(representing the current colour)
  'is less than 128, show white text
  'otherwise show black text
   If (r <  128 ) And (g <  128 ) Or _
      (g <  128 ) And (b <  128 ) Or _
      (r <  128 ) And (b <  128 ) Then
   
      ctlcolor = vbWhite
   Else
      ctlcolor = vbWindowText
   End If
   
  'set the option and check backcolor
  'to the form backcolor, and the
  'control's text to the contrasting
  'shade
   For Each ctl In Controls
      
      If TypeOf ctl Is OptionButton Or _
         TypeOf ctl Is CheckBox Then
         ctl.BackColor = RGB(r, g, b)
         ctl.ForeColor = ctlcolor
      End If
      
   Next
   
End Sub


Private Sub GetRBGFromCLRREF(ByVal clrref As Long, _
                             r As Long, g As Long, b As Long)
    
  'pass a hex colour, return the rgb components
   b = (clrref \  65536 ) And &HFF
   g = (clrref \  256 ) And &HFF
   r = clrref And &HFF
   
End Sub


Private Sub Command2_Click()

   Unload Me

End Sub
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36438812
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneWINAPI вызовами

гуглите:

Код: plaintext
1.
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long


О_О Что это за строчки кода ? :)
А WINAPI ? Это элемент который можно выбрать ? что-то я его у себя в элементах управления, в excel...
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36438827
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не элемент, это декларация вызова функций windows API.
в вашем случае (VBA Excel) надо поместить данные строчки кода в публичный модуль вашего workbook
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36438829
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Konst_One]выше для выбора файла или директории.

это для выбора цвета: http://vbnet.mvps.org/index.html?code/comdlg/choosecolor.htm

А русско язычного не было ? ))

В целом кое что понятно. ))
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36438840
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Aaoig: lopuxi
> О_О Что это за строчки кода ? :)

Это заклинание на древнем языке

> А WINAPI ? Это элемент который можно выбрать ? что-то я его у себя в элементах управления, в excel...

Windows Application Programming Interface - набор функций в системных Dll реализующий всю работу операционной системы
Windows. Предназначен для эффективного взаимодействия программ с операционной системой. Строки заклинания - это
декларация 2-х функций, для использования в программе. И это не элемент управления, хотя все элементы управления
используют API в своей работе.



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36438841
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что конкретно в коде вам не понятно? разбёрем подробно
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36438962
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneчто конкретно в коде вам не понятно? разбёрем подробно

Много что ново вкоде для меня :)) Но в VB 6.0 код работает идеально.

А вот подвести его под VBA в Excel пока не получилось.
Щас пробую. Если что буду спрашивать.
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439044
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может есть элемент с выбором цвета по проще ?) я не представляю как данный код мне подвести потом к тому, что бы я выбирал цвет, и этим цветом по двойному щелчку просто закрашивал выбранную ячейку :))
Это собственно только для этого я использовал CommonDialog.

Иначе мне до вечера сидеть это магичискую махину изучать :))
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439059
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вам нужен только этот кусок:

Код: plaintext
Me.BackColor = cc.rgbResult

вместо МЕ подставьте свой экселевский объект Range или что там у вас есть
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439232
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: lopuxi

Пример использования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub cmdTest_Click()
  ' Test code for CColorDialog
  Dim ColorDialog As CColorDialog
  Set ColorDialog = New CColorDialog
  
  ' Initialize to a selected color
  ColorDialog.Color = vbRed
  
  ' Set flags as desired
  ColorDialog.Flags = colFullOpen + colRgbinit
  
  ' Show dialog and test whether a color was selected
  If ColorDialog.Show() Then
    Me.BackColor = ColorDialog.Color
  End If
  
End Sub
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439239
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneвам нужен только этот кусок:

Код: plaintext
Me.BackColor = cc.rgbResult

вместо МЕ подставьте свой экселевский объект Range или что там у вас есть

уже прогресс.
Появилось меню с выбором цвета.

выдает ошибку вот в этом коде на слове Controls. Что цыкл с условиями? какую функцию он несет?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 
 'set the option and check backcolor
  'to the form backcolor, and the
  'control's text to the contrasting
  'shade
   For Each ctl In Controls
      
      If TypeOf ctl Is OptionButton Or _
         TypeOf ctl Is CheckBox Then
         ctl.BackColor = RGB(r, g, b)
         ctl.ForeColor = ctlcolor
      End If
      
   Next
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439244
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этот кусок вам не нужен
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439381
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneэтот кусок вам не нужен

Ну почти все работает. Тока тут вот в цикле ошибку выдает. Не пойму что ему не нравится.

Private Sub Workbook_Open()
'initialize the custom colours
'with a series of gray shades
Dim cnt As Long
For cnt = 240 To 15 Step -15
dwCustClrs((cnt \ 15) - 1) = RGB(cnt, cnt, cnt)
Next

'initialize controls
Option1.Caption = "Display normally"
Option1.Value = True
Option2.Caption = "Display with Define Custom Colors open"
Option3.Caption = "Disable Define Custom Colors button"
Check1.Caption = "Specify initial colour is form BackColor"
Command1.Caption = "Choose Color"

End Sub
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439387
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и на какой строке вашего кода это ругается?
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439392
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите тут: http://www.mvps.org/dmcritchie/excel/colors.htm

ЗЫ
может вас устроит встроенная панель экселя:

Код: plaintext
Application.Dialogs.Item(xlDialogColorPalette).Show
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439418
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneпосмотрите тут: http://www.mvps.org/dmcritchie/excel/colors.htm

ЗЫ
может вас устроит встроенная панель экселя:

Код: plaintext
Application.Dialogs.Item(xlDialogColorPalette).Show


Ох, снова на англ яз

ошибка возникает в цикле
Код: plaintext
1.
2.
3.
   Dim cnt As Long
   For cnt =  240  To  15  Step - 15 
      dwCustClrs((cnt \  15 ) -  1 ) = RGB(cnt, cnt, cnt) ' тут ошибка! 
   Next
Возникает при запуске книги эксель..
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439468
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все разобрался! Все теперь работает! )
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439471
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Me.Application.ActiveCell.Interior.ColorIndex = GetColorindex(Me.Application.ActiveCell.Address)


Function GetColorindex(ByVal r As String) As Long
Dim rngCurr As Range

    Set rngCurr = Selection
    Application.ScreenUpdating = False
    Range("IV1").Select
    
    Application.Dialogs(xlDialogPatterns).Show
    GetColorindex = ActiveCell.Interior.ColorIndex
    ActiveCell.Interior.ColorIndex = xlColorIndexAutomatic
    
    rngCurr.Select
    Set rngCurr = ActiveSheet.UsedRange
    Application.ScreenUpdating = True
    
End Function
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36439473
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как вариант в рамках самого экселя
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36442193
Фотография lopuxi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все работает. Только вот у меня вопрос, что отвечает за сохранение выбранного цвета, в этом меню.
Я каждый раз когда обращаюсь и вызываю окно с выбором цветов. У меня каждый раз выбран начальный черный цвет.
Можно ли как то запоминать выбранный цвет и при следующем обращении, он указывал тот последний цвет который я использовал.
так же при загрузки программы это было бы удобно. Так на чем сохранил проект, тот выбранный цвет и сохранился.
...
Рейтинг: 0 / 0
CommonDialog1 ?
    #36442547
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
      If Check1.Value =  1  Then
         .flags = .flags Or CC_RGBINIT
         .rgbResult = ??? 'сюда свой изначальный цвет подсовывавай
      End If
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / CommonDialog1 ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]