Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TPageCotnrol -> selber zeichnen -> Schrift bei Tabs hochkant (https://www.delphipraxis.net/110471-tpagecotnrol-selber-zeichnen-schrift-bei-tabs-hochkant.html)

HolgerCW 18. Mär 2008 14:49


TPageCotnrol -> selber zeichnen -> Schrift bei Tabs ho
 
Hallo zusammen,

wie kann ich den Text bei den Tabs hochkannt darstellen, wenn ich das PageControl selber zeichne.

Mach das so:

Delphi-Quellcode:
canvas.TextOut(rect.left,rect.top,Pages[Der_Tabindex].Caption);
Nur zeichnet er mir den Text nun von links nach rechts und nicht von oben nach unten. Wie bekomme ich as hin ?

Gruss

Holger

PeterPain 18. Mär 2008 14:51

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Soweit ich weis garnicht.
Du könntest dir natürlich selber was schreiben, wie :

Delphi-Quellcode:
  Y := 0;
  X := WhatEver;
  for i := 1 to Length(Text) do
  begin
   MyCanvas.TextOut(X, Y, Text[I]);
   Inc(Y, MyCanvas.TextHeight(Text[i]) + 1);
  end;

gruss

Die Muhkuh 18. Mär 2008 14:52

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Hi,

hier ist ein Beispiel, wie man einen Text drehen kann.

[edit]Komische Interpunktion entfernt :tongue: [/edit]

HolgerCW 18. Mär 2008 17:26

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Vielen dank erstmal, werde es morgen ausprobieren ...und geben dann mein Feedback ...

Gruss

Holger

HolgerCW 19. Mär 2008 08:17

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Hallo nochmal,

also bei dem ersten Beispiel kommt ein Fehler bei:

Delphi-Quellcode:
Inc(Y, MyCanvas.TextHeight(Text[i]) + 1);
Fehlermeldung: Der linken Seite kann ncihts zugewiesen werden !!!

Das verlinkte Beispiel beeinflusst irgendwie auch die Schriftgrösse und Fett-Schrift. Komme damit nciht klar.

Für weitere Anrgungen wäre ich sehr dankbar.

Gruss

Holger

DeddyH 19. Mär 2008 08:28

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Ist Y denn als Variable definiert?

HolgerCW 19. Mär 2008 08:33

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Habe es so gemacht:

Delphi-Quellcode:
for I := 1 to Length(Pages[Der_Tabindex].Caption) do
begin
 Canvas.TextOut(rect.left+1, 0, Pages[Der_Tabindex].Caption[I]);
 Inc(0, Canvas.TextHeight(Pages[Der_Tabindex].Caption[I]) + 1);
end;

DeddyH 19. Mär 2008 09:07

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
0 ist eine Konstante.

HolgerCW 19. Mär 2008 09:27

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Alles klar.

Das haut nun schon mal hin. Nur schreibt er die Buchstaben jetzt so:

T
e
s
t

Dann ist der Text für das Tab zu lang. Die Buchstaben müssen jetzt nochmal um 90° gedreht werden. Wie bekomme ich das hin ?

Gruss

Holger

DeddyH 19. Mär 2008 09:44

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Bei mir funktioniert das Beispiel. Hast Du denn auch einen Truetype-Font verwendet?

HolgerCW 19. Mär 2008 09:48

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Mein Font ist "Tahoma" Ist der Truetype und wodran erkenne ich einen Truetype Font ?

Weil ohne den Owner-Draw hat Delphi ja auch Tahoma drehen können !

DeddyH 19. Mär 2008 09:54

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Sry, ich hab die beiden Beispiele verwechselt :oops: . Allerdings ändert sich bei mir die Schriftgröße etc. nicht, wenn ich das verlinkte Beispiel verwende.

HolgerCW 19. Mär 2008 10:07

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Ich nutze auch keine Paintbox sondern ein TPageControl. Vielleicht liegt es daran.
Ich mache es so:

Delphi-Quellcode:
procedure Berechtigung_Tab_zeichnen(PageControl: TPageControl; Bilder: Boolean;Control: TCustomTabControl; Der_TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
 I, Y: Integer;

with Control as TPageControl do
begin

 canvas.Brush.Style := bssolid;
 canvas.font.Color := clbtntext;
 
 If PageControl.TabPosition = tpRight then
 begin
  TextOutAngle(Canvas, rect.left, rect.top, Pages[Der_Tabindex].Caption, 900);
 end
 else
 begin
  canvas.TextOut(rect.left+26,rect.top+5,Pages[Der_Tabindex].Caption);
 end;
 
 If Bilder = TRUE then PageControl.Images.Draw(control.Canvas,rect.Left+7,rect.Top+2, Der_Tabindex);

end;
end;
Hier nochmal die TextOutAngel - Procedure:

Delphi-Quellcode:
procedure TextOutAngle(const Canvas: TCanvas; X, Y: Integer; const AText: String; AAngle: Integer);
var
 hCurFont: HFONT;
 LogFont: TLogFont;
begin

 with Canvas do
 begin
  hCurFont := Font.Handle;
  try
   GetObject(Font.Handle, SizeOf(LogFont), @LogFont);
   LogFont.lfEscapement := AAngle;
   LogFont.lfOrientation := AAngle;

   Font.Handle := CreateFontIndirect(LogFont);
   try
    TextOut(X, Y, AText);
   finally
    DeleteObject(Font.Handle);
   end;
  finally
   Font.Handle := hCurFont;
  end;
 end;
end;
Vielleciht stimmt was mit meiner oberen Procedure nicht ?

taaktaak 19. Mär 2008 10:19

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Moin, Moin,

folgendes verwirrt mich...

Delphi-Quellcode:
procedure ~~(PageControl:TPageControl; ~~ Control: TCustomTabControl~~);
..
with Control as TPageControl do // << ist das korrekt?? die Proc-Parameter sagen doch etwas anderes?!

HolgerCW 19. Mär 2008 10:56

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
auch wenn ich

Delphi-Quellcode:
with PageControl do
mache passiert das selbe. Die komplette Schrift auf dem PageControl wird Fett

...

taaktaak 19. Mär 2008 13:06

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Moin, Moin.

Die Ursache liegt darin, dass in TextOutAngle() der in dieser Prozedur verwendete temporäre Font nicht die korrekten Werte aus dem für das TabControl festgelegten Font übernimmt. Dieses soll ja eigentlich mit

Delphi-Quellcode:
GetObject(Font.Handle, SizeOf(LogFont),@LogFont);
erfolgen. Zusätzlich wird dort nur mit lfEscapement und lfOrientation der übernommene Font gedreht.

Eine Korrektur der Symptome kannst du erreichen, indem du die "falschen" Werte quasi manuell in dieser Prozedur setzt. Um die fette Schrift zu eleminieren also z.B. Logfont.lfWeight:=FW_Normal.

Das ist aber eigentlich ein absolut hilfloses Vorgehen und nicht Sinn der Sache - ich muss aber gestehen: Mehr kann ich dazu im Augenblick nicht beitragen :?

HolgerCW 19. Mär 2008 13:53

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
ICh denke das Problem liegt ncoh woanders.

Denn auch wenn ich mit:

Delphi-Quellcode:
If PageControl.TabPosition = tpRight then
begin
abfrage, das er nur bei PageControls mit Rechtsausrichtung die Drehung machen soll, wirken sich die Änderungen auch auf die anderen PageControls aus. Bei andere PageControls wiederrum funktioniert sogar die Drehung mit Verschiebung um +26. Das heisst das in der Zeile:

Delphi-Quellcode:
canvas.TextOut(rect.left+26,rect.top+5,Pages[Der_Tabindex].Caption);
irgendwie die Drehung auch Auswirkung zeigt. Irgendwie muss ich das Globale da raus kriegen ?

Ich rufe ja auch von jedem PageControl über das Draw Ereignis diese Procedure auf ...

Bin ratlos ?

...

HolgerCW 19. Mär 2008 14:39

Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
 
Ich habe es jetzt hionbekommen, das nur ein PageControl davon beeinflusst wird, aber irgendwie zeichnet er nur misst. Hat vielleicht jemand noch eine alternative Lösung gegenüber den beiden anfänglichen Lösungen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 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