Gut ich hab mir ne Funktion geschrieben, die das nun für mich erledigt.
Das wie alzaimar es Vorgeschlagen hat, hat nicht geklappt.
Also, wen es noch interessiert, so ist's gemacht:
Delphi-Quellcode:
procedure VerticalText(x,y:integer;text:string;target:TCanvas);
Var
bmp:TBitmap;
begin
with target do
begin
bmp := TBitmap.Create;
bmp.Canvas.Font := font;
bmp.Width := textwidth(text);
bmp.Height := textheight(text);
bmp.Canvas.TextOut(0,0,text);
turn(bmp);
draw(x,y,bmp);
bmp.Free;
end;
end;
type TMyhelp = array[0..0] of TRGBQuad;
procedure Turn(const Bitmap: TBitmap);
var P: PRGBQuad; //^THelpRGB;
x,y,b,h : Integer;
RowOut: ^TMyHelp;
help: TBitmap;
begin
Bitmap.PixelFormat := pf32bit;
help := TBitmap.Create;
try
help.PixelFormat := pf32bit;
b := bitmap.Height;
h := bitmap.Width;
help.Width := b;
help.height := h;
for y := 0 to (h-1) do
begin
rowOut := help.ScanLine[y];
P := Bitmap.scanline[bitmap.height-1];
inc(p,y);
for x := 0 to (b-1) do
begin
rowout[x] := p^;
inc(p,h);
end;
end;
finally
bitmap.Assign(help);
end;
end;