Userform incl. Inhalt an Auflösung und Skalierung anpassen
Hallo zusammen,
ich werde noch wahnsinnig. Ich muss ein Userform incl. Label und in Zukunft 3 Buttons an die eingestellte Auflösung und Skalierung anpassen,
so das das Userform fast überall gleich aussieht aber auch bei großer Auflösung zum Beispiel 3440*1440 bei 100% Skalierung gut lesbar ist.
Diesen Code habe ich bisher.
Das Form passt soweit von der Größe her.
Aber das Label passt sich nicht dem Userform an. Die Buttons habe ich noch nicht erstellt.
Hat vielleicht einer ne Idee wie ich das am besten umsetzen kann?
Danke schonmal im voraus.
gfritz74
ich werde noch wahnsinnig. Ich muss ein Userform incl. Label und in Zukunft 3 Buttons an die eingestellte Auflösung und Skalierung anpassen,
so das das Userform fast überall gleich aussieht aber auch bei großer Auflösung zum Beispiel 3440*1440 bei 100% Skalierung gut lesbar ist.
Diesen Code habe ich bisher.
#Alle Variablen aus vorherigen Ausführungen entfernen
Remove-Variable * -ErrorAction SilentlyContinue
$ErrorActionPreference = "Continue"
#Assemblys laden
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# Bildschirmgröße ermitteln
$Screen = [Windows.Forms.Screen]::PrimaryScreen.WorkingArea | Select Width,Height
$SW = $screen.Width
$SH = $screen.Height
#Timerfenster erstellen
$TimerForm = New-Object System.Windows.Forms.Form
$TimerForm.StartPosition = "CenterScreen"
$TimerFormSW=$($sw / 1.8)
$TimerFormSH=$($sh / 1.5)
$TimerFormSW_Round=[math]::Round($TimerFormSW,0)
$TimerFormSH_Round=[math]::Round($TimerFormSH,0)
$TimerForm.ClientSize = "$TimerFormSW_Round,$TimerFormSH_Round"
$TimerForm.AutoScale = $true
$TimerForm.AutoScaleMode = "DPI"
#Berechnungen
$Global:LabelSizeSW = $($TimerFormSW_Round-100)
$Global:LabelSizeSH = $($TimerFormSH_Round-100)
function New-Label #Label hinzufügen
{
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)]$height, #Höhe
[Parameter(Mandatory=$true)]$width, #Breite
[Parameter(Mandatory=$true)]$locx, #X-Pos
[Parameter(Mandatory=$true)]$locy, #Y-Pos
[string]$text = "Label Text",
[ValidateSet("BottomCenter", "BottomLeft", "BottomRight", "MiddleCenter","MiddleLeft","MiddleRight","TopCenter","TopLeft","TopRight")][string]$alignment = "MiddleLeft",
[string]$style = "None",
[switch]$autosize = $false
)
$label = New-Object System.Windows.Forms.Label
$label.Size = New-Object System.Drawing.Size($Global:LabelSizeSW,$Global:LabelSizeSH)
$label.Location = New-Object System.Drawing.Size($locx,$locy)
$label.Text = $text
$label.TextAlign = $alignment
$label.BorderStyle = $style
$label.AutoSize = $autosize
#$label.TextAlign = "MiddleRight"
return $label
}
$labeltimer = New-Label -width($($sw)) -Height($($sh)) -locx 25 -locy 25 -text "Nach der Installation von Sicherheitsupdates ist ein Neustart des Computers zwingend erforderlich.`nDieser ist auch nach mehreren Hinweisen nicht erfolgt.`n`nZur Wahrung der Sicherheitsniveuas muss dieser Heute erfolgen.`n`nSie haben nun noch einmalig die Möglichkeit den Restart zu verschieben.`nAnsonsten sichern Sie Ihre Daten, schließen die geöffneten Anwendung und klicken anschließend auf`nden Button Neustart.`n`nWARNUNG: Der Rechner wird nach Ablauf der Zeit neu gestartet!`n`nVielen Dank ihr IT-Services-Team"
$labeltimer.AutoSize = $true
$Font = New-Object System.Drawing.Font("Arial",20,[System.Drawing.FontStyle]::Bold,[System.Drawing.GraphicsUnit]::Pixel)
$labeltimer.font = $font
$TimerForm.Controls.Add($labeltimer)
$TimerForm.ShowDialog()
Aber das Label passt sich nicht dem Userform an. Die Buttons habe ich noch nicht erstellt.
Hat vielleicht einer ne Idee wie ich das am besten umsetzen kann?
Danke schonmal im voraus.
gfritz74
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1324133736
Url: https://administrator.de/contentid/1324133736
Ausgedruckt am: 25.11.2024 um 16:11 Uhr
7 Kommentare
Neuester Kommentar
Zitat von @mayho33:
Warum lädst du dir nicht VS Studio Community, malst da deine WPF-Gui, nimmst dann das Xaml und bindest es in dein PS ein?
Dieses Forms-Gefummel... ist doch schon vor 15 Jahren gestorben.
Eben...Warum lädst du dir nicht VS Studio Community, malst da deine WPF-Gui, nimmst dann das Xaml und bindest es in dein PS ein?
Dieses Forms-Gefummel... ist doch schon vor 15 Jahren gestorben.
Mal was zum Basteln ...
Add-Type -AssemblyName Presentationframework
[string]$xaml = @"
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Nachricht" WindowStartupLocation="CenterScreen">
<Grid>
<Grid.ColumnDefinitions>
</Grid.ColumnDefinitions>
<Viewbox Margin="10">
<TextBlock x:Name="textBlock" TextWrapping="Wrap" Text="" FontWeight="Bold" VerticalAlignment="Center" TextAlignment="Center" Width="500"/>
</Viewbox>
</Grid>
</Window>
"@
$window=[Windows.Markup.XamlReader]::Parse($xaml)
$txt = $window.FindName("textBlock")
$txt.Text = 'Donec commodo eget felis sed vehicula. Suspendisse pretium ultrices quam in iaculis. Aliquam a vulputate nisl. Etiam quam nunc, dictum ac nulla vel, posuere hendrerit metus. Quisque ante lacus, adipiscing id elit vel, ornare consectetur nisi. Etiam pretium, sapien vitae lobortis tempor, nibh justo cursus orci, non dapibus magna sapien quis enim. Phasellus rutrum elit justo, id pellentesque magna tempus dapibus. Etiam sed augue eros. Cras nec varius eros. Aenean sodales tincidunt dolor. Nunc ac metus tristique, porttitor justo eu, luctus diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut egestas libero quis velit volutpat, at scelerisque mauris porttitor.'
$async = $window.Dispatcher.InvokeAsync({$window.ShowDialog() | Out-Null})
$async.Wait() | Out-Null
Brauchst du nicht, du brauchst von Visual Studio nur den WPF-Designer und davon dann nur den XAML Code per Copy n Paste in mein Beispiel .
Also neues Projekt -> "WPF-Anwendung", dann die Form gestalten, den XAML Code kopieren, ein paar Namespaces und die Klasse aus dem Window-Element raus löschen und mit der Powershell wie in meinem Beispiel oben kombinieren.
XAML Referenz
https://docs.microsoft.com/de-de/dotnet/desktop/wpf/advanced/xaml-syntax ...
Also neues Projekt -> "WPF-Anwendung", dann die Form gestalten, den XAML Code kopieren, ein paar Namespaces und die Klasse aus dem Window-Element raus löschen und mit der Powershell wie in meinem Beispiel oben kombinieren.
XAML Referenz
https://docs.microsoft.com/de-de/dotnet/desktop/wpf/advanced/xaml-syntax ...
Zitat von @gfritz74:
Darf ich dich um den gefallen bitten mir das zu bauen und mir den Code zu schicken? Wäre echt super nett von Dir. Falls ja würde ich Dir schreiben was da rein muss.
Steht doch schon oben ...Darf ich dich um den gefallen bitten mir das zu bauen und mir den Code zu schicken? Wäre echt super nett von Dir. Falls ja würde ich Dir schreiben was da rein muss.