Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Text spiegeln (https://www.delphipraxis.net/51771-text-spiegeln.html)

Moony 18. Aug 2005 13:45


Text spiegeln
 
Hallo zusammen,

habe das Problem, daß ich einen Text spiegeln auf ein Canvas spiegeln will. Bei Bildern gibt es ja die Funktion StretchBlt().

Gibt es sowas für Texte? Normal gebe den Text über ShowText() aus.

Hoffe mir kann da jemand weiterhelfen.

gruß, moony

Olli 18. Aug 2005 13:54

Re: Text spiegeln
 
Zitat:

Zitat von Moony
habe das Problem, daß ich einen Text spiegeln auf ein Canvas spiegeln will. Bei Bildern gibt es ja die Funktion StretchBlt().

Wer oder was hält dich davon ab diese Funktion auch für Text zu benutzen?

Einfach auf einen MemDC, dann auf den echten blitten ... fertsch!

Kroko1999 18. Aug 2005 13:54

Re: Text spiegeln
 
schreibe doch den text in ein Bitmap
Delphi-Quellcode:
Bitmap.canvas.TextOut ();

Moony 18. Aug 2005 14:20

Re: Text spiegeln
 
@Olli:
Diese Funktion ist zum spiegeln von Bitmaps. Und da mein Text als Text an das Canvas geschickt wird. Ansonsten würde es die Texteigenschaften verlieren.

@Kroko:
Über den TextOut() kann ichaber nicht den Text spiegeln.

Stanlay Hanks 18. Aug 2005 14:21

Re: Text spiegeln
 
Er meinte, du sollst den Text in ein Bitmap ausgeben und dann das Bitmap drehen (denke ich).

Olli 18. Aug 2005 14:27

Re: Text spiegeln
 
Zitat:

Zitat von Stanlay Hanks
Er meinte, du sollst den Text in ein Bitmap ausgeben und dann das Bitmap drehen (denke ich).

Exakt das meinte ich. Allerdings kann eine Bitmap sowieso nur in einem DC existieren, weshalb ich auch vom DC sprach. Und MSDN-Library durchsuchenStretchBlt() benutzt bekanntlich auch Handles zu DCs, nicht zu Bitmaps.

Moony 18. Aug 2005 14:38

Re: Text spiegeln
 
Jedoch besteht ein weiteres Problem bei TextOut(), und zwar daß diese Funktion keinen Zeilenumbruch macht. Was z.B. der ExtTextOut() macht.

Moony 18. Aug 2005 14:48

Re: Text spiegeln
 
Danke Leute, aber ich habe das jetzt anders gelöst:

Ich zeichne den Text auf ein Image.Canvas, erstelle mit dieser Funktion ein Bitmap:
Delphi-Quellcode:
procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap);
var
  Header, Bits : Pointer;
  HeaderSize  : DWord;
  BitsSize    : DWord;
begin
  GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize);
  GetMem(Header, HeaderSize);
  GetMem(Bits, BitsSize);
  try
    GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^);
    StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top,
        DestRect.Right - DestRect.Left, DestRect.Bottom - DestRect.Top,
        0, 0, ABitmap.Width, ABitmap.Height, Bits,TBitmapInfo(Header^),
        DIB_RGB_COLORS, SRCCOPY);
  finally
    FreeMem(Header);
    FreeMem(Bits);
  end;
end;
und spiegel das Ganze mit der StretchBlt().
:dancer2:

Das einzige Problem was jetzt noch besteht ist, daß ich zwischendurch Textreste vom Spiegeln habe...

Olli 18. Aug 2005 14:48

Re: Text spiegeln
 
Zitat:

Zitat von Moony
Jedoch besteht ein weiteres Problem bei TextOut(), und zwar daß diese Funktion keinen Zeilenumbruch macht. Was z.B. der ExtTextOut() macht.

... oder DrawText() und DrawTextEx() ... und wer hindert dich hier wiederum daran dann eben diese Funktionen zu verwenden um auf den MemDC zu schreiben, in den vorher eine Bitmap selektiert wurde???

Flocke 18. Aug 2005 14:51

Re: Text spiegeln
 
Eigentlich: neue Frage, neuer Thread - aber egal:

1. So weit ich weiß, kann ExtTextOut auch keinen Umbruch. Dafür musst du DrawText oder DrawTextEx nehmen.
2. Für das Spiegeln könntest du dir auch mal die API-Funktionen SetWindowOrg/Ext und SetViewportOrg/Ext ansehen (oder SetWorldTransform). Damit müsste man auch gespiegelte Dinge machen können. Sind aber nicht ganz einfach zu verstehen.

//EDIT: Roten Kasten ignoriert 8)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz