ComboBox.Height

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

ComboBox.Height

Beitrag von Mathias »

Wen ich unter Windows in meine Programm eine ComboxBox setze, ist dies 21 hoch.
Lade ich den Code anschiessend unter Linux, sind auf einmal die Boxen 31 hoch.
Will ich aber dann den Wert im Objectinspector auf 21 ändern, dann wird der Wert automatisch auf 27 gesetzt.

Was noch interessant ist, es sind mehrere ComboBox und beim Start des Programmes, sind die Boxen sogar unterschiedlich hoch.

Rufe ich aber dies auf:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  ComboBox1.Height := 40;
end

Dann hat die ComboBox unter Linux und Win 40Pixel Höhe.



Ist dies ein Bug, oder liegt dies am OS ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: ComboBox.Height

Beitrag von theo »

Hast du AutoSize auf True?

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: ComboBox.Height

Beitrag von Michl »

Sehr wahrscheinlich hast du eine größere Schriftart eingestellt. Unter Linux Mint 17.3 KDE kann ich eine bestimmte DPI für Schriftarten erzwingen. Voreingestellt war bei mir 96DPI, dabei ist die Combobox normal 21 Pixel hoch. Stelle ich die DPI für die Schriftarten auf 120 hoch, ist die Höhe 24 Pixel, egal was ich im Objectinspektor versuche einzugeben.

Das Verhalten ist gut so, im Designmodus wird der Eintrag überprüft und entsprechend dem OS-Bedürfnissen gesetzt. Das Einzige, was evtl. zu beanstanden wäre, ist die 31, diese scheint nicht richtig gesetzt zu sein. Das kann ich selber hier aber nicht bestätigen. Ein unter Windows erstelltes Projekt mit einer Default Combobox Height von 21 wird in dem besagten Linux ordentlich auf 24 gestellt.

[Edit]
Ach während ich hier geschrieben habe, hat theo geantwortet und die wichtigere Frage aufgeworfen. Natürlich geht das nur bei Autosize = true.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: ComboBox.Height

Beitrag von wp_xyz »

Ich bin ebenfalls der Meinung, dass da kein Bug von Lazarus vorliegt, sondern ein Feature, nämlich dass sich die Combobox-Höhe der Schriftgröße anpasst. Was mich eher stört, sind die uneinheitlichen Höhen der Controls bei derselben Schriftart: Hier auf Win10 erhalte ich folgende Höhen

- TCombobox 23 Pixel
- TEdit 23 Pixel
- TColorBox 24 Pixel
- TColorButton 25 Pixel (allerdings veränderbar)
- TComboboxEx 24 Pixel
- TCheckCombobox 24 Pixel

Wenn man den Style csDropDownList nicht braucht, kann man - auf eigene Gefahr - mit dem Style csOwnerDrawFixed eine bestimmte Combobox-Höhe erzwingen, indem man mit dem Wert von ItemHeight spielt - der Wert ist kleiner etwas als die gesamte Combohöhe, aber man kann durch Anpassen die gewünschte Höhe erreichen. Unter Windows zumindest braucht man keinen Handler für OnDrawItem zu schreiben, wenn der fehlt, wird die Standardausgabe-Routine genommen. Unter Linux weiß ich nicht.

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ComboBox.Height

Beitrag von Mathias »

Ich habe mal auf csDropDown gestellt, sie wie es aussieht, ist dies Standard, alles andere wird rot im Objectinspector geschrieben.
Wieso das vorhin csDropDownList gestanden ist weis ich nicht, vielleicht versehentlich rein geklickt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten