Buttongröße automatisch an Text anpassen
-
Hallo,
ich programmiere gerade an einer Dialogbox, welche komplett dynamisch erstellt wird.
Auch die darauf zu platzierende Buttons werden dynamisch erstellt.Jetzt zu meinem aktuellen Problem:
Ich bin auf der Suche nach einer Möglichkeit die Buttonsgröße nach der Größe des zugewiesenen Textes (Textlänge, Schriftart, Schriftgröße) anzupassen.Bei einem Label kann ich das ja zB. über autosize=true machen.
Ich habe mir auch schon über mehrere komplizierte Möglichkeiten Gedanken gemacht, aber vielleicht geht das auch viel einfacher.
GoofyMann
-
du mußt die Buttongröße selbst anpassen, schau dir mal die Eigenschaft TextWidth in der BCB-Hilfe an, außerdem solltest du den Font des Button zuvor auf das Canvas übertragen (z.B. mit Font->Assign...)
-
Mir fällt nur ein, mittels TCanvas::TextWidth(...) die Breite des anzuzeigenden Textes zu ermitteln und dann den Button entsprechend so groß setzen (Höhe dann entsprechend der Font::Size).
Du müßtest dann ein temp. Canvas-Objekt verwenden, z.B. von einem Image oder einer Paintbox, da TButton kein Canvas-Objekt bereitstellt.
Dann zuerst den Font setzen und anschließend mittels TextWidth die Breite ermitteln.
-
Vielen Dank für eure Antworten.
Bin gerade dabei das so auszuprobieren.
Diese Lösung ist mir so noch nicht bekannt gewesen, weil ich mich mit TCanvas noch nicht so ausgiebig beschäftigt habe.
Meine Idee war bisher das ganze über ein Label, das nicht angezeigt wird, zumachen.kurz:
- den besagten Text dem Label zuweisen
- das Label mit Autosize der Textgröße anpassen
- und dann die Labelgröße auslesen um daraus die Buttongröße zu errechnen.Jetzt bin ich mir nicht ganz sicher was sinnvoller ist.
Gruß GoofyMann
-
Das mit dem Label ist auch OK!
Du kannst ja mal einen Geschwindigkeitsvergleich anstellen (würde mich mal interessieren).
-
Hallo Th,
sorry das ich Dir bis jetzt kein Ergebnis eines Geschwindigkeitsvergleich präsentieren kann.
Hab das ganze jetzt mit dem Label ziemlich kompakt und einfach hinbekommen.
Die Lösung über ein Objekt das TCanvas beinhaltet habe ich leider bis jetzt nicht so recht hinbekommen, liegt vielleicht doch daran, das ich was Objektorientierte Programmierung angeht doch noch recht am Anfang stehe.
Nochmals Vielen Dank für Eure Hilfe.
Vielleicht kann ich den Geschwindigkeitstest ja mal nachreichen.Gruß GoofyMann
-
OK, solange es läuft ist es ja ok...