169 похожих чатов

Объясните пожалуйта, как перечисления преобразовывать в числа? type TMagic =

(
Mag1 = 1,
Mag5 = 2,
Mag7 = 3
);

procedure test1(mag: TMagic);
begin
MessageBox(0, IntToStr(mag),'',0);
end;

22 ответов

48 просмотров

ord(x) любая школьная книжка по Паскалю

Кастовать.... К типам. Или брать порядок.

procedure test1(mag: TMagic); begin MessageBox(0, Integer(mag),'',0); end;

Не могу удержаться....я

Ruslan-aka DUDE Автор вопроса
Arioch The
ord(x) любая школьная книжка по Паскалю

MessageBox(0, IntToStr(ord(mag)),'',0); // Incompatible type for arg no. 2: Got "AnsiString", expected "PChar" MessageBox(0, ord(mag),'',0); // Incompatible type for arg no. 2: Got "LongInt", expected "PChar"

Ruslan aka DUDE
MessageBox(0, IntToStr(ord(mag)),'',0); // Incompa...

MessageBox(Handle, Integer(mag).ToString(),'',0);

Ruslan-aka DUDE Автор вопроса
Alexey Gavrilov
procedure test1(mag: TMagic); begin MessageB...

MessageBox(0, IntToStr(Integer(mag)),'',0); // Incompatible type for arg no. 2: Got "AnsiString", expected "PChar" MessageBox(0, Integer(mag),'',0); // Incompatible type for arg no. 2: Got "LongInt", expected "PChar"

Alexey Gavrilov
MessageBox(Handle, Integer(mag).ToString(),'',0);

а вот это как раз опасно, ибо SizeOf(mag) < SizeOf(integer) 😃

Arioch The
а вот это как раз опасно, ибо SizeOf(mag) < SizeOf...

Это посыл... Куда идти 😊 Ну... MsgBox, от такой, опять надо кастовать.

Ruslan-aka DUDE Автор вопроса
Alexey Gavrilov
MessageBox(Handle, Integer(mag).ToString(),'',0);

MessageBox(0, Integer(mag).ToString(),'',0); // Incompatible type for arg no. 2: Got "AnsiString", expected "PChar"

Ruslan-aka DUDE Автор вопроса
А
Ну впиши pchar(inttostr() )

Вот это сработало, но бред же почему pchar требуется для IntToStr, только в том случае если в него передано перечисление?

Ruslan aka DUDE
Вот это сработало, но бред же почему pchar требует...

Какой бред? Открой описание процедуры показа сообщения

Ruslan aka DUDE
MessageBox(0, Integer(mag).ToString(),'',0); // In...

MessageBox(Handle, PChar(Integer(mag).ToString()),'',0); MessageBox(Handle, PChar(Format('Value =%d'), [Integer(mag)]),'',0);

Alexey Gavrilov
Это посыл... Куда идти 😊 Ну... MsgBox, от такой, о...

что ж тут сделаешь, если мышки плачут, колются, но нe хотят использовать TTastDialog ///но все таки кастовать к integer тут опасно, не стоит в человеке плохую привычку создавать

Alexey Gavrilov
MessageBox(Handle, Integer(mag).ToString(),'',0);

кстати, вчера заменил все MessageBox на Application.*, ибо API- шный глючит

Iluha Companets
кстати, вчера заменил все MessageBox на Applicatio...

А я на QuestionDialog. Кастомизация предсказуемая https://t.me/Delphi_Lazarus/292093?single

Ed Doc
А я на QuestionDialog. Кастомизация предсказуемая ...

мне главное - не кастомизация, а нормальное поведение в мультиоконном приложении. API прятался за немодальными окнами! да и ненужный механизм передачи хэндла - подтверждкние тому, что это не вписывается в LCL

Arioch The
а вот это как раз опасно, ибо SizeOf(mag) < SizeOf...

чем? это PInteger(@mag)^ опасен. integer(mag) компилятор должен обезопасить

zamtmn
чем? это PInteger(@mag)^ опасен. integer(mag) комп...

Где написано, что должен? И что такое "обезопасить"? Если бы ты кастовал другой целочисленный тип - то да. Но ты кастуешь просто абстрактный тип. Так что я бы предпочёл не рисковать. Либо идти по никому уровню и использовать byte/shortint и лапками контролировать SizeOf с обмазыванием assert'ами, либо идти по высокому уровню и писать Ord, который и предназначен для этого изначально, и будучи функцией не зависит от размера данных.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта