gfritz74
Goto Top

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.
#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()
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

Content-ID: 1324133736

Url: https://administrator.de/contentid/1324133736

Ausgedruckt am: 25.11.2024 um 16:11 Uhr

mayho33
mayho33 30.09.2021 um 11:15:47 Uhr
Goto Top
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.

Grüße!
149569
149569 30.09.2021 aktualisiert um 11:34:22 Uhr
Goto Top
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...
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
gfritz74
gfritz74 30.09.2021 um 12:42:03 Uhr
Goto Top
habe mir VS Studio installiert. Aber da kann ich kein PowerShell drin machen.
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.

Grüße!

Hab ich mir grade installiert. Aber wie bekomme ich da PowerShell mit rein?
149569
149569 30.09.2021 aktualisiert um 12:55:43 Uhr
Goto Top
Zitat von @gfritz74:
Hab ich mir grade installiert. Aber wie bekomme ich da PowerShell mit rein?
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 face-smile.

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 ...
gfritz74
gfritz74 30.09.2021 um 13:34:53 Uhr
Goto Top
habe mir VS Studio installiert. Aber da kann ich kein PowerShell drin machen.
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.

Grüße!

Hab ich mir grade installiert. Aber wie bekomme ich da PowerShell mit rein?
Zitat von @149569:

Zitat von @gfritz74:
Hab ich mir grade installiert. Aber wie bekomme ich da PowerShell mit rein?
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 face-smile.

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 ...

Sorry krieg ich nicht hin. Das passt alles vorne und hinten nicht. Habe leider nicht die Zeit um mich da rein zu lesen und zu arbeiten. Ich muss das Projekt bis morgen fertig haben. 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.
149569
Lösung 149569 30.09.2021 um 15:44:54 Uhr
Goto Top
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 ...
gfritz74
gfritz74 30.09.2021, aktualisiert am 21.04.2022 um 17:03:49 Uhr
Goto Top
Ja aber da müssen ja noch 3 Buttons rein und noch ein Label für einen Timer.
Hab Dir mal ein Bild reingemacht wie das ganze aussehen soll.
Ist aber echt wichtig das sich das Form der Auflösung anpasst und die Skalierung des Rechners berücksichtigt.
Das Formular soll nicht schließbar , nicht maximier und nicht minimier bar sein.
Das wäre echt sehr nett von Dir.

timer

Zitat von @149569:

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 ...