WinForms: צל לטופס ללא גבולות
-
יש לי טופס בצורת עיגול ע''י שהרקע של העיגול הוא בצבע אדום למשל והגדרתי את הצבע האדום כצבע שיהיה שקוף את הגבולות הגדרתי - ללא, וכך הטופס נראה עגול , השאלה שלי איך אפשר שיהיה צל לעיגול הזה כדרך שיש צל לטופס כאשר יש לו גבולות?
תודה לכולם.פורסם במקור בפורום CODE613 ב12/08/2013 09:04 (+03:00)
-
@דוד ל.ט.
"קובנציונאלית" אי אפשר.
לא הבנתי כוונתך.
מצאתי כמה קודים ברשת וחיברתי אותם לדבר אחד, התוצאה פתח גדול ליצירת טופס בכל צורה שיעלה על הדעת עם צל!
Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Drawing.Imaging Public Class Form1 Private WithEvents HS, VS As New HScrollBar Private Sub HScrollBars_Scroll(ByVal Sender As System.Object, ByVal E As System.Windows.Forms.ScrollEventArgs) Dim Gp As New GraphicsPath Dim WX, HY As Integer WX = Me.Width HY = Me.Height Dim Points(11) As Point Points(0) = New Point(0, HS.Value) Points(1) = New Point((HS.Value / VS.Value), (HS.Value / VS.Value)) Points(2) = New Point(HS.Value, 0) Points(3) = New Point((WX - HS.Value), 0) Points(4) = New Point((WX - (HS.Value / VS.Value)), (HS.Value / VS.Value)) Points(5) = New Point(WX, HS.Value) Points(6) = New Point(WX, (HY - HS.Value)) Points(7) = New Point((WX - (HS.Value / VS.Value)), (HY - (HS.Value / VS.Value))) Points(8) = New Point((WX - HS.Value), HY) Points(9) = New Point(HS.Value, HY) Points(10) = New Point((HS.Value / VS.Value), (HY - (HS.Value / VS.Value))) Points(11) = New Point(0, (HY - HS.Value)) For I As Integer = 0 To 11 Step 3 Gp.AddCurve(New Point() {Points(I), Points(I + 1), Points(I + 2)}) Next Me.Region = New Region(Gp) Gp.Dispose() End Sub Private Sub Form1_Load(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles MyBase.Load HS.Minimum = 1 VS.Minimum = 2 HS.Maximum = 100 VS.Maximum = 25 HS.Size = New Size(100, 20) VS.Size = New Size(100, 20) HS.Location = New Point(CInt((Width - 100) / 2), 0) VS.Location = New Point(CInt((Width - 100) / 2), 25) AddHandler HS.Scroll, AddressOf HScrollBars_Scroll AddHandler VS.Scroll, AddressOf HScrollBars_Scroll Me.Controls.AddRange(New Control() {HS, VS}) End Sub Dim CS_DROPSHADOW As Integer = 131072 Protected Overrides ReadOnly Property CreateParams As CreateParams Get ' add the drop shadow flag for automatically drawing ' a drop shadow around the form Dim cp As CreateParams = MyBase.CreateParams cp.ClassStyle = (cp.ClassStyle Or CS_DROPSHADOW) Return cp End Get End Property End Class
פורסם במקור בפורום CODE613 ב12/08/2013 22:29 (+03:00)
-
אפשר דוגמא? תודה.
הייתי עסוק, אז לא הספקתי להעלות.
הנה קוד XAML:<Window x:Class="Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStyle="None" AllowsTransparency="True" Background="Transparent" Title="Window1" Height="325" Width="325"> <Canvas Margin="10"> <Canvas.Effect> <DropShadowEffect BlurRadius="15" /> </Canvas.Effect> <Ellipse Fill="Bisque" Width="300" Height="300" > </Ellipse> <Grid Height="300" Width="300" > <Button Content="Button" HorizontalAlignment="Left" Margin="204,33,0,0" VerticalAlignment="Top" Width="75"/> </Grid> </Canvas> </Window>
תמונה/קובץ מצורף לא נמצא
פורסם במקור בפורום CODE613 ב14/08/2013 22:27 (+03:00)
-
@דוד ל.ט.
זה נותן כזה חלון:אצלי זה נתן אליפסה -
@דוד ל.ט.<Ellipse
לא כ"כ הבנתי את כוונתך.
אבל אתגרה בך יותר..
הקוד הזה:<Window x:Class="Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStyle="None" AllowsTransparency="True" Background="Transparent" Title="Window1" SizeToContent="WidthAndHeight" > <Grid Margin="25" Height="435" Width="362" > <Grid.Effect> <DropShadowEffect BlurRadius="15" /> </Grid.Effect> <Path Stretch="Fill" HorizontalAlignment="Left" Width="363" Fill="#FF99CDDE" > <Path.Data> <PathGeometry Figures="M131.889 150.061v63.597h-27.256 c-20.079 0-36.343 16.263-36.343 36.342v181.711c0 20.078 16.264 36.34 36.343 36.34h290.734c20.078 0 36.345-16.262 36.345-36.34 V250c0-20.079-16.267-36.342-36.345-36.342h-27.254v-63.597c0-65.232-52.882-118.111-118.112-118.111 S131.889 84.828 131.889 150.061z M177.317 213.658v-63.597c0-40.157 32.525-72.685 72.683-72.685 c40.158 0 72.685 32.528 72.685 72.685v63.597H177.317z M213.658 313.599c0-20.078 16.263-36.341 36.342-36.341 s36.341 16.263 36.341 36.341c0 12.812-6.634 24.079-16.625 30.529c0 0 3.55 21.446 7.542 46.699 c0 7.538-6.087 13.625-13.629 13.625h-27.258c-7.541 0-13.627-6.087-13.627-13.625l7.542-46.699 C220.294 337.678 213.658 326.41 213.658 313.599z" FillRule="evenodd"/> </Path.Data> </Path> <Button Content="נעל" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="40,408,0,0"/> <Button Content="פתח" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="248,408,0,0"/> </Grid> </Window>
נותן את XY (אני מפחד שלא תאהב את ההגדרה) הנראה כך:
שים לב שאת מפת הנקודות של הpath לא כתבתי ידנית.
אני נעזרתי בהמרה מSVG לXAML ע"י התוכנה inkspace,
אבל אפשר לצייר ישירות בBlend של מיקרוספט.אפשר להרשים הרבה יותר, רק שאני לא כ"כ כשרוני בזה ולא כ"כ פנוי.
תמונה/קובץ מצורף לא נמצא
פורסם במקור בפורום CODE613 ב15/08/2013 12:00 (+03:00)
-
באמת מרשים!
@דוד ל.ט.שים לב שאת מפת הנקודות של הpath לא כתבתי ידנית.
אני נעזרתי בהמרה מSVG לXAML ע"י התוכנה inkspace,
אבל אפשר לצייר ישירות בBlend של מיקרוספט.אם תוכל להרחיב קצת אודות inkspace ו בBlend
פורסם במקור בפורום CODE613 ב15/08/2013 13:09 (+03:00)
-
אין מה להרחיב.
התוכנה inkspace זו תוכנת גרפיקה וקטורית חינמית נראה לי, תוכנה ברמה, עם עברית.
בשמירה בשם יש אפשרות לייצא לXAML.התוכנה Blend זה בעצם כמה תוכנות. בתשלום, ושל מיקרוסופט.
המוכרת זה Expression. היא ייעודית לXAML.
בכל אופן בתוכנה הזו אפשר לצייר ולקבל את הXAML.פורסם במקור בפורום CODE613 ב15/08/2013 13:25 (+03:00)
-