2015-10-16 3 views
0

Попытка изменить высоту формы. В форме я пытаюсь изменить это дает мне ошибку:Ошибка при попытке изменить высоту формы

"Access violation at address 005B9963 in module 'M1Project.exe. Read of address 0000005C."

В других формах я могу изменить высоту хорошо, это просто такая форма. Кто-нибудь знает, почему эта ошибка происходит? Вот код:

procedure TExamQuestions.RandomQuestionButtonClick(Sender: TObject); 
    var 
    gif:TgifImage; 
    filelocation,temp:string; 
    i,x,cycle,questionid,length:integer; 
    questionpool: array [0..81] of integer; 
begin 
    Randomize; 
    cycle:=random(80)+1; 
    questionid:= cycle mod x; 
    currentquestion:=questionpool[questionID]; 
    temp:=inttostr(currentquestion); 
    if temp='0' then 
    temp:=inttostr(questionpool[x]); 
    gif:=TgifImage.Create; 
    loginmenu.ADOQuery1.SQL.Clear; 
    loginmenu.ADOQuery1.SQL.Add('SELECT question from examquestions where questionID='+temp+''); 
    loginmenu.ADOQuery1.Active:=true;    
     filelocation:=loginmenu.datasource1.DataSet.FieldByName('Question').AsString; 
    filelocation:=('O:\Subjects\Computing\Year 13 EXEs\DButcher\A2 bant\Project = (\Program\Resources\List\'+filelocation); 
    gif.loadfromfile(filelocation); 
    length:=gif.Height; 
    ExamQuestionPicutre.Height:=length; 
    background.ClientHeight:=length; 
    ExamQuestionPicutre.Picture.assign(gif); 
    examquestions.Height:=length; 
end; 

ответ

2

Причина заключается в том, что examquestions является nil. Мы не можем видеть, где он инициализирован или, как кажется, не инициализирован.

Один воображает, что examquestions является глобальной переменной, объявленной как это:

var 
    ExamQuestions: TExamQuestions; 

Если форма была автоматически создана, то файл .dpr будет содержать следующую строку:

Application.CreateForm(TExamQuestions, ExamQuestions); 

Но это выглядит например, вы удалили эту строку и создали форму вручную. Это хорошо, действительно хороший ход. Но когда вы это делаете, вы также должны удалить бесполезную глобальную переменную, которую IDE добавила для вас. Это приводит только к путанице.

В любом случае вы никогда не должны использовать глобальную переменную экземпляра для работы с Self. Заменить

examquestions.Height:=length; 

с

Height:=length; 

И, наконец, вы, кажется, не имеют никакого отношения вообще для строчных и заглавных букв. Правда, Pascal не чувствителен к регистру, но просто решив использовать строчный код для всего кода, который вы вводите, ваш код становится более трудным для чтения. Не делай этого. Используйте корпус Pascal. Не смешивайте корпус Pascal со всем нижним регистром. На самом деле не смешивайте вообще. Быть последовательным.

+0

Вы также должны рассмотреть другое имя для локальной переменной «длина», так как «Длина» также является именем внутренней функции. –

Смежные вопросы