Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ Срочно, доступ к элементам массива, безразмерные массивы

Автор: SKVOZNJAK 27.06.2006 13:53

Разбираю исходник клавиатурного модуля - без клавы висит написание нужной и полезной проги. CRT не устраивает по причине сканирования клавы в другом окне. Не в том в котором нужно. Имеем фагденты кода:

Код
Type
     PBoolArray = ^BoolArray;
     BoolArray  = Array[0..4000] of ByteBool;



{
     Get a snapshot of the current state of the keyboard.
     Returns an array of keystates, indexed by the SDLK_  syms.
     Used:
         keystate: PBoolArray;

        keystate := SDL_GetKeyState(nil);
        if keystate[SDLK_RETURN] then
          ... <RETURN> is pressed
    }
  function SDL_GetKeyState(var numkeys:longint):PBoolArray;cdecl;


В оригинале массив имел длину[0..0], но прежде массивы локальных переменных с такой длиной глючили при выполнении проги. Посему увеличил длину с запасом. Можно ли вообще использовать в ФПЦ безразмерные массивы.
Переменная numkeys всё время возращает одно и то же число, предположительно номер элемента массива или его полезную длину. Но возникла проблема: как значение элемента массива типа PBoolArray записать в переменную типа BYTE и наоборот?

Автор: volvo 27.06.2006 14:15

Цитата
Можно ли вообще использовать в ФПЦ безразмерные массивы.
Ну, вообще-то
Type
PBoolArray = Array Of ByteBool;

и, соответственно, SetLength, вроде никто не отменял...

Цитата
возникла проблема: как значение элемента массива типа PBoolArray записать в переменную типа BYTE и наоборот?
TypeCast... Что-то в таком вот духе:

Type
PBoolArray = ^BoolArray;
BoolArray = Array[0..4000] of ByteBool;

var
pa: PBoolArray;
b: byte;

begin
pa := new(PBoolArray);

b := 1;
pa^[10] := bytebool(b);

b := byte(pa^[10]);
end.