![]() |
TAlignment welcher Datentype?
Hallo,
ich bin dabei mir eine eigene TEdit – Komponente zu programmieren. Jetzt habe ich mal folgende Frage: Welcher Datentype muss TAlignment haben?
Delphi-Quellcode:
Mit diesen funktioniert es, aber welcher Datentype ist angezeigt?
const
Alignments: array[TAlignment] of {DWORD} {integer}{WORD}Smallint = (ES_LEFT, ES_RIGHT, ES_CENTER); Bis bald Chemiker |
Re: TAlignment welcher Datentype?
machs so :
Delphi-Quellcode:
const
Alignments: array[TAlignment] of Byte = (ES_Left, ES_Right, ES_Center); |
Re: TAlignment welcher Datentype?
Hallo Hansa,
ich habe für TAligmnent jetzt schon so viele Datentypen gesehen, aber Byte hatte ich noch nicht. Für mich wäre von Interesse zu erfahren, nach welchen Kriterien man dabei vorgeht. Wird das von Windows vorgeschrieben? Bis bald Chemiker |
Re: TAlignment welcher Datentype?
eine enumeration wäre wohl das richtige. Und es gibt auch bereits einen Typ (siehe Alignment von TLabel).
Wenn du es unbedingt neu definieren willst:
Delphi-Quellcode:
type
TAlignment = (esLeft, esCenter, esRight); |
Re: TAlignment welcher Datentype?
Moin Chemiker,
Zitat:
In diesem Falle werden die Konstanten in ![]() ![]() [EDIT] @Jens: Schau Dir mal die WinUser.h an. Zufällig passt es in diesem Falle mit einem Aufzählungstyp, aber auch nur, weil nach dem dritten Schluss gemacht wird. Der nächste mögliche Stil hätte dann nämlich die 4, der übernächste die 8 usw.. Da sie alle im gleichen Parameter übergeben werden, und somit eine Bitmaske darstellen müssen, verdoppelt sich der Wert immer (vom ersten einmal abgesehen ;-)) [/EDIT] |
Re: TAlignment welcher Datentype?
Wenn Windows 32 Bit braucht, für mögliche 3 Ganzzahlwerte darzustellen, dann muss man diese Verschwendung nicht noch im eigenen Programm fortsetzen. Für das hier :
Zitat:
|
Re: TAlignment welcher Datentype?
Moin Hansa,
Zitat:
Die Edit-Styles beschränken sich nicht auf die drei genannten, sondern benötigen mindestens 16-Bit, ausserdem sind sie als Long deklariert. Da die Werte zumindest intern mit den API-Funktionen verwendet werden, die dann, wie schon gesagt, ein DWORD erwarten, macht das Deklarieren als Byte auch keinen Sinn. |
Re: TAlignment welcher Datentype?
Desweiteren liest eine 32-Bit CPU immer 32 Bit egal ob der Datentyp kleiner ist.
|
Re: TAlignment welcher Datentype?
Hallo,
ich habe mir mal die WinUser.h angesehen und kann die Aussage von Christian bestätigen. Siehe:
Delphi-Quellcode:
usw.
/*
* Edit Control Styles */ #define ES_LEFT 0x0000L #define ES_CENTER 0x0001L #define ES_RIGHT 0x0002L Beim Memo-Feld ist Alignments auch ein DWORD.
Delphi-Quellcode:
Allerdings habe ich bei einem anderen Control das auch schon als WORD gesehen, allerdings finde ich es zurzeit nicht mehr.
procedure TCustomMemo.CreateParams(var Params: TCreateParams);
const Alignments: array[Boolean, TAlignment] of DWORD = ((ES_LEFT, ES_RIGHT, ES_CENTER),(ES_RIGHT, ES_LEFT, ES_CENTER)); Bei der Suche nach dem richtigen Datentyp ist mir aufgefallen, dass fast alle Integer – Datentypen verwendet wurden. Das finde ich irgendwie schon interessant, dass das nicht so ganz klar ist. Ich bin aber jetzt der Meinung, wie Christian das DWORD der Richtige Datentyp ist. Noch mal Danke an alle, für die Hilfe. Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 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