Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   GetTextAlign TA_LEFT=TA_TOP? (https://www.delphipraxis.net/161652-gettextalign-ta_left%3Dta_top.html)

Bomberbb 14. Jul 2011 11:24


GetTextAlign TA_LEFT=TA_TOP?
 
Irgendwie hab ich nich ganz geschnallt, wie bekomme ich die Textausrichtungen raus? Ich hab folgende Funktion:

Code:
function inTextAlign(inValue:Byte):Byte;
Begin
  Result:=ord(fOwner.fTextalign and inValue = inValue);
End;
Nun hat aber doch TA_LEFT den gleichen Wert wie TA_TOP, dementsprechend kann meine Funtion so nicht funktionieren.
Muss ich alle andern Konstanten der Ausrichtung abfragen und kann dann erst auf die Ausrichtung schließen?

Keine Ahnung warum TA_LEFT=TA_TOP???

Mit Hoffe auf Hilfe

BBB

edit:
kann ich das nur so lösen?
Code:
  Function inTextAlignV(inValue: Byte): Byte;
  Begin
    If inValue = TA_TOP Then
      Result := ord((fOwner.fTextalign And TA_BOTTOM <> TA_BOTTOM) And (fOwner.fTextalign And TA_BASELINE <> TA_BASELINE))
    Else
      Result := ord(fOwner.fTextalign And inValue = inValue);
  End;

  Function inTextAlignH(inValue: Byte): Byte;
  Begin
    If inValue = TA_LEFT Then
      Result := ord((fOwner.fTextalign And TA_RIGHT <> TA_RIGHT) And (fOwner.fTextalign And TA_CENTER <> TA_CENTER))
    Else
      Result := ord(fOwner.fTextalign And inValue = inValue);
  End;

p80286 14. Jul 2011 12:13

AW: GetTextAlign TA_LEFT=TA_TOP?
 
Ich weiß nicht ob ich Dein Problem so richtig Verstanden habe.
Wenn ich hier und hiereinen Blick darauf werfe und in der Windows.Pas nachschaue
Delphi-Quellcode:

  { Text Alignment Options }
  {$EXTERNALSYM TA_NOUPDATECP}
  TA_NOUPDATECP = 0;
  {$EXTERNALSYM TA_UPDATECP}
  TA_UPDATECP = 1;
  {$EXTERNALSYM TA_LEFT}
  TA_LEFT = 0;
  {$EXTERNALSYM TA_RIGHT}
  TA_RIGHT = 2;
  {$EXTERNALSYM TA_CENTER}
  TA_CENTER = 6;
  {$EXTERNALSYM TA_TOP}
  TA_TOP = 0;
  {$EXTERNALSYM TA_BOTTOM}
  TA_BOTTOM = 8;
  {$EXTERNALSYM TA_BASELINE}
  TA_BASELINE = 24;
  {$EXTERNALSYM TA_RTLREADING}
  TA_RTLREADING = $100;
  {$EXTERNALSYM TA_MASK}
  TA_MASK = (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING);

  {$EXTERNALSYM VTA_BASELINE}
  VTA_BASELINE = TA_BASELINE;
  {$EXTERNALSYM VTA_LEFT}
  VTA_LEFT = TA_BOTTOM;
  {$EXTERNALSYM VTA_RIGHT}
  VTA_RIGHT = TA_TOP;
  {$EXTERNALSYM VTA_CENTER}
  VTA_CENTER = TA_CENTER;
  {$EXTERNALSYM VTA_BOTTOM}
  VTA_BOTTOM = TA_RIGHT;
  {$EXTERNALSYM VTA_TOP}
  VTA_TOP = TA_LEFT;
Dann sollte klar sein das es nur eine Kombination von Textausrichtungen gibt. Also nicht nur TA_Left sondern TA_LEFT und TA_BOTTOM.

Gruß
K-H

uligerhardt 14. Jul 2011 12:15

AW: GetTextAlign TA_LEFT=TA_TOP?
 
Ich weiß ja nicht, wofür du das Ganze brauchst, aber vermutlich würdest du dir leichter tun, wenn du nicht mit den Windows-Konstanten und Bitschubserei arbeiten würdest, sondern z.B. mit TAlignment, TVerticalAlignment und Set-Operationen.

DeddyH 14. Jul 2011 12:23

AW: GetTextAlign TA_LEFT=TA_TOP?
 
Das MSDN sagt in der Hilfe zu GetTextAlign:
Zitat:

Zitat von MSDN
The text-alignment flags are not necessarily single bit flags and may be equal to zero. The flags must be examined in groups of related flags, as shown in the following list.

TA_LEFT, TA_RIGHT, and TA_CENTER
TA_BOTTOM, TA_TOP, and TA_BASELINE
TA_NOUPDATECP and TA_UPDATECP

If the current font has a vertical default base line, the related flags are as shown in the following list.

TA_LEFT, TA_RIGHT, and VTA_BASELINE
TA_BOTTOM, TA_TOP, and VTA_CENTER
TA_NOUPDATECP and TA_UPDATECP


Bomberbb 14. Jul 2011 12:23

AW: GetTextAlign TA_LEFT=TA_TOP?
 
Das es nur eine Kombinaton gibt, ist mir klar.
aber wenn TA_LEFT = TA_TOP dann kann ich zumindest nicht direkt auf eines der Beiden abfragen, sondern muss die anderen abfragen ausschließen, das kam mir etwas seltsam vor...

Hätte gedacht, dass ich jeden Wert mit Gettextalign and TA_wert = TA_wert abfragen könnte.

p80286 14. Jul 2011 12:47

AW: GetTextAlign TA_LEFT=TA_TOP?
 
Was ist daran seltsam?
Der Standardfall sollte TopLeft sein also kein Bit gesetzt!
Ist hingegen das zweite Bit gesetzt ist es auf keinen Fall TA_LEFT (es könnte TA_RIGHT oder TA_CENTER sein) Und Ist das vierte bit nicht gesetzt, dann ist es immer noch TA_TOP.

Gruß
K-H


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