![]() |
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:
Nur zeichnet er mir den Text nun von links nach rechts und nicht von oben nach unten. Wie bekomme ich as hin ?
canvas.TextOut(rect.left,rect.top,Pages[Der_Tabindex].Caption);
Gruss Holger |
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 |
Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
Hi,
![]() [edit]Komische Interpunktion entfernt :tongue: [/edit] |
Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
Vielen dank erstmal, werde es morgen ausprobieren ...und geben dann mein Feedback ...
Gruss Holger |
Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
Hallo nochmal,
also bei dem ersten Beispiel kommt ein Fehler bei:
Delphi-Quellcode:
Fehlermeldung: Der linken Seite kann ncihts zugewiesen werden !!!
Inc(Y, MyCanvas.TextHeight(Text[i]) + 1);
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 |
Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
Ist Y denn als Variable definiert?
|
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; |
Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
0 ist eine Konstante.
|
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 |
Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
Bei mir funktioniert das Beispiel. Hast Du denn auch einen Truetype-Font verwendet?
|
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 ! |
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.
|
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:
Hier nochmal die TextOutAngel - Procedure:
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;
Delphi-Quellcode:
Vielleciht stimmt was mit meiner oberen Procedure nicht ?
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; |
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?! |
Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
auch wenn ich
Delphi-Quellcode:
mache passiert das selbe. Die komplette Schrift auf dem PageControl wird Fett
with PageControl do
... |
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:
erfolgen. Zusätzlich wird dort nur mit lfEscapement und lfOrientation der übernommene Font gedreht.
GetObject(Font.Handle, SizeOf(LogFont),@LogFont);
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 :? |
Re: TPageCotnrol -> selber zeichnen -> Schrift bei Tab
ICh denke das Problem liegt ncoh woanders.
Denn auch wenn ich mit:
Delphi-Quellcode:
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:
If PageControl.TabPosition = tpRight then
begin
Delphi-Quellcode:
irgendwie die Drehung auch Auswirkung zeigt. Irgendwie muss ich das Globale da raus kriegen ?
canvas.TextOut(rect.left+26,rect.top+5,Pages[Der_Tabindex].Caption);
Ich rufe ja auch von jedem PageControl über das Draw Ereignis diese Procedure auf ... Bin ratlos ? ... |
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