Buttons mit vertikaler Schrift

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
skfink
Beiträge: 28
Registriert: Do 20. Dez 2007, 20:39

Buttons mit vertikaler Schrift

Beitrag von skfink »

Hallo,
steht ja oben schon alles da. In der LCL hab ich sowas nicht gefunden, aber kennt jemand vielleicht sowas zusätzliche Komponente?
Sollte so ähnlich wie die Buttons links bei Amarok sein.

danke

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Naja ich wusste nur eine Möglichkeit, die wird dir aber nicht gefallen evlt.: Selbst machen.
z.b. könnte man eine neue Komponente ableiten von TCustom dort ein Rechteck rein Zeichen und wenn es einfach sein soll mit der TextRect Funktion es Vertikal hinbekommen.

Wenn du möchtest und sonst keiner eine andere Idee hat, könnte ich es mal heute oder morgen versuchen. klinkt recht intressant. hat einer der Buttons nicht evlt. sogar eine Automatische Zeilenumbruch Funktion ? Ach ja, ein Panel könnte evlt. auch schon gehen. Einfach ein Panel nehmen und ein Label drauf packe, das Label hat sowas aufjedenfall.

Beim Label solltest du die Aligen Eingeschaft auf alClient stellen und die word... eigenschaft auf True und Autosize auf False !
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Label kann auch nicht um 90° gedreht zeichnen das können nur zusatzkomponenten. Und der Zeilenumbruch hilft dir gar nicht weiter.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Beitrag von Dets »

Vielleicht ist es der einfachere Weg, den Text auf ein Canvas zu zeichnen, das Canvas zu kopieren und dann auf die Bitmap des Buttons zu kopieren.

Dets ...

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Einfacher ists sicherlich in dem Fall eine eigenen Komponente zu amchen die das macht, das ist der selbe Aufwand aber hinterher wesentlich einfacher benutzbar.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

@Christian
ich habe mir das anders vorgestellt. Es geht ja darum ein Text Vertikal zu machen.

Das Label hat im Prinzip schon eine Eigenschaft dafür, also:
Autosize auf False, WordWarp auf True, Aligen auf alClient stellen, und das Label zuerst in ein Panel packen.
Das Panel dann z.b. breite 20 Pixel und höhe zu hoch wie der Text halt ist. Ist zwar keine Optimale Lösung.
Aber es würde gehen.

Mein zweiter Vorschlag währe so ähnlich: Eine Variable von TRect definieren dort eine Größe festlegen es sollte schon ein Rechteck sein z.b. 20X60 oder so. Dann per TextRect den Text zeichnen. Es geht ja nur um einen Vertikalen Text nicht darum einen Text zu drehen in einem beliebigen Winkel. Dazu habe ich hier einige Beispiele gefunden:
http://www.delphipraxis.net" onclick="window.open(this.href);return false; die auch teilweise unter Lazarus gehen könnten.

Aber wie du schon sagst, beide Vorschläge machen nur sin, wenn man eine eigene Komponente dafür schreibt. Soviel Aufwand ist das nicht. Naja der Button Effekt währe dann weg.

Ich meine bei Amarok könnte ich auch wetten das sie das so gelöst haben.
Evlt. versuche ich das gleich mal. Evlt. könnte man auch eine eigene Komponente von einem TBitMap ableiten und dort die Paint Procedure überschreiben, die den Text zeichnet, und dort dann einfach statt TextOut TextRect nutzen. Wobei hier bin ich mir nicht sicher ob das klappen würde. Da TBitMap evlt. von den Toolkits gestellt wird, und keine eigene Komponente sein könnte von Lazarus. Es gibt viele Möglichkeiten. Auch einfache.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ich gehe mal nicht davon aus das er die Buchstaben untereinander haben will sondern die Schrift um 90° gedreht...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

im Titel steht drin vertikal und nicht gedreht !!! und im ersten Beitrag steht drin das er das so haben möchte wie in Amarok. Ich nehme mal an das er die Buttons in der Playliste dort meint die lings zu sehen sind !
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

@skfink
Ich habe mal eben mein Vorschlag mit dem Label umgesetzt im Anhang findest du ein Bild so wie es bei mir aussieht:
Erster Schritt ein Panel,
Zweiter Schritt auf dem Panel ein Weiteres Panel
Dritter Schritt auf den zweiten Panel das Label:
- AutoSize auf False
- Align auf alLeft
- WordWap auf True
- Width auf 8
(Je nach Schrift Einstellung

Fertig, Schritt Zwei bis Drei kannst du immer wiederholen, und untereinander packen.
Das währe erstmal eine "Note Lösung". Die beste Lösung währe glaube ich ein eigenen Button zu machen der halt zwei Richtungen kann Vertikal und Horizontal bzw. wo man auch den Winkel Einstellen kann.
Evlt. mache ich sowas noch wie gesagt wenn es kein andere macht, ist ein Interessantes Problem.
Wenn es nur um eine Vertikal oder Horizontalen Schriftzug geht, ist die sache "sehr sehr" einfach das würde mit z.b. TextOut gehen und dann in einer Forschleife wo du jedesmal den Y Wert um die letzte Höhe erhöhst.

Wobei was auch noch nicht schlecht währe, wenn der Button seine Schrift aus einer Grafik Datei Laden würde.
Mal schauen.
Evlt. könnte man sich bei der Notelösung auch noch eine Procedure schreiben die das einfacher machen könnte. Wenn du aber nur ein Paar Buttons brauchst sollte das vollkommen ausreichen.
Dateianhänge
Beispiel Bild
Beispiel Bild
vertibutton.png (713 Bytes) 2388 mal betrachtet
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich wollte mal in der nächsten Zeit anfangen ein eigenen Button zu erstellen der eine Vertikalen schrift zur ermöglich, meine Frage ist jetzt nur wie bekomme ich am besten den Effekt beim Klicken hin ?

Beim Panel habe ich gesehen wird Frame3d genutzt, sollte ich das einfach auch tun ?

Ich habe mir das im Prinzip so vorgestellt:
Ich leite mir einfach von TCustomControll eine Klasse ab, nutzt dort einfach Frame3d was dann je nach Einstellung anders aussehen kann. Oder habt ihr eine bessere Idee/Vorschlag ?

Ich habe mich jetzt entschlossen so ein Button zu machen. Könnten wir ja noch mal praktische Eigenschaften zusammentragen:
- Möglichkeit den Schrift zu Vertikal und Horizontal zu stellen
- Möglichkeit den Button in einer anderen Text, Hintergrund und Rand Farbe zu Zeichnen
- Möglichkeit ein Symbole anzuzeigen(Links, Rechts, Unten oder Oben vom Text ausgesehen)
- Möglichkeit den Button Transparent werden zu lassen.
(Aber nicht halb oder so, entweder wird der Hintergrund gezeichnet oder nicht, je nach dem)

- Evlt. noch eine Gruppen Eigenschaft wie z.b. der SpeedButton sie hat(meine ich)
- Außerdem evlt. noch eine Flat Eigenschaft.
- Evlt. verschiedene Rand und Füllarten(Die halt von Pen.Style und Brush.Style unterstützt werden
Habt ihr noch wünsche ?
Wenn wir schonmal dabei sind *G*
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wenns wirklich so ist wie Pluto vermutet, reicht sicher ein
Button.Caption := 'B'+#13+'u'+#13+'t'+#13+'t'+#13+'o'+#13+'n';
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Verarbeitet ein Label Zeilenumbrüche ? Aber das ist gar nicht notwendig. Ich habe mir die Paint Methode beim Panel angesehen, ein: Pane.Canvas.TextStyle.WordWarp:=True müsste reichen.
evlt. noch ein paar Anpassungen und schon kann auf das Label versichtet werden.

Aber ich habe gestern mit dem Button angefangen. Wenn alles gut geht, wird er gegen ende der Woche fertig sein.
(Weil es im Moment so schönes Wetter ist bin ich nicht mehr den ganzen tag vor dem Rechner :wink:)
Denn Button lade ich dann als OpenSoruce hoch.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Er will doch nen Button und kein Panel lass ihn sich doch mal melden bevor du weiter mutmaßungen anstellst
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

pluto hat geschrieben:Verarbeitet ein Label Zeilenumbrüche ?
Ja.
Johannes

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

monta hat geschrieben:
pluto hat geschrieben:Verarbeitet ein Label Zeilenumbrüche ?
Ja.
Hierzu muss allerdings die Eigenschaft "WordWrap" aktiviert sein.

Euklid

Antworten