AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TAlignment welcher Datentype?

Ein Thema von Chemiker · begonnen am 16. Sep 2007 · letzter Beitrag vom 16. Sep 2007
Antwort Antwort
Benutzerbild von Chemiker
Chemiker
Online

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#1

TAlignment welcher Datentype?

  Alt 16. Sep 2007, 13:44
Hallo,

ich bin dabei mir eine eigene TEdit – Komponente zu programmieren. Jetzt habe ich mal folgende Frage: Welcher Datentype muss TAlignment haben?

Delphi-Quellcode:
const
  Alignments: array[TAlignment] of {DWORD} {integer}{WORD}Smallint =
                                                            (ES_LEFT, ES_RIGHT, ES_CENTER);
Mit diesen funktioniert es, aber welcher Datentype ist angezeigt?

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: TAlignment welcher Datentype?

  Alt 16. Sep 2007, 14:11
machs so :

Delphi-Quellcode:
const
  Alignments: array[TAlignment] of Byte = (ES_Left, ES_Right, ES_Center);
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker
Online

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: TAlignment welcher Datentype?

  Alt 16. Sep 2007, 14:27
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: TAlignment welcher Datentype?

  Alt 16. Sep 2007, 14:28
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);
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TAlignment welcher Datentype?

  Alt 16. Sep 2007, 14:34
Moin Chemiker,

Zitat von Chemiker:
Für mich wäre von Interesse zu erfahren, nach welchen Kriterien man dabei vorgeht. Wird das von Windows vorgeschrieben?
Bei Konstanten, die durch das OS vorgegeben sind, wie eben die Stile beim Erstellen von Controls, sollte man im PSDK (ggf. den Header-Files) mal nachschauen, welcher Datentyp verlangt wird.
In diesem Falle werden die Konstanten in MSDN-Library durchsuchenCreateWindow/MSDN-Library durchsuchenCreateWindowEx für den Parameter dwStyle benötigt, woraus sich dann ergibt, dass sie vom Typ her DWORD sein sollten.


[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]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: TAlignment welcher Datentype?

  Alt 16. Sep 2007, 14:52
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 von Windows.pas:
ES_LEFT = 0;
ES_CENTER = 1;
ES_RIGHT = 2;
reicht Byte allemal aus. Die unnötige Vervierfachng macht in dem Fall wohl kaum was aus, aber es braucht sich zumindest keiner über den Speicherhunger von Windows zu ärgern. Um das wieder einzusparen kann man ja auch alles WinAPI-mäßig programmieren.
Gruß
Hansa
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TAlignment welcher Datentype?

  Alt 16. Sep 2007, 15:05
Moin Hansa,

Zitat von Hansa:
Wenn Windows 32 Bit braucht, für mögliche 3 Ganzzahlwerte darzustellen
dann werfe auch Du mal einen Blick in die WinUser.h.

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: TAlignment welcher Datentype?

  Alt 16. Sep 2007, 15:16
Desweiteren liest eine 32-Bit CPU immer 32 Bit egal ob der Datentyp kleiner ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker
Online

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: TAlignment welcher Datentype?

  Alt 16. Sep 2007, 22:40
Hallo,

ich habe mir mal die WinUser.h angesehen und kann die Aussage von Christian bestätigen.
Siehe:

Delphi-Quellcode:
/*
 * Edit Control Styles
 */
#define ES_LEFT 0x0000L
#define ES_CENTER 0x0001L
#define ES_RIGHT 0x0002L
usw.

Beim Memo-Feld ist Alignments auch ein DWORD.

Delphi-Quellcode:
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));
Allerdings habe ich bei einem anderen Control das auch schon als WORD gesehen, allerdings finde ich es zurzeit nicht mehr.
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz