Мне нужна помощь, пожалуйста.
Если вы запустите этот код PowerShell, вы увидите две строки, отображаемые разными цветами.
Clear-Host
$ESC = [char]27
"$ESC[38;2;102;255;255m$('Can you see this?')$ESC[0m"
Function DisplayEscapeCodes
{
"$ESC[38;2;153;51;255m$('What about this?')$ESC[0m"
}
DisplayEscapeCodes
У меня проблема при попытке отображать цветной текст с помощью управляющих кодов внутри формы PowerShell. Если вы запустите приведенный ниже код, будет отображаться только текст «Вы видите это?»
Clear-Host
$ESC = [char]27
"$ESC[38;2;102;255;255m$('Can you see this?')$ESC[0m"
Function EndForm
{
"$ESC[38;2;2;102;78m$('Or this?')$ESC[0m"
$OKButton.Dispose();
$Form.Dispose();
$Form.Close()
}
Function DisplayEscapeCodes
{
EndForm
"$ESC[38;2;153;51;255m$('What about this?')$ESC[0m"
}
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "Test"
$Form.Font = New-Object System.Drawing.Font('Segoe UI Light',14,[System.Drawing.FontStyle]::Regular)
$Form.Size = New-Object System.Drawing.Size(400,400)
$Form.MinimizeBox = $False
$Form.MaximizeBox = $False
$Form.ControlBox = $False
$Form.ShowIcon = $False
$Form.BackColor = "White"
$Form.ForeColor = "Black"
$Form.WindowState = "Normal"
$Form.FormBorderStyle = "Fixed3D"
$Form.ShowInTaskbar = $False
$Form.StartPosition = "CenterScreen"
$Form.Topmost = $True
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(150,200)
$OKButton.Size = New-Object System.Drawing.Size(80,40)
$OKButton.Text = "OK"
$OKButton.Add_Click({Write-Host (DisplayEscapeCodes)})
$Form.Controls.Add($OKButton)
$Form.ShowDialog() | Out-Null
Это ошибка или я что-то не так делаю? Мне нужно использовать escape-коды, потому что они предоставляют гораздо больше, чем стандартные 16 цветов PowerShell.
Заранее спасибо за вашу помощь.
Благодаря Мартину, я смог получить "Как насчет это?" текст, чтобы появиться, внеся изменения, которые он предложил. Как я уже упоминал, я упростил код, чтобы было легче следовать. Если я изменю функцию DisplayEscapeCodes, как показано ниже, она не совсем работает, как я надеялся.
Function DisplayEscapeCodes
{
EndForm
"$ESC[38;2;153;51;255m$('What about this?')$ESC[0m"
"$ESC[38;2;204;0;204m$('And this?')$ESC[0m"
}
Оба текстовых блока появляются, но на одной строке и в одном цвете. Есть идеи?