| |
VB.NET - Ein- und UmsteigerTooltips in Symbolleisten Schriftgrösse ändern und Frage zu Combobox min. Breite | | | Autor: Dideldum | Datum: 30.01.23 00:31 |
| Hi Ihr,
1.
da ich in meinem Kundenkreis einen Kunden habe, der Glasbausteine als Brillengläser braucht und dennoch fast nichts sieht, habe ich die Schriften in meinem Projekt bis fast ins Unendliche vergrösserbar gemacht.
Das klappt soweit auch prima.
Nur die Systemdialog-Fenster und die im Titel genannten Tooltips in den Symbolleisten sperren sich gegen meine Versuche, deren Schriftgrösse dynamisch an +10Dioptrien anpassen zu können.
Gibt es hierfür vielleicht eine Lösung, deren Schriftgrösse dynamisch zu ändern?
2.
Kann man die Breite von Comboboxen auch unter 75Pixel definieren?
Ich habe eine CoBo, welche nur zweistellige Zahlen beinhaltet und die Listeneinträge sehen in der CoBo doch recht verloren aus.
Aber das VB.net meint, dass es CoBos unter 75 Pixeln Breite nicht mag.
Selbst, wenn ich die DropDownWidth auf z.B. 50Px stelle, will das VS die CoBo mit minimal 75Px haben.
Gibt es hierfür vielleicht eine Lösung, um die CoBo schmaler hinzubekommen? | |
Re: Tooltips in Symbolleisten Schriftgrösse ändern und Frage zu Combobox min. Breite | | | Autor: Manfred X | Datum: 30.01.23 08:26 |
| Hallo!
Die Anpassung der Anzeige-Größe sollte über die Windows-Einstellungen erfolgen.
Es gibt auch eine Bildschirmlupe.
In Formularen sollte man die Schriftgröße nur anpassen bei Controls, die
dafür vorgesehen sind, weil sie bei fester Controlgröße (Clientsize) verschiedene
Schriften darstellen können. Alles andere bringt die Gestalt Deines Formulars
schnell durcheinander.
Hast Du bei Deiner Combobox irgendwelche automatischen Anpassung (z.B. Anchor)
eingestellt?
Dim cbo As New ComboBox With _
{.Parent = Me, .Width = 50, .DropDownWidth = 20, .DropDownStyle = _
ComboBoxStyle.DropDownList} Einen Ersatz für die Tooltips könntest Du selbst programmieren.
Ein Fenster mit einem Label oder einer Readonly-Textbox, das Timergesteuert
angezeigt und wider unsichtbar gemacht wird, sobald die Maus über einem
Control verweilt - der passende Tiptext wäre z.B. der Tag-Eigenschaft des
Controls zu entnehmen.
Beitrag wurde zuletzt am 30.01.23 um 08:54:57 editiert. | |
Re: Tooltips in Symbolleisten Schriftgrösse ändern und Frage zu Combobox min. Breite | | | Autor: Dideldum | Datum: 30.01.23 15:25 |
| Hallo Manfred,
danke Dir für die Tips.
Ich kann am Rechner des Kunden die DPI-Auflösung nicht > 125% einstellen, da ansonsten der Screen nicht mehr für seine seine Desktop-Symbole ausreicht und andere Programme Probleme machen.
Der Gute ist schon Ü90, aber immer noch sehr produktiv.
Nur darf ich dem eben nichts von seiner gewohnten Ordnung am Desktop durcheinanderbringen - das würde er nimmer überreissen.
Daher habe ich den Umweg über Font-Resize direkt im Programm genommen.
Die CoBo liegt in einer Symbolleiste - darin finde ich weder die Eigenschaften "Anchor" noch "Dock".
Habs gefunden: "Autosize" war "True". Mit "False" kann ich die Breite reduzieren.
Das war der Übeltäter.
Ja, das mit dem Eigenbau von Tooltips ging mir auch schon durch den Kopf.
Aber das hiesse ja jedes Element einzeln verknüpfen.
Recht viel Arbeit für so geringen Nutzen...
Beste Grüsse
Hubert | |
Re: Tooltips in Symbolleisten Schriftgrösse ändern und Frage zu Combobox min. Breite | | | Autor: Manfred X | Datum: 30.01.23 21:14 |
| Hallo!
Du könntest ein zuätzliches Formular erstellen, dass eine öffentliche Eigenschaft besitzt,
auf die man einen Container oder ein Control zuweisen kann.
Dazu kommen zwei winzige Buttons zur Ermittlung der Tab-Reaktion des Benutzers.
Sobald die Maus für einige Sekunden über einem Control in der Basisform steht, wird eine Referenz
auf die Eigenschaft des obigen Formulars zugewiesen, die Größe des Controls dort maximiert und das
Formular sichtbar gemacht.
Bei einer entsprechenden Benutzerreaktion oder dem Fokus-Verlust des Controls
wird die Ausgangsgröße und Position wieder hergestellt und das Formular unsichtbar.
Der Fokus im Basisformular wird ggf. geeignet umgesetzt. | |
Re: Tooltips in Symbolleisten Schriftgrösse ändern und Frage zu Combobox min. Breite | | | Autor: Dideldum | Datum: 30.01.23 21:32 |
| Hallo Manfred,
besten Dank, dass Du Dir darüber Gedanken machst.
Aber ich denke, damit muss mein Kunde eben leben.
Tooltips sind ja nicht das einzige Problem mit u.U. zu kleiner Schrift.
Da kommen ja die ganzen System-Dialoge dazu, wie FolderBrowserDialog, openFileDialog, saveFileDialog, ColorPicker, fontDialog usw.
Bei denen ist wohl eh Hopfen und Malz verloren.
Ich habe zumindest nichts gefunden, um deren Schriftgrösse dynamisch ändern zu können. | |
Einfache Bildschirmlupe | | | Autor: Manfred X | Datum: 31.01.23 09:00 |
| Hallo!
Ein Bereich um die aktuelle Mausposition wird in eine
verschiebbare und größenänderbare Picturebox auf einer Form kopiert
und dabei um einen Faktor vergrößert.
Public Class frmLupe
Dim fc As Double = 4
Dim pb As New PictureBox With {.Parent = Me, .Dock = DockStyle.Fill,
.BackColor = Color.White, .SizeMode = PictureBoxSizeMode.Zoom}
Dim bmp As Bitmap
Dim WithEvents timCopy As New Timer With {.Interval = 500, .Enabled = True}
Private Sub timCopy_Tick(sender As Object, e As EventArgs) Handles _
timCopy.Tick
'Aktuelle Größe der Lupe
Dim w As Integer = pb.Width
Dim h As Integer = pb.Height
'Größe des darstellbaren Bildschirmabschnitts
Dim sw As Integer = w / fc
Dim sh As Integer = h / fc
'Position des Bildschirmabschnitts gemäß Mausposition
Dim mt As Integer = Me.MousePosition.Y
Dim ml As Integer = Me.MousePosition.X
mt = Math.Max(0, mt - sh \ 2)
ml = Math.Max(0, ml - sw \ 2)
If bmp IsNot Nothing Then
bmp.Dispose()
bmp = Nothing
End If
bmp = New Bitmap(sw, sh)
Using g As Graphics = Graphics.FromImage(bmp)
'Kopieren des Bildschirmabschnitts in die Bitmap
g.CopyFromScreen(New Point(ml, mt), New Point(0, 0), New _
Drawing.Size(sw, sh))
'Anzeigen
pb.Image = bmp
End Using
End Sub
End Class Man kann eine derartige Funktion auch in eine Anwendung integrieren und z.B. beim Aktivieren eines
Eingabecontrols oder einer Combobox eine Kennung setzen, durch die der Lupen-Timer (im Tick) angewiesen wird,
nicht die Mausposition, sondern die Cursorposition als Zentrum des vergrößerten Ausschnitts zu nutzen.
Beim Wechsel des Fokus wird dann wieder auf die Maus geschaltet.
Formularglobale boolsche Variable (Property): UseMousePosition
Beitrag wurde zuletzt am 31.01.23 um 09:16:31 editiert. | |
Re: Einfache Bildschirmlupe | | | Autor: Dideldum | Datum: 31.01.23 15:27 |
| Wow, das hört sich ja super an.
Danke Dir recht sakrisch!
Wenn ich das Projekt fertig habe, baue ich diese Form-Lupe noch für meinen augenschwachen Kunden ein.
Der wird sich sicher darüber freuen. | |
Bildschirmlupe folgt auch RichText-Caret | | | Autor: Manfred X | Datum: 01.02.23 09:24 |
| Hallo!
Bei Einbau in eine Anwendung folgt die Lupe alternativ dem Cursor einer
fokussierten Richtextbox, wenn eine Referenz auf "RTBtoShow" zugewiesen ist.
Nach Zuweisung von Nothing (bei Fokusverlust/Lostfocus-Event) wird wieder
der Mausposition gefolgt.
Public Class frmLupe
Dim fc As Double = 4
Dim pb As New PictureBox With {.Parent = Me, .Dock = DockStyle.Fill,
.BackColor = Color.White, .SizeMode = PictureBoxSizeMode.Zoom}
Dim bmp As Bitmap
Dim WithEvents timCopy As New Timer With {.Interval = 500, .Enabled = True}
Public RTBtoShow As RichTextBox
Private Sub timCopy_Tick(sender As Object, e As EventArgs) Handles _
timCopy.Tick
If RTBtoShow Is Nothing Then
ShowScreen()
Else
ShowRichText()
End If
End Sub
Private Sub ShowScreen()
Dim sz As Size = GetAreaSize()
Dim mt As Integer = Me.MousePosition.Y
Dim ml As Integer = Me.MousePosition.X
mt = Math.Max(0, mt - sz.Height \ 2)
ml = Math.Max(0, ml - sz.Width \ 2)
SetBitmap(New Point(ml, mt), sz)
End Sub
Private Function GetAreaSize() As Size
Return New Size(pb.Width / fc, pb.Height / fc)
End Function
Private Sub SetBitmap(pos As Point, sz As Size)
If Size.Height < 5 Then Return
If bmp IsNot Nothing Then
bmp.Dispose()
bmp = Nothing
End If
bmp = New Bitmap(sz.Width, sz.Height)
Using g As Graphics = Graphics.FromImage(bmp)
g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.CopyFromScreen(pos, New Point(0, 0), sz)
End Using
pb.Image = bmp
End Sub
Private Sub ShowRichText()
Dim sz As Size = GetAreaSize()
Dim sp As Point
With RTBtoShow
sp =
.PointToScreen(.GetPositionFromCharIndex(.SelectionStart))
End With
Dim ct As Integer = Math.Max(0, sp.Y - sz.Height \ 2)
Dim cl As Integer = Math.Max(0, sp.X - sz.Width \ 2)
SetBitmap(New Point(cl, ct), sz)
End Sub
End Class
Beitrag wurde zuletzt am 01.02.23 um 09:26:38 editiert. | |
Re: Bildschirmlupe folgt auch Datagridview-Zellen | | | Autor: Manfred X | Datum: 01.02.23 10:32 |
| Zusätzliche Memebervariable (gesetzt im Hauptformular bei
GotFocus und Lostfocus der Grid) und Erweiterung des Timer-Eventhandlers
im obigen Formular:
Public GridtoShow As DataGridView
Private Sub timCopy_Tick(sender As Object, e As EventArgs) Handles timCopy.Tick
If RTBtoShow IsNot Nothing Then
ShowRichText()
ElseIf GridtoShow IsNot Nothing Then
ShowGrid()
Else
ShowScreen()
End If
End Sub Code für die Anzeige der jeweils aktiven Grid-Zelle:
Private Sub ShowGrid()
Dim sz As Size = GetAreaSize()
Dim sp As Point
With GridtoShow
Dim r As Rectangle =
.GetCellDisplayRectangle(.CurrentCell.ColumnIndex, _
.CurrentCell.RowIndex, True)
sp = .PointToScreen(r.Location)
End With
Dim ct As Integer = Math.Max(0, sp.Y - sz.Height \ 2)
Dim cl As Integer = Math.Max(0, sp.X - sz.Width \ 2)
SetBitmap(New Point(cl, ct), sz)
End Sub | |
Re: Bildschirmlupe folgt auch Textbox-Caret | | | Autor: Manfred X | Datum: 01.02.23 11:22 |
| Für einfache Textboxen benötigt man eine API-Function
Private Declare Function GetCaretPos Lib "user32" (ByRef lpPoint As Point) As _
Integer
Public Texttoshow As TextBox
Private Sub ShowText()
Dim sz As Size = GetAreaSize()
Dim tp As Point
Dim ret As Integer = GetCaretPos(tp)
Dim sp As Point
sp = Texttoshow.PointToScreen(tp)
Dim ct As Integer = Math.Max(0, sp.Y - sz.Height \ 2)
Dim cl As Integer = Math.Max(0, sp.X - sz.Width \ 2)
SetBitmap(New Point(cl, ct), sz)
End Sub
Beitrag wurde zuletzt am 01.02.23 um 11:23:06 editiert. | |
Re: Tooltips in Symbolleisten Schriftgrösse ändern und Frage zu Combobox min. Breite | | | Autor: Dideldum | Datum: 01.02.23 19:23 |
| Supi, danke Dir vielmals! | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|