Buttons mit vertikaler Schrift

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
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 »

ne, verstehe ich noch nicht genau. Möchtest du die Buchstaben Vertikal gezeichnet haben ? dann kann man sie ja gar nicht mehr lesen. Wie gesagt der Button ist aber noch nicht Fertig.
MFG
Michael Springwald

petermännchen
Beiträge: 92
Registriert: So 26. Aug 2007, 20:35
OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
CPU-Target: 32Bit
Wohnort: Helmstedt
Kontaktdaten:

Beitrag von petermännchen »

Hallo Michael, das kann doch so schwer nicht sein?

Ist der Button erst breit und wie im Standard beschriftet, so dreht sich der Button jetzt auf die Schmalseite (90° gegen den Uhrzeigersinn).

Und die Schrift mit!

Was du in deinem Bild darstellst ist doch ganz anders als von SKFink oder?

Gruß

Peter
Zeiterfassung, einfach gerechter!

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Hallo!

Bringt's jetzt was wenn ich sage:

Wo's so'n Button zum Dowload gibt ...? :wink:
Zum Drehen ...? :wink:
Mit Sourcecode ...? :wink:

Aber eben für Delphi. :(

Unter Umständen kann ja die Technik zum Drehen als Vorlage dienen.

Der Button kann hier geloaded werden:
Info: http://sunsite.informatik.rwth-aachen.d ... but112.zip" onclick="window.open(this.href);return false;

Und sieht so aus. (siehe Anhang)

Tschüsss !
Dateianhänge
VertikalBtn.JPG

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 sehe noch nicht den genauen unterschied. Wirklich nicht. Aber wenn es schon so einen gibt, könnten wir ihn für Lazarus anpassen und Fertig. Weil so ein button ist auf dauer langweilig *G*
MFG
Michael Springwald

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 »

ulhau hat geschrieben: Aber eben für Delphi. :(
Dürfte doch eigentlich keine größeren Probleme bereiten, den SourceCode auf Lazarus zu portieren?

Euklid

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 »

Weiß einer wo PRGNDATA definiert ist ?

Eine suche im Internet ergab das das in der Unit Windows drin ist. Aber die nützt mir unter Linux nicht viel.
Evlt. habt ihr ja mehr glück. Ich kenne diesen Datentyp auch nicht.
MFG
Michael Springwald

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

Beitrag von theo »

Euklid hat geschrieben: Dürfte doch eigentlich keine größeren Probleme bereiten, den SourceCode auf Lazarus zu portieren?
Haste den mal angeschaut?

Ich hab mal eine auf OPBitmap und TBitBtn basierende Lösung im Screenshot.
Falls jemand den Code haben möchte, bitte melden.
Dateianhänge
rotbut.png
rotbut.png (5 KiB) 1707 mal betrachtet

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 »

achso ist das gemeint, jetzt sehe ich es. Nagut dann mache ich mein Button erstmal nicht weiter.
MFG
Michael Springwald

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

Beitrag von theo »

Auf Anfrage von skfink:

Unten der Code.
Das ist nur eine Funktion, welche bei normalen BitBtn den Text dreht.
(nur heute abend so hingehackt, sollte aber funzen)
OpBitmap und die OpImgLib hatte ich mal hier gepostet.
http://www.lazarusforum.de/viewtopic.php?t=434" onclick="window.open(this.href);return false;
http://www.lazarusforum.de/viewtopic.php?t=1383" onclick="window.open(this.href);return false;

Hintergrundfarbe, Font-Eigenschaften und Farbe werden vom BitBtn übernommen.

Code: Alles auswählen

...
implementation
 
uses opbitmap, opbitmapformats, OpImgLib, Math;
 
procedure RotatedTextBitBtn(BB: TBitBtn; AText: UTF8String);
var Bmp: TBitmap; OPP1, OPP2: TOPPicture;
  ext: TSize;
  Strm: TMemoryStream;
  w, h: integer;
  clBG:TColor;
begin
  if Length(AText) > 0 then
  begin
    clBG:=BB.Color;
    Bmp := TBitmap.Create;
    Strm := TMemoryStream.create;
    Bmp.Canvas.Font.Assign(BB.Font);
    ext := Bmp.Canvas.TextExtent(AText);
    Bmp.Width := ext.cx;
    Bmp.Height := ext.cy;
    Bmp.Canvas.Brush.Color := clBG;
    Bmp.Canvas.FillRect(0, 0, Bmp.Width, Bmp.Height);
    Bmp.Canvas.TextOut(0, 0, AText);
 
    Bmp.SaveToStream(Strm);
    Strm.Position := 0;
    OPP1 := TOPPicture.Create;
    OPP2 := TOPPicture.Create;
    OPP1.LoadFromStream(Strm);
    OPP2.Bitmap.Height := Max(OPP1.Bitmap.Height, OPP1.Bitmap.Width);
    OPP2.Bitmap.Width := Max(OPP1.Bitmap.Height, OPP1.Bitmap.Width);
    OPP2.Bitmap.Canvas.Brush.Color := clBG;
    OPP2.Bitmap.Canvas.FillRect(Rect(0, 0, OPP2.Bitmap.Width, OPP2.Bitmap.Height));
    OPP2.Bitmap.Canvas.Draw((OPP2.Bitmap.Width - ext.cx) div 2, (OPP2.Bitmap.Height - ext.cy) div 2, OPP1.Bitmap);
 
    RotateBitmap_ads(OPP2.Bitmap, OPP1.Bitmap, Point(OPP2.Bitmap.Width div 2, OPP2.Bitmap.Height div 2), 270, clBG);
 
    OPP2.Bitmap.Width := ext.cy;
    OPP2.Bitmap.Height := ext.cx;
 
    BB.Width := ext.cy + 15;
    BB.Height := ext.cx + 20;
 
    OPP2.Bitmap.Canvas.FillRect(Rect(0, 0, OPP2.Bitmap.Width, OPP2.Bitmap.Height));
    w := (OPP1.Bitmap.Width - ext.cy) div 2;
    h := (OPP1.Bitmap.Height - ext.cx) div 2;
    OPP2.Bitmap.Canvas.CopyRect(
      Rect(0, 0, OPP2.Bitmap.Width, OPP2.Bitmap.Height),
      OPP1.Bitmap.Canvas,
      Rect(w, h, w + ext.cy, h + ext.cx));
 
    Strm.Position := 0;
    OPP2.SaveToStream(Strm, 'image/bmp');
    OPP1.Free;
    OPP2.Free;
    Strm.Position := 0;
 
    BB.Glyph.LoadFromStream(Strm);
    Strm.free;
    Bmp.free;
  end;
end;
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  RotatedTextBitBtn(BitBtn1, BitBtn1.Caption);
  BitBtn1.Caption := '';
 
  RotatedTextBitBtn(BitBtn2, BitBtn2.Caption);
  BitBtn2.Caption := ''
end;

Antworten