Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2014, 23:32   #1
Karateka
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 33
По умолчанию Memo. Ошибка runtime error 216 at 00404F22

Облазил в инете, у всех в основном такая проблема в какой-нибудь программе. У меня же просто на форме. Кинул Memo, обращаюсь к нему Memo1.Lines.Add('Aaaa');

И тут вылетает ошибка:

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0051D19D in module 'Project1.exe'. Read of address 000002A8'

Потом окошко с ошибкой:

Runtime error 216 at 00404F22

Как я понял проблема с обращением к памяти по такому-то адресу, только как её исправить. С утра все было нормально, сейчас сел за комп и тут пошли вот такие пироги.

Конечно возможно я допустил где-то ошибку, просто с чемпионатом мира, сейчас особо не высыпаюсь =)

вот код:
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Memo1: TMemo;
implementation

{$R *.dfm}
begin

Memo1.lines.add('aaa');
end.
Karateka вне форума Ответить с цитированием
Старый 19.06.2014, 23:40   #2
blackstrip
Форумчанин
 
Аватар для blackstrip
 
Регистрация: 21.01.2012
Сообщений: 240
По умолчанию

А главный блок begin-end у формы когда выполняется? Если до того как форма уже существует и показана на экране, то Memo1 не существует либо не может выполнить lines.add на этот момент.

Что-то никогда не пробовал в этот блок что нибудь добавлять кроме обработчиков определенных событий.
blackstrip вне форума Ответить с цитированием
Старый 19.06.2014, 23:54   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Код:
var
  Form1: TForm1;
  Memo1: TMemo;   // А вот это объявление нафига?
implementation

{$R *.dfm}
begin

Memo1.lines.add('aaa');  //Ты представляешь себе в каком месте модуля эта строчка находится? И когда выполняется код расположенный здесь?

Последний раз редактировалось northener; 20.06.2014 в 00:05.
northener вне форума Ответить с цитированием
Старый 20.06.2014, 00:15   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от blackstrip Посмотреть сообщение
А главный блок begin-end у формы когда выполняется? Если до того как форма уже существует и показана на экране, то Memo1 не существует либо не может выполнить lines.add на этот момент.

Что-то никогда не пробовал в этот блок что нибудь добавлять кроме обработчиков определенных событий.
Это не главный блок формы. Это секция инициализации паскалевского модуля. Выполняется она еще до создания форм. Кстати обработчики событий располагаются выше этой секции.
northener вне форума Ответить с цитированием
Старый 20.06.2014, 00:37   #5
Karateka
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 33
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Код:
var
  Form1: TForm1;
  Memo1: TMemo;   // А вот это объявление нафига?
implementation

{$R *.dfm}
begin

Memo1.lines.add('aaa');  //Ты представляешь себе в каком месте модуля эта строчка находится? И когда выполняется код расположенный здесь?
То есть получается вначале пробегается по блоку begin end, а только потом начинает по форме бегать. Ок, спасибо, будут знать теперь =)
Karateka вне форума Ответить с цитированием
Старый 20.06.2014, 01:05   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Karateka Посмотреть сообщение
То есть получается вначале пробегается по блоку begin end, а только потом начинает по форме бегать. Ок, спасибо, будут знать теперь =)
"Потом" может и не быть вовсе. Эта форма может быть и вообще никогда не создана. Но секция инициализации будет выполнена в любом случае.
northener вне форума Ответить с цитированием
Старый 20.06.2014, 01:56   #7
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

Цитата:
Memo1: TMemo; // А вот это объявление нафига?
А тогда что это?
Код:
type
  TForm1 = class(TForm)
    Memo1: TMemo;//???
в var Memo1 явно излишен. Удивляюсь как вообще это компилируется. Код выполнять желательно внутри процедур (или функций). Это не консоль, чтоб такое вытворять. Шлёпни два раза мышью на пустом месте дизайнера формы, появится процедура создания формы. Там уже можешь писать свои Memo1.Lines

Последний раз редактировалось XE5; 20.06.2014 в 02:04.
XE5 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
runtime error 216 at 5b261531 в dll при завершении приложения Volkogriz Общие вопросы Delphi 7 12.02.2013 18:26
Runtime error 216 [Delphi7 + JediVCL + IBExpress] AVZevs Общие вопросы Delphi 8 28.09.2012 12:11
Ошибка runtime error '9' subscript out of range BioNoob Microsoft Office Excel 2 05.06.2012 16:33
Ошибка макроса Runtime ERROR 1004 RML Microsoft Office Excel 3 20.05.2010 23:33
RUNTIME ERROR 216 при работе с DLL 100GRamm Общие вопросы Delphi 9 07.11.2009 13:37