Option Explicit
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
Public Sub GlassifyForm(frm As Form)
Const RGN_DIFF = 4
Const RGN_OR = 2
Dim outer_rgn As Long
Dim inner_rgn As Long
Dim wid As Single
Dim hgt As Single
Dim border_width As Single
Dim title_height As Single
Dim ctl_left As Single
Dim ctl_top As Single
Dim ctl_right As Single
Dim ctl_bottom As Single
Dim control_rgn As Long
Dim combined_rgn As Long
Dim ctl As Control
If WindowState = vbMinimized Then Exit Sub
' Create the main form region.
wid = ScaleX(Width, vbTwips, vbPixels)
hgt = ScaleY(Height, vbTwips, vbPixels)
outer_rgn = CreateRectRgn(0, 0, wid, hgt)
border_width = (wid - ScaleWidth) / 2
title_height = hgt - border_width - ScaleHeight
inner_rgn = CreateRectRgn( _
border_width, _
title_height, _
wid - border_width, _
hgt - border_width)
' Subtract the inner region from the outer.
combined_rgn = CreateRectRgn(0, 0, 0, 0)
CombineRgn combined_rgn, outer_rgn, _
inner_rgn, RGN_DIFF
' Create the control regions.
For Each ctl In Controls
If ctl.Container Is frm Then
ctl_left = ScaleX(ctl.Left, frm.ScaleMode, vbPixels) _
+ border_width
ctl_top = ScaleX(ctl.Top, frm.ScaleMode, vbPixels) _
+ title_height
ctl_right = ScaleX(ctl.Width, frm.ScaleMode, vbPixels) _
+ ctl_left
ctl_bottom = ScaleX(ctl.Height, frm.ScaleMode, vbPixels) _
+ ctl_top
control_rgn = CreateRectRgn( _
ctl_left, ctl_top, _
ctl_right, ctl_bottom)
CombineRgn combined_rgn, combined_rgn, _
control_rgn, RGN_OR
End If
Next ctl
' Restrict the window to the region.
SetWindowRgn hWnd, combined_rgn, True
End Sub
Private Sub Form_Load()
Me.ScaleMode = 3
End Sub
Private Sub Form_Resize()
GlassifyForm Me
End Sub
Silver Black ha scritto:(...)
Silver Black ha scritto:Ho trovato questo codice in uno dei miei esempi:
- Codice: Seleziona tutto
...
Non so se è proprio il risultato che vuoi ottenere tu...
DilanDog ha scritto:Grazie per l'esempio Silver, avevo trovato anche io qualcosa di simile girovagando quà e là per la rete, ma non è esattamente quello che cercavo, forse mi sono spiegato male. L'effetto trasparenza di cui parlavo forse è più qualcosa tipo "effetto vetro opaco", ovvero il corpo del form si dovrebbe vedere ma, in sottofondo con colori più tenui, si dovrebbe vedere anche quello che c'è "sotto", o meglio, dietro al form. L'ho visto ad esempio su un softwerino che monitorizza le risorse di rete (DuMeter, forse qualcuno lo conosce), si può anche regolare l'intensità della trasparenza
Silver Black ha scritto:
In Delphi sarebbe davvero banale... in VB più di così non posso aiutarti.
DilanDog ha scritto:Capito, è ora di comprare un buon manuale di Delphi, visto che sono riuscito finalmente ad avere l'ambiente di sviluppo della versione 2006 da provare....qualche consiglio su qualche valido testo?
Silver Black ha scritto:
Senza dubbio "Mastering Delphi 2006" di Marco Cantù. Anche il 2005 dovrebbe andare più che bene se non trovi quello aggiornato alla nuova versione (anche perché alcuni passi non sono ancora stati aggiornati, specialmente il codice, alla nuova versione).
Inoltre puoi iniziare con i libri "Essentials" sempre di Marco Cantù, che trovi in versione GRATUITA in PDF sul suo sito (www.marcocantu.com), anche in italiano: "Essential Pascal" ed "Essential Delphi". Prendili tutti e due, il primo si sofferma sulle basi del linguaggio, il secondo sul BDE. Tieni però presente che per gli argomenti fondamentali quali OOP e gestione delle eccezioni dovrai avvalerti del libro da acquistare.
Silver Black ha scritto:Beh, allora se il problema è la paura di trovarsi tra le mani un linguaggio morto, VB è GIA' ADESSO MORTO, visto che MS con .Net ha cambiato tutto, e anche VB.NET è completamente incompatibile col precedente.
Visitano il forum: Nessuno e 3 ospiti
megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising