Tips&Tricks

51 отговора 7243 прегледа Закачена
в отговор на Гeoprи #21

Re: Промяна на шрифта на контролите на Форма

Аз съм си го решил проблема още преди 2-3 години.

Написал съм си подобна функция на твоята, но на входа на мястото на objTarget не се подава Форма ами променливата е от тип Controls и по този начин отвън мога да подавам на функцията както Form.Controls, така и UserControl.Controls. Т.е. една функция става вече както за форми, така и за UserControl-и
Освен това функциятa би било добре да сетва за всеки език Caption, Text, ToolTips и т.н.

Обаче идеята за INI файл не ме кефи и затова си записвам нещата в Ресурсен файл или БД с парола. Като че ли БД е най-добре, а пък който иска нов интерфейс ще си плаща, за да му го направя, затова INI съм го отхвърлил. Все пак пиша на VB, който го има само при Майкрософт, където пък всичко е комерсиално. Това не е Линукс, за да пиша без пари и само ОпънСорс!

Бии, за да те уважават!
Отговор
в отговор на пpoГЪPMИcт #22

Re: Промяна на шрифта на контролите на Форма

Е моите клиенти пък се кефят като разберат че могат всичко да си променят :)
Даже и картинките по програмата могат да си сменят :))

A Usercontrol.Controls е достъпно само в кода на самия UserControl но не и във формата - например във Form1 ако напишеш UserControl1.Controls ще ти даде грешка "Object doesnt support this property or method". Може да ти даде Form1.Controls.Count или Form1.Controls.Item(1).Name но не и контролите вътре във UserControl-а ->>>> пак ти казвам - ако не си направил интерфейс чрез който "външни" приложения да имат достъп до "вътрешните" за контрола ти обекти (контроли) няма да имаш достъп до тях, и с изпращане на функцията ти Usercontrol1.Controls не можеш да направиш нищо...Пробвай го и ще видиш, явно ми говориш за нещо друго...



Отговор
в отговор на пpoГЪPMИcт #23

Re: Промяна на шрифта на контролите на Форма

пpoГЪPMИcт, прав си. С ресурсен файл не само че става лесно, бързо, качествено, и нищо не се пропуска, но и не се налага да се пише код за него. Само че като направя ресурсен файл, и в него има Английски и Български, програмата чете Regional settings, и установява Български език без да ме пита. Как мога да го накарам да работи на Английски от ресурсния файл?

----------------------------------
помислих, хареса ми, помислих пак...
Отговор
в отговор на Гeoprи #24

Re: Промяна на шрифта на контролите на Форма

Чакай са

Аз не съм казал, че това което си написал не е вярно.
Не съм го тествал, нямам и намерение да го тествам, но щом казваш значи е така. Вярвам ти!

Бии, за да те уважават!
Отговор
в отговор на Щиpлиц #25

Re: Промяна на шрифта на контролите на Форма

Значи, ще ти обясня аз как бях направил първото си приложение с няколко интерфейса. За него използвах ресурсен файл. Не твърдя, обаче че това което ще напиша е най-доброто и най-правилно решение.

Бях си направил само една таблица Neutral.

В нея номерата ми започваха от 10000. Като първите 2 цифри ми бяха за номер на езика, а другите 3 за номера на "текста". Значи ограничението в случая е, че можеш да имаш до 999 "текста" за всеки съответен език.
Т.е. за български номерата започваха от 10000 и свършваха на 10999, за английски от 11000 до 11999 и т.н.
Значи имах си една функция, която взимаше номера на съответния език, който се намираше в една глобална променлива умножаваше го по 1000 и добавяше номера на "текста":
Номер на текста в Neutral = Номер на езика *1000 + Номер на текста
И връщаше необходимият текст за необходимия език
И така го бях избягнал проблема с Regional Settings.

А и един чисто приятелски съвет от мене:
Въвеждай новите "текст"-ове в ресурсният файл само и единствено под Windows 2000 или Windows XP, за да имаш по малко проблеми после.

Бии, за да те уважават!
Отговор
в отговор на Ptr #26

Re: Get Item from point in List box

баси терикатщината

Отговор
в отговор на killall #27

Re: Как да си направим shortcut

Може би и аз бих ви дал една идея ако я приемете. Мисля, че бих ползвал XML файл ако ми се наложе да правя програма с мултиезикова поддръжка. Това за сега от видяните мнения смятам за най-доброто структурата не се прави сложно така, че не е проблем да се направи за всеки един контрол, форма, обект. Вече даже съм виждал такова решение мисля, че трябва да опитате.

Отговор
в отговор на DobyOne #28

Re: Как да си направим shortcut

Ще е добре и да покажеш малко код.

Отговор
#29

Re: Нещо полезно. XP style.

офф-топик:
Мамичката му на тоя !#$@%$# форум-софтуер!!!
Кога ще го оправят най-после!
"След това програмата ако бъде пусната под ХР - приема вида на визуалните контроли от виндоуса. Също така, ако има инсталиран" .... и каквото следва, е отрязано...


Отговор
в отговор на naki #30

Re: Нещо полезно. XP style.

Изключи си проксито, и опитай отново. Поста не е голям, но при лоша връзка може да отнеме 10-тина секунди.

Отговор
в отговор на Щиpлиц #31

Re: Нещо полезно. XP style.

Опа, не се изразих правилно!
Поста си го виждам целия, зарежда се веднага, но само ТОВА конкретното изречение не се вижда до край...
Разбира се като маркирам с мишката този ред + следващия (който е празен) и копирам в клипборда, после в Notepad, се вижда всичко, нооо си е досадно...
Чакай да видя как е с НетСкапе...


Отговор
в отговор на naki #32

Re: Нещо полезно. XP style.

Това е бъг на MSIE, който се проявява когато се използват <I> таг за наклонен текст или <PRE> таг за текст, който излиза така, както е набран в кода. В нашия случай имаме втория таг в кода- затова!

БАба...


Ама баба не е жена, вие не знаете ли?
Отговор
в отговор на БaбaИлиицa #33

Re: Нещо полезно. XP style.

Верно под Нетскейп е ОК!
Ама чакай малко, нали не целия текст е във <PRE> тагове?
Точно този текст дето излиза извън страницата сигурно не е с тях. Предполагам само source кода е с <PRE>...
Или то като има някъде <PRE> се скапва и това извън него?


Отговор
в отговор на Щиpлиц #34

Добавяне на 4ти бутон в titlebar

Ми аз търсех как да си минимизирам прогата в systray (ако някой има нещо- тук съм)... и не намерих естествено, обаче попаднах на друго готино нещо: модул, който добавя четвърти бутон в titlebar на формата. Например за заковаване AlwaysOnTop или за "минимизиране в трея" :) та ми се видя полезно нещо и затова го пускам тук. Апропо, ако сте с WinXP и някаква тема тип изгъзица (Както съм аз)... Това естествено няма да работи много правилно, защото бутонът ще е малко не на мястото си и ще е с различен интерфейс.

И накрая, трябва да си смените пътя до картинките на бутоните, които са в модула на някой си ред... два BMP файла! Кода се записва като модул *.BAS и се пъхва в проекта, а това се пише във формата:
'In the Form:

'-------------------------------------------------------
Private Sub Form_Initialize()
SubclassWindow hwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
' >>> WARNING if this isn't called before the application terminates VB WILL rash!!! <<<
StopSubclass
End Sub
'-------------------------------------------------------
това е кода на модула:
'-------------------------------------------------------
' Example of how to Add a button to the forms caption bar.
' Written by Aaron Young ([email protected])
' June 2001
'
'In a Module:
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _
ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Const SRCCOPY = &HCC0020
Private Const GWL_WNDPROC = (-4)
Private Const WM_NCACTIVATE = &H86
Private Const WM_NCCALCSIZE = &H83
Private Const WM_NCCREATE = &H81
Private Const WM_NCDESTROY = &H82
Private Const WM_NCHITTEST = &H84
Private Const WM_NCLBUTTONDBLCLK = &HA3
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const WM_NCLBUTTONUP = &HA2
Private Const WM_NCMBUTTONDBLCLK = &HA9
Private Const WM_NCMBUTTONDOWN = &HA7
Private Const WM_NCMBUTTONUP = &HA8
Private Const WM_NCMOUSEMOVE = &HA0
Private Const WM_NCPAINT = &H85
Private Const WM_NCRBUTTONDBLCLK = &HA6
Private Const WM_NCRBUTTONDOWN = &HA4
Private Const WM_NCRBUTTONUP = &HA5
Private Const WM_COMMAND = &H111
Private Const HTBORDER = 18
Private Const HTBOTTOM = 15
Private Const HTBOTTOMLEFT = 16
Private Const HTCAPTION = 2
Private Const HTBOTTOMRIGHT = 17
Private Const HTCLIENT = 1
Private Const HTERROR = (-2)
Private Const HTGROWBOX = 4
Private Const HTHSCROLL = 6
Private Const HTLEFT = 10
Private Const HTMAXBUTTON = 9
Private Const HTMENU = 5
Private Const HTMINBUTTON = 8
Private Const HTNOWHERE = 0
Private Const HTREDUCE = HTMINBUTTON
Private Const HTRIGHT = 11
Private Const HTSIZE = HTGROWBOX
Private Const HTSIZEFIRST = HTLEFT
Private Const HTSIZELAST = HTBOTTOMRIGHT
Private Const HTSYSMENU = 3
Private Const HTTOP = 12
Private Const HTTOPLEFT = 13
Private Const HTTOPRIGHT = 14
Private Const HTTRANSPARENT = (-1)
Private Const HTVSCROLL = 7
Private Const HTZOOM = HTMAXBUTTON
Private lWindowProc As Long
Private lWindowHandle As Long
Private lButtonDC As Long
Private lButtonDownDC As Long
Private tRECT As RECT, lWidth, lHeight
Private bDrawnDown As Boolean
Public Sub SubclassWindow(ByVal hwnd As Long)
Dim lDC As Long

' Get the Forms Device Context (DC)
lDC = GetDC(hwnd)
' Create 2 compatible DC's for the Up and Down button images
lButtonDC = CreateCompatibleDC(lDC)
lButtonDownDC = CreateCompatibleDC(lDC)
' Load the Up and Down button images into each DC respectively
' Images are 16x14 16 colors
Call SelectObject(lButtonDC, LoadPicture("C:\Happy.bmp"))
Call SelectObject(lButtonDownDC, LoadPicture("C:\HappyDN.bmp"))
' Release the forms DC
Call ReleaseDC(hwnd, lDC)
' Subclass the Form
lWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubWindowProc)
' Store the forms hWnd for processing later
lWindowHandle = hwnd
End Sub
Public Sub StopSubclass()
' Remove the Forms subclassing
Call SetWindowLong(lWindowHandle, GWL_WNDPROC, lWindowProc)
' Delete to 2 button image DC's
Call DeleteDC(lButtonDC)
Call DeleteDC(lButtonDownDC)
End Sub
Private Function SubWindowProc(ByVal hwnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
' Capture ALL messages going to the Form before they are processed
Static bDepressed As Boolean

Dim lDC As Long

' Call the default behaviour as normally we'll want to adjust it after the fact
SubWindowProc = CallWindowProc(lWindowProc, hwnd, Msg, wParam, lParam)

' Get the Forms current dimensions
Call GetWindowRect(hwnd, tRECT)

' Calculate the Forms Width and Height
lWidth = tRECT.Right - tRECT.Left
lHeight = tRECT.Bottom - tRECT.Top

Select Case Msg
Case WM_NCHITTEST
' See if the cursor is over our custom button
If IsOverButton(lParam) Then
' If it is, set the Capture to this window, allowing us to receive
' Input events as they happen instead of "after the fact"
SetCapture hwnd
' Tell the form our button is just the Caption bar (I don't know of a custom button HT Const)
SubWindowProc = HTCAPTION
End If

Case WM_NCLBUTTONDOWN
' If the left mouse button is pressed over our button, show a sunken image
If IsOverButton(lParam) Then
' Keep a flag so we know it's being pressed, (lets us to the fancy raise and sink
' as the mouse moves in and out of the button without letting the mouse button up.)
bDepressed = True
' Draw the sunken image of our button
PaintButton lButtonDownDC
' Tell the default Window handler we've processed this message
SubWindowProc = 0
End If
Case WM_NCLBUTTONUP
' If the left button is up, our button can no longer be being pressed
' so flag it and no longer depressed.
bDepressed = False
' If the mouse is over our button...
If IsOverButton(lParam) Then
' Draw the raised image
PaintButton lButtonDC
' Release sole capture of the Input messages
ReleaseCapture
' Tell the default handler, we've processed this message
SubWindowProc = 0
' Trigger our Click event
ButtonClickEvent
End If

Case WM_NCMOUSEMOVE
' If the mouse moves over our button and the left button is pressed..
If IsOverButton(lParam) And bDepressed Then
' Draw the sunken button image
PaintButton lButtonDownDC
Else
' Otherwise, if the image is currently sunken, raise it
If bDrawnDown Then
PaintButton lButtonDC
End If
' and release capture
ReleaseCapture
End If

Case WM_NCPAINT, WM_NCACTIVATE
' Redraw the button on PAINT and ACTIVATE events
PaintButton lButtonDC

End Select

End Function
Private Function LoWord(ByVal lValue As Long) As Long
LoWord = lValue And &HFFFF&
End Function
Private Function HiWord(ByVal lValue As Long) As Long
HiWord = (lValue / &H10000) And &HFFFF&
End Function
Private Function IsOverButton(ByVal lPos As Long)
' Determine if the specified Coords are within our custom button
Dim lX As Long, lY As Long
lX = (LoWord(lPos) - tRECT.Left)
lY = (HiWord(lPos) - tRECT.Top)
IsOverButton = (lX >= (lWidth - 75)) And (lX <= (lWidth - 61)) And (lY >= 6 And lY <= 22)
End Function
Private Function PaintButton(ByVal lImageDC As Long)
' Draw the specified image
Dim lDC As Long
' Track whether the button is currently drawn up or down.
bDrawnDown = (lImageDC = lButtonDownDC)
lDC = GetWindowDC(lWindowHandle)
BitBlt lDC, lWidth - 75, 6, 16, 14, lImageDC, 0, 0, SRCCOPY
Call ReleaseDC(lWindowHandle, lDC)
End Function
Private Sub ButtonClickEvent()
' Custom Button Event Code goes Here!
MsgBox "Smile!!"
End Sub
'-------------------------------------------------------



Ама баба не е жена, вие не знаете ли?

Редактирано от Щиpлиц на

Отговор
в отговор на Щиpлиц #35

Konvertirane na Desetichni chisla v dvoichni



Public Function Bin(ByVal Value As Long) As String
Dim mask As Long
Dim i As Long
If Value < 0 Then _
Bin = "1"
mask = &H40000000
For i = 31 To 1 Step -1
If (Value And mask) = mask Then
Bin = Bin & "1"
Else
If Len(Bin) Then _
Bin = Bin & 0
End If
mask = mask / 2
Next
End Function



Отговор
в отговор на БaбaИлиицa #36

System Try

Vjarno, njakoi moze li da ostavi tuka kod s koito moze da se postavja ikona i menu v System Try-ja? Vuv VB.NET stava mnogo lesno, no me interesuva kak stava vuv VB 6?
Blagodarja vi predvaritelno

Отговор
в отговор на nevil #37

Re: System Try

[линк]

Това е едно демо за минимизиране в systray с VB6. Има един модул и няколко ф-ции във формата, но рпедпочетох да го пусна като RAR с всичковътре! Пробвайте го... при мен работи!

БАба...


Ама баба не е жена, вие не знаете ли?
Отговор
в отговор на nevil #39

Re: System Try v.2

[линк]

Това е еднин по-добър вариант за икона в систрея, който открих- реализиран е с контрола, която е написана за целта CTL файл... Много е удобна и лесна за използване. Има методи за двойно кликване MouseDown и MouseUp, като засича ляв и десен бутон (не засича средния!)... Освен това има свойство ToolTip за иконата в трея.

А аз си поиграх и добавих и метод за смяна на иконата в трея, докато е минимизирано... Стана- работи, обаче нещо се поомазва с типовете, когато подавам файла с иконата към контролата... ако не е икона изгърмява! Може би трябва да се пипне още малко. Но работи в момента и е готино!

БАба...


Ама баба не е жена, вие не знаете ли?
Отговор