VerticalText - erster Versuch ^^

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

VerticalText - erster Versuch ^^

Beitrag von EugenE »

Hey, da ich für meinen Button auch vertikalen Text anstatt nur einzellne Buchstaben untereinander haben will^^

habe ich mich mal dran gesetzt und versucht eine Funktion zu schreiben die das für mich macht

Habe die Funktion sowie nen Testprojekt hinzugefügt, jetzt zum Problem^^

Einfacher Text wie "Text" wird gedreht, wenn man "Mehr Text" nimmt wird der erste Strich vom M nicht gezeichnet, vllt seh ich den fehler nicht mehr, bin auch zu müde dafür^^

Gn8 ^^
Dateianhänge
vertical-text.zip
(58.14 KiB) 71-mal heruntergeladen

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

Beitrag von theo »

Hatten wir das nicht schonmal?

http://www.lazarusforum.de/viewtopic.php?p=19652#19652" onclick="window.open(this.href);return false;

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

Ui nicht gesehen.

Wollte letztens OpBitmap installieren aber ging nicht mit der letzten SVN Version von Lazarus, das war mit der OpBitmap 1.0 , ich werde heute wenn ich wieder zuhause bin die neueren versionen ausprobieren, danach melde ich mich nochmal

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

Beitrag von theo »

Du musst es nicht unbedingt installieren, da es keine visuellen Komponenten sind. Es kann immer sein, dass das Package mit einer aktuellen SVN-Version Probleme gibt, da sich die LCL dauernd ändert.
Dieses Beispiel benützt aber eigentlich gar keine LCL Schnittstellen, es ist reines Freepascal. Der "Bildaustausch" geht über einen BMP-Stream und diese Schnittstelle ist stabil, es sei denn die LCL-Grafik funzt grad sowieso nicht.

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

Ich wollte es ja nicht installieren , ich wollte nur die Demo kompiliieren und das funktionierte nicht

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

Beitrag von theo »

EugenE hat geschrieben:Ich wollte es ja nicht installieren , ich wollte nur die Demo kompiliieren und das funktionierte nicht
Was war denn das Problem?

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

so habe jetzt die version 1_6 versucht und das kommt beim compilieren

C:\Programme\Lazarus\SVN\components\opbitmap1_6\imglibs\lazopbmp.pas(34,15) Error: There is no method in an ancestor class to be overridden: "TOPBMPImage.FinalizeFPImageReader(TFPCustomImageReader)"
C:\Programme\Lazarus\SVN\components\opbitmap1_6\imglibs\lazopbmp.pas(38,20) Error: There is no method in an ancestor class to be overridden: "class TOPBMPImage.GetDefaultFPReader:Class Of TFPCustomImageReader"
C:\Programme\Lazarus\SVN\components\opbitmap1_6\imglibs\lazopbmp.pas(39,20) Error: There is no method in an ancestor class to be overridden: "class TOPBMPImage.GetDefaultFPWriter:Class Of TFPCustomImageWriter"

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

Beitrag von theo »

Ich nehme an, du hast die aktuellste SVN Version von Lazarus. Marc hat mal wieder alles auf den Kopf gestellt. Ich versuche bei Gelegenheit, das wieder anzupassen, ist aber langsam nervig.

Wie gesagt, diese Units (alle die mit "laz" beginnen) braucht's für dieses Beispiel nicht.
Es braucht nur: opbitmap, opbitmapformats, OpImgLib und alle die da dran hängen.

EDIT: Ich passe das noch nicht an, bis Marc mit dem Grafik-rewrite fertig ist.
s.a:
http://thread.gmane.org/gmane.comp.ide. ... ocus=25661" onclick="window.open(this.href);return false;

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

ok dann heißts nurnoch abzuwarten

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

Beitrag von theo »

EugenE hat geschrieben:ok dann heißts nurnoch abzuwarten
Nö, OpBitmap funktioniert schon, entferne einfach aus dem Package

registerlazop.pas

sowie alle TFPCustomImageReader Units:
lazoptiff.pas
lazopbmp.pas
etc.

Die heissen alle so, also 'lazop'+Format-Erweiterung+'.pas'

Danach läuft zwar die "lclintegrationdemo" nicht mehr, aber alle anderen Demos schon.

Auch die Bildformate funktioneren dann noch, wenn man's wie in "lazformatsdemo" benützt.

Die TFPCustomImageReader sind nur dazu da, die Formate in Lazarus TPicture (TGraphic) zu integrieren. Das ist nicht nötig und dieses System ist im Moment nachhaltig gestört ;-)
Das zu "reparieren" warte ich noch ab.

Aber wie gesagt, OpBitmap funzt schon.

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

So OpBitmap konnte ich nun compilieren

habe dann nach dieser Funktion gearbeitet
http://www.lazarusforum.de/viewtopic.php?p=19657#19657" onclick="window.open(this.href);return false;

aber bei
OPP1.LoadFromStream(Strm)

kommt der Fehler: Not an OPBitmap Stream

naja dann habe ich nach ner einfachen Methode gesucht und einfach noch mal alles nachgegangen also welcher punkt am ende wo hin muss

und zum schluss habe ich jetzt diese Funktion die einen Text vertikal nach rechts oder links gedreht ausgibt

Code: Alles auswählen

TRotatedText = (rtRight, rtLeft);
 
procedure RotatedText(C: TCanvas; rt: TRotatedText;X,Y: Integer; S: String; TextColor: TColor);
 
    function Max(a,b: Integer):Integer;
    begin
        if a > b then Result := a else Result := b;
    end;
 
const
   Background : TColor = clFuchsia;
var
   t1, t2 : TBitmap;
   i,j,w,h,q,w1,h1: Integer;
begin
 
   t1 := TBitmap.Create;
   t2 := TBitmap.Create;
 
   t1.Canvas.Font := C.Font;
   t1.Canvas.Font.Color:=TextColor;
 
   w := C.TextWidth(S);
   h := C.TextHeight(S);
 
   q := Max(w,h);
 
   t1.Height:=q;
   t1.Width:=q;
 
   t2.Height:=q;
   t2.Width:=q;
 
   with t1.Canvas do
   begin
     Brush.Color:=Background;
     FillRect(0,0,q,q);
     Brush.Style:=bsClear;
     TextOut(0,0,S);
     Brush.Style:=bsSolid;
   end;
 
   t1.TransparentColor:=Background;
   t1.Transparent:=true;
 
   t2.TransparentColor:=Background;
   t2.Transparent:=true;
 
   with t2.Canvas do
   begin
     Font.Color:=C.Font.Color;
     Font := C.Font;
 
     Brush.Color:=Background;
     FillRect(0,0,q,q);
   end;
 
   for i := 0 to w do
   begin
     for j := 0 to h do
     begin
       if rt = rtRight then begin
          w1 := T2.Width-j;
          h1 := i;
       end else begin
          w1 := j;
          h1 := T2.Height-i-1;
       end;
 
       T2.Canvas.Pixels[w1, h1]:=T1.Canvas.Pixels[i,j];
     end;
   end;
 
   //Text auf C transparent ausgeben
   for i := 0 to T1.Width do
    for j := 0 to T1.Height do
     if T2.Canvas.Pixels[i,j] <> Background then
     begin
      if rt = rtRight then begin
          w1 := i+X-(q-h);
          h1 := j+Y;
      end else begin
          w1 := i+X;
          h1 := j+Y;
      end;
 
      C.Pixels[w1,h1] := T2.Canvas.Pixels[i,j];
     end;
   t1.Free;
   t2.Free;
end;
Naja viel spaß mit der Funktion falls die jemand braucht :)

Mit freundlichen Grüßen.
Eugen Bolz

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

Beitrag von theo »

OK, kann dein Problem mit "Not an OPBitmap Stream" zwar nicht nachvollziehen, aber es gibt ein Update das nun mit der aktuellen SVN wieder alles können sollte:
opbitmap1_7.zip
http://www.lazarusforum.de/viewtopic.php?t=434" onclick="window.open(this.href);return false;

Deine Lösung funzt bestimmt auch, aber mit Canvas.Pixels arbeiten ist normalerweise super langsam, da es jedesmal mit dem Interface kommuniziert.

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

hm aber ich denke das kann man wohl noch verkraften bei diesen paar Pixeln oder?

die neue opBitmap werde ich bei gelegenheit testen

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

Beitrag von theo »

Trotzdem würde mich interessieren, wie du auf obige Fehlermeldung ("Not an OPBitmap Stream") gekommen bist.
Welche Laz SVN Version benutzt du denn genau? In den letzten Tagen hat sich vieles in dem Bereich geändert.
Die Meldung deutet darauf hin, das TBitmap kein sauberes BMP Format streamt.
Bei meiner Version von heute geht das allerdings problemlos.

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

vielleicht hängt das mit der 1_6 version zusammen, weil ich das ja damit getestet habe, dass es nicht funktioniert oder sowas , kA^^

Antworten