VerticalText - erster Versuch ^^
-
- 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 ^^
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 ^^
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
Hatten wir das nicht schonmal?
http://www.lazarusforum.de/viewtopic.php?p=19652#19652" onclick="window.open(this.href);return false;
http://www.lazarusforum.de/viewtopic.php?p=19652#19652" onclick="window.open(this.href);return false;
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.
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.
-
- 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:
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"
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"
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;
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;
Nö, OpBitmap funktioniert schon, entferne einfach aus dem PackageEugenE hat geschrieben:ok dann heißts nurnoch abzuwarten
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.
-
- 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:
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
Naja viel spaß mit der Funktion falls die jemand braucht 
Mit freundlichen Grüßen.
Eugen Bolz
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;

Mit freundlichen Grüßen.
Eugen Bolz
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.
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.
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.
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.