vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Tooltips 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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel