Comboboxgadget: Vertikale Ausrichtung des Inhalts
Comboboxgadget: Vertikale Ausrichtung des Inhalts
Hallo,
gibt es unter Windows eine Möglichkeit den Inhalt eines ComboBoxGadget
vertikal auszurichten? (in meinem Fall zentriert)
Ich habe hier ein CBG mit 20Pixel Höhe. Schriftart ist Verdana 10.
Leider wird der Text dabei nicht vertikal zentriert angezeigt, sondern ist
nach unten versetzt und zum Teil abgeschnitten, wobei die 20 Pixel vom
CBG locker reichen würden.
Da andere Gadgets (String, Date, ..) ebenfalls mit 20 Pixelhöhe wunderbar
zurechtkommen und die GUI bereits komplett auf 20 Pixel optimiert ist
(sehr viele Gadgets aufgeteilt in einigen FrameGadgets), möchte ich nur
sehr ungern die komplette GUI nochmals zerpflügen..
Das meine ich:
Hat jemand einen Tipp für mich? Gerne auch Win-API..
Danke
gibt es unter Windows eine Möglichkeit den Inhalt eines ComboBoxGadget
vertikal auszurichten? (in meinem Fall zentriert)
Ich habe hier ein CBG mit 20Pixel Höhe. Schriftart ist Verdana 10.
Leider wird der Text dabei nicht vertikal zentriert angezeigt, sondern ist
nach unten versetzt und zum Teil abgeschnitten, wobei die 20 Pixel vom
CBG locker reichen würden.
Da andere Gadgets (String, Date, ..) ebenfalls mit 20 Pixelhöhe wunderbar
zurechtkommen und die GUI bereits komplett auf 20 Pixel optimiert ist
(sehr viele Gadgets aufgeteilt in einigen FrameGadgets), möchte ich nur
sehr ungern die komplette GUI nochmals zerpflügen..
Das meine ich:
Hat jemand einen Tipp für mich? Gerne auch Win-API..
Danke
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: Comboboxgadget: Vertikale Ausrichtung des Inhalts
ich nehme an du meinst den Text im Editfeld der ComboBox
GetComboBoxInfo_() liefert dir das Handle vom Editfeld
und dann kannst du mit Apibefehlen fürs Editgadget den Text dort manipulieren
also mit #EM_GETCHARFORMAT und #EM_SETCHARFORMAT
Allerdings verstehe ich nicht das der Fehler überhaupt auftritt, ist mir noch nicht untergekommen.
GetComboBoxInfo_() liefert dir das Handle vom Editfeld
und dann kannst du mit Apibefehlen fürs Editgadget den Text dort manipulieren
also mit #EM_GETCHARFORMAT und #EM_SETCHARFORMAT
Allerdings verstehe ich nicht das der Fehler überhaupt auftritt, ist mir noch nicht untergekommen.
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Re: Comboboxgadget: Vertikale Ausrichtung des Inhalts
Nein, meint er nicht. Er meint die ComboBox ohne #PB_ComboBox_Editable, wie man es in seinem Screenshot gut sehen kann.hjbremer hat geschrieben:ich nehme an du meinst den Text im Editfeld der ComboBox
Mit #PB_ComboBox_Editable hätte ich auch eine Lösung, aber ohne ist soweit ich weiß nur mit Ownerdraw-Callback möglich.
Re: Comboboxgadget: Vertikale Ausrichtung des Inhalts
Hallo techniker,
normalerweise wird der Text in einer Combobox vertikal in der Mitte (Center) und linksbündig (Horizontal left) angezeigt.
Also werden deine anderen ComboBoxGadget-Einträge korrekt angezeigt ?
Hast du schon einmal die "Moderne Themen Unterstützung" deaktiviert ? (Test)
Werden die Einträge beim Aufklappen der Boxen korrekt vertikal positioniert ?
Eine größere Sichtbarkeit (ohne Veränderung des Ausgangs-Gadgets) wäre:
SendMessage_(GadgetID(#Fragezeichen),#CB_SETITEMHEIGHT,0,30)
Ansonsten müsstest du dich mit diesem Flag anfreunden:
ComboBoxGadget(#Fragezeichen, 0, 0, 200, 20, #CBS_OWNERDRAWFIXED)
Du kannst nämlich auch direkt auf die Combobox-Einträge zeichnen.
Das kann dir sicherlich ein Windows-API-Spezialist hier im Forum erklären.
normalerweise wird der Text in einer Combobox vertikal in der Mitte (Center) und linksbündig (Horizontal left) angezeigt.
Also werden deine anderen ComboBoxGadget-Einträge korrekt angezeigt ?
Hast du schon einmal die "Moderne Themen Unterstützung" deaktiviert ? (Test)
Werden die Einträge beim Aufklappen der Boxen korrekt vertikal positioniert ?
Eine größere Sichtbarkeit (ohne Veränderung des Ausgangs-Gadgets) wäre:
SendMessage_(GadgetID(#Fragezeichen),#CB_SETITEMHEIGHT,0,30)
Ansonsten müsstest du dich mit diesem Flag anfreunden:
ComboBoxGadget(#Fragezeichen, 0, 0, 200, 20, #CBS_OWNERDRAWFIXED)
Du kannst nämlich auch direkt auf die Combobox-Einträge zeichnen.
Das kann dir sicherlich ein Windows-API-Spezialist hier im Forum erklären.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: Comboboxgadget: Vertikale Ausrichtung des Inhalts
Hallo ccode_new,
Anscheinend hat das CBG einen festen, oberen Pixelwert über dem Text, bevor dieser gezeichnet wird..?!?
Schade, dass dies wohl nicht so einfach funktioniert.
Eine andere Frage:
Gibt es die Möglichkeit die Textfarbe des ausgewählten Elements (nicht die Auswahlliste) zu ändern?
Oder noch besser die Hintergrundfarbe des CBG (nicht die Auswahlliste)?
Dabei soll dem User eine nicht freigegebene, aber dennoch zulässige Auswahlkombination über mehrere CBG aufgezeigt werden.
Danke.
Nein. Der Text ist vertikal oben und horizontal linksbünding ausgerichtet.normalerweise wird der Text in einer Combobox vertikal in der Mitte (Center) und linksbündig (Horizontal left) angezeigt.
Anscheinend hat das CBG einen festen, oberen Pixelwert über dem Text, bevor dieser gezeichnet wird..?!?
Schade, dass dies wohl nicht so einfach funktioniert.
Eine andere Frage:
Gibt es die Möglichkeit die Textfarbe des ausgewählten Elements (nicht die Auswahlliste) zu ändern?
Oder noch besser die Hintergrundfarbe des CBG (nicht die Auswahlliste)?
Dabei soll dem User eine nicht freigegebene, aber dennoch zulässige Auswahlkombination über mehrere CBG aufgezeigt werden.
Danke.
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
Re: Comboboxgadget: Vertikale Ausrichtung des Inhalts
Mal abgesehen davon, dass 20px bei Verdana 10 auch für ein normales Textfeld eigentlich zu klein ist und mindestens 21px hoch sein sollte, wäre ein einfacher Workaround die Schriftgröße in Comboboxen auf 8 zu reduzieren.techniker hat geschrieben:...
Ich habe hier ein CBG mit 20Pixel Höhe. Schriftart ist Verdana 10.
Leider wird der Text dabei nicht vertikal zentriert angezeigt, sondern ist
nach unten versetzt und zum Teil abgeschnitten, wobei die 20 Pixel vom
CBG locker reichen würden. ...
Michael Hack
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Re: Comboboxgadget: Vertikale Ausrichtung des Inhalts
Diesen Weg habe ich bereits beschritten: Gadgets auf 22px erhöht und Font auf 9pt reduziert.mhs hat geschrieben: ..wäre ein einfacher Workaround die Schriftgröße in Comboboxen auf 8 zu reduzieren.
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])
Re: Comboboxgadget: Vertikale Ausrichtung des Inhalts
Du hast vollkommen recht.Nein. Der Text ist vertikal oben und horizontal linksbünding ausgerichtet
Ich bin aber auch zu blöd.
Die Verwendung einer kleineren Schriftart wäre der einfachste Weg.
Aber es muss auch eine Möglichkeit über die Windows-API geben, um den Text vertikal in einer Combobox auszurichten. Ich kenne dieses Verhalten auch von einem anderen Windowsprogramm. Dort wird per Standard der Text in einer Combobox vertikal in der Mitte ausgerichtet.
Ich bin mir zwar noch nicht ganz sicher ob dort per Standard angepasste Boxen verwendet werden. Aber grundsätzlich müsste es trotzdem ohne externes Framework (wx, gtk, qt, .net) über die Windows 32 API gehen.
Ich werde mich mal heute Abend mit dem Thema befassen.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: Comboboxgadget: Vertikale Ausrichtung des Inhalts
Hallöchen!!!
Ich habe bisher auch keine bessere Lösung gefunden.
(Ohne es selber zu zeichnen.)
Das hier habe ich jetzt mal zusammengebastelt:
Bitte! Danke!
Ich habe bisher auch keine bessere Lösung gefunden.
(Ohne es selber zu zeichnen.)
Das hier habe ich jetzt mal zusammengebastelt:
Code: Alles auswählen
Global Dim Eintrag.s(9)
#POS_NORMAL = 0
#POS_HCENTER = 1
#POS_VCENTER = 2
#POS_HVCENTER = 3
For i = 0 To ArraySize(Eintrag())
Eintrag(i) = "Eintrag "+Str(i)
Next i
Procedure ComboBoxExtra(cid, Array item.s(1), *DRAWITEM.DRAWITEMSTRUCT, align = 0, fgcolor = $0, bgcolor = $FFFFFF)
Protected w, h, hp, vp, TextSize.SIZE
w = GadgetWidth(cid)
h = GadgetHeight(cid)
;fgbrush = CreateSolidBrush_(fgcolor)
bgbrush = CreateSolidBrush_(bgcolor)
If *DRAWITEM\CtlType = #ODT_COMBOBOX
id = *DRAWITEM\itemID
If id >= 0 And *DRAWITEM\CtlID = cid
InflateRect_(*DRAWITEM\rcItem,-1,-1)
FillRect_(*DRAWITEM\hDC,*DRAWITEM\rcItem,bgbrush)
FrameRect_(*DRAWITEM\hDC,*DRAWITEM\rcItem,bgbrush)
SetBkColor_(*DRAWITEM\hDC, bgcolor)
SetTextColor_(*DRAWITEM\hDC, fgcolor)
If align = 0
*DRAWITEM\rcItem\left = 4
ElseIf align = 1
If GetTextExtentPoint32_(*DRAWITEM\hDC, item(id), Len(item(id)), @TextSize)
hp = (GadgetWidth(cid)/2) - (TextSize\cx / 2) - 4
*DRAWITEM\rcItem\left = hp
EndIf
ElseIf align = 2
If GetTextExtentPoint32_(*DRAWITEM\hDC, item(id), Len(item(id)), @TextSize)
vp = (GadgetHeight(cid)/2) - (TextSize\cy / 2) - 4
*DRAWITEM\rcItem\left = 4
*DRAWITEM\rcItem\top + vp
EndIf
ElseIf align = 3
If GetTextExtentPoint32_(*DRAWITEM\hDC, item(id), Len(item(id)), @TextSize)
hp = (GadgetWidth(cid)/2) - (TextSize\cx / 2) - 4
vp = (GadgetHeight(cid)/2) - (TextSize\cy / 2) - 4
*DRAWITEM\rcItem\left = hp
*DRAWITEM\rcItem\top + vp
EndIf
EndIf
DrawText_(*DRAWITEM\hDC, item(id), -1, *DRAWITEM\rcItem, #DT_NOCLIP)
EndIf
EndIf
EndProcedure
Procedure WndProc(hwnd, uMsg, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_DRAWITEM
fgcolor = RGB(0,255,0)
bgcolor = RGB(255,255,0)
*DRAWITEM.DRAWITEMSTRUCT = lParam
ComboBoxExtra(1, Eintrag(), *DRAWITEM.DRAWITEMSTRUCT, #POS_HVCENTER, fgcolor, bgcolor)
EndSelect
ProcedureReturn Result
EndProcedure
;-Main
OpenWindow(0,0,0,640,480, "Mein ComboBox-Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget )
SetWindowCallback(@WndProc())
ComboBoxGadget(1,10,10,180, 40,#CBS_OWNERDRAWFIXED)
;Der Eintragstext steht im Array Eintrag()
AddGadgetItem(1,-1, "")
AddGadgetItem(1,-1, "")
AddGadgetItem(1,-1, "")
SendMessage_(GadgetID(1),#CB_SETITEMHEIGHT,0,40)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: Comboboxgadget: Vertikale Ausrichtung des Inhalts
Danke für deine Bemühungen!
Noch eine Frage:
Kann ich es irgendwie erreichen, dass die Dropdown-Liste unverändert bleibt?
(d.h. die Farbveränderungen hier nicht greifen)
Noch eine Frage:
Kann ich es irgendwie erreichen, dass die Dropdown-Liste unverändert bleibt?
(d.h. die Farbveränderungen hier nicht greifen)
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
(PB 6.03 LTS [x86])