Код (Text): TdPwrite = class(TObject) private { Private declarations } tValue : real; tEd : byte; tFlag : byte; tScale : byte; procedure SetValue(iValue : real); procedure SetEd(iEd : byte); procedure SetFlag(iFlag : byte); procedure SetScale(iScale : byte); function GetValue : real; function GetEd : byte; function GetFlag : byte; function GetScale : byte; public { Public declarations } property Value : real read GetValue write SetValue; property Ed : byte read GetEd write SetEd; property Flag : byte read GetFlag write SetFlag; property Scale : byte read GetScale write SetScale; end; Объекты этого класса хочу выравнять на границу 1 байта и не через ГУИ среды А программно через дерективы! На си есть: #pragma pack(push,1) и #pragma pack(pop), а как это на Дельфи?
n0name Код (Text): param := TdPwrite.Create; ShowMessage(IntToStr(SizeOf(TdPwrite))); Отображеается цифра 4 !
n0name class Proba { public: int a,b; }; Proba * pProba = new Proba; Тута Proba и pProba разные вещи! То что я писал это попытка сделать: SizeOf(Proba) а не siziof(pProba); Уточню, что хочу: эти вещи должны быть в объекте! и когда я задам массив объектов этого класса, каждый объект должен занимать память равный этим переменным и выравненный на 1 байт!
Type Switch Syntax {$A+}, {$A-}, {$A1}, {$A2}, {$A4}, or {$A8} {$ALIGN ON}, {$ALIGN OFF}, {$ALIGN 1}, {$ALIGN 2}, {$ALIGN 4}, or {$ALIGN 8} Default {$A8} {$ALIGN 8} Scope Local Remarks The $A directive controls alignment of fields in Delphi record types and class structures. In the {$A1} or {$A-} state, fields are never aligned. All record and class structures are packed. In the {$A2} state, fields in record types that are declared without the packed modifier and fields in class structures are aligned on word boundaries. In the {$A4} state, fields in record types that are declared without the packed modifier and fields in class structures are aligned on double-word boundaries. In the {$A8} or {$A+} state, fields in record types that are declared without the packed modifier and fields in class structures are aligned on quad word boundaries. Record type field alignment is described in the Delphi Language Guide. See Record types. Regardless of the state of the $A directive, variables and typed constants are always aligned for optimal access. In the {$A8} state, execution will be faster. Итого, получаем: ... {$A1} tEd : byte; tFlag : byte; tScale : byte; {$A-} ...
EvilsInterrupt Не получится. SizeOf(TObject) не равен 0. Вообще, ты не туда полез. У тебя 4 переменных, функциональность твоего класса ничем не отличается от простой структуры. Зачем тебе класс? ООП надо применять с умом, а не пытаться впихнуть его всюду.
IceStudent Я только просил подсказать, а не учить как применять! Я знаю где надо ООП применять и знаю в каких местах. Я не буду объяснять, но ООП в том, что я сейчас делаю Самое то! зы: Более того слова: "ты не туда полез", напоминают мне Алтын в г.Казани, это комп. диски там продают целый этаж. Так вот там частенько приходишь за конкретной игрушой, к примеру Дум3. Ты знаешь по опыту где в этом магазине лучшее место, и лучший продавец. Ты идешь к этому место, а тебе чуть ли не дорогу перегораживают: "Вот появилась игрушка Крид, нежелаете поиграть?". Тупо, очень тупо, человек пришел не за этим и знает чего он хочет!
EvilsInterrupt Не ты первый, не ты последний, кто везде кричит про ООП. Ничего личного. Просто в том коде, что ты привёл, класс совершенно не нужен.
IceStudent Что я достигаю с применинием ООП: 1. Мне не надо писать талмуд по сопровождению, что да как вызвать! и какие структуры каким ф-циями использовать! 2. Если человек захочет написать компонент в палитру компонентов используя мой класс у него не возникнет затруднений, че трудного применить TComponent ?
EvilsInterrupt Код (Text): param := TdPwrite.Create; ShowMessage(IntToStr(SizeOf(TdPwrite))); Попробуй ShowMessage(IntToStr(SizeOf(param))) param в данном случае экземпляр твоего класса.
В файле идут подряд сущности, каждая сущность имеет: значение - вещественное, 4 байта Ед.измер.- 1 байт Флаг - 1байт Таких сущностей надо n число раз, гибко надо иметь возможностей, в зависимости от ситуации их может и 20 и 45 и 15 и др. кол-во! Я написал класс, который описывает одну сущность(В аттаче). Когда я буду читать из файла я хочу чтобы все поля выравнивались на 1 байт и сущности тоже! Пример: 1 сущность: 1й байт это значение, 5й байт это ед. измер. 6й байт это флаг 7й байт - НАЧАЛО следующей сущности ( значение след.сущности) Хочу когда я читать и писать в файл объектами, т.е. задал адрес объекта класса для WriteFile и чтобы он записал 6 байт ибо стоко в байтах весит структура! Именно этого я и хочу добиться. Решения которые меня не устраивают по определенным причинам: 1. создать структуру ее выравнять на границу 1 байта, в классе создать объект этой структуры 2. Создать структуру ее выравнять на границу 1 байта, написать функции чтения, записи, чтения значения, записи значения и др. вещей по отедельности ЗЫ: Ради интереса попробуйте в Турбо дельфи присобачить иконку к разрабатываемому компоненту