Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 07.02.2011, 04:57   #1
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
Стрелка Access violation at address 00447E73 in modul Project.exe. Read of address 00000057.

создание Labels
Код:
procedure TForm2.Image1DblClick(Sender: TObject);
begin
  Tekst := TLabel.Create(self);
  with Tekst do
  begin
    Parent := Form2;
    Transparent := True;
    Top := y2;
    Left := x2;
    TekstS := Tekst;
    Caption := 'ArtGrek';
    Edit1.Text := Caption;
    TekstKol[List[8].IndexOf(ImSender)] := IntToStr(StrToInt(TekstKol[List[8].IndexOf(ImSender)]) + 1);
    Name := 'Tekst_' + IntToStr(List[8].IndexOf(ImSender)) + '_' + TekstKol[List[8].IndexOf(ImSender)];
    Font.Size := Trunc(sDecimalSpinEdit1.Value);
    Font.Name := sFontComboBox1.Text;
    Font.Color := sColorBox1.Selected;
    OnClick := TekstClick;
    OnMouseDown := TekstMouseDown;
    OnMouseMove := TekstMouseMove;
    OnMouseUp := TekstMouseUp;
  end;
  Edit1.SelStart := Length(Edit1.Text);
  Frame(Tekst);
  Edit1.SetFocus;
end;
удаление Labels
Код:
procedure TForm2.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  i_EKD: integer;
  c_EKD: Integer;
begin
  if (Key=VK_DELETE) and (TLabel(TekstS) <> nil) then
  begin
    c_EKD := 0;
    TLabel(TekstS).Free;
    if StrToInt(TekstKol[List[8].IndexOf(ImSender)]) > 0 then
      for i_EKD := 1 to StrToInt(TekstKol[List[8].IndexOf(ImSender)]) do
        if FindComponent('Tekst_' + IntToStr(List[8].IndexOf(ImSender)) + '_' + IntToStr(i_EKD)) <> nil then
        begin
          inc(c_EKD);
          TLabel(FindComponent('Tekst_' + IntToStr(List[8].IndexOf(ImSender)) + '_' + IntToStr(i_EKD))).Caption :=
            'Tekst_' + IntToStr(List[8].IndexOf(ImSender)) + '_' + IntToStr(c_EKD);
        end;
    TekstKol[List[8].IndexOf(ImSender)] := IntToStr(StrToInt(TekstKol[List[8].IndexOf(ImSender)]) - 1);
    Image1Click(Image1);
  end;
end;
перебор перед закрытием
Код:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i_FCl: integer;
begin

  if StrToInt(TekstKol[List[8].IndexOf(ImSender)]) > 0 then
    for i_FCl := 1 to StrToInt(TekstKol[List[8].IndexOf(ImSender)]) do
    begin
      TLabel(FindComponent('Tekst_' + IntToStr(List[8].IndexOf(ImSender)) + '_' + IntToStr(i_FCl))).Visible := False;
    end;
  Form1.Enabled := True;
  Form1.Show;
  Form1.SetFocus;
end;
теперь словами
во первых извените за обьем кода, но без всего думаю будет сложнее)
вот последователность деиствии:
создал 3 лабела, закрыл : ок
создал 3 лабела, удалил 3-и, закрыл : ок
создал 3 лабела, удалил 2-и, удалил 3-и, закрыл : ок
создал 3 лабела, удалил 2-и, закрыл : ошибка
после ошибки, удалил 3-и, закрыл : ок

пожалуста спасаите

P.S. читать код порои самому сложно, если затруднит, скажите, сокращу
Изображения
Тип файла: jpg Error.jpg (16.8 Кб, 142 просмотров)
VirusN13

Последний раз редактировалось ArtGrek; 07.02.2011 в 05:05.
ArtGrek вне форума Ответить с цитированием
Старый 07.02.2011, 09:18   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Спасение утопающих - дело рук самих утопающих.
Ищи строчку с адресом 447E73 (Search -> Find Error ..)
mss вне форума Ответить с цитированием
Старый 07.02.2011, 11:27   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

http://www.gunsmoker.ru/2009/05/access-violation.html
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 07.02.2011, 22:19   #4
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Прошу прощения... А какой великий смысл в этой строчке :
Код:
TLabel(FindComponent('Tekst_' + IntToStr(List[8].IndexOf(ImSender)) + '_' + IntToStr(i_FCl))).Visible := False;
если форма будет закрыта...
Или вы ее не динамически создаете, а она все время висит в памяти бесполезным грузом ?
asmodey1 вне форума Ответить с цитированием
Старый 08.02.2011, 01:26   #5
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

список картинок, у каждои из которых свои список лабелов
Текст_Х_У, Х - IntToStr(List[8].IndexOf(ImSender)) индекс картинки к которои пренадлежит текст, У - IntToStr(i_FCl) порядковыи номер, при закрытии все ишезают, а при открытии показываюца только лабелы с индексом Х
лучше не придумал)

Цитата:
Сообщение от mss Посмотреть сообщение
Спасение утопающих - дело рук самих утопающих.
как угодал то!) ток тогда у меня выбора не было, тем более инета)
Цитата:
Ищи строчку с адресом 447E73 (Search -> Find Error ..)
круто! начну учить assembler)
VirusN13

Последний раз редактировалось Stilet; 08.02.2011 в 08:12.
ArtGrek вне форума Ответить с цитированием
Старый 08.02.2011, 03:20   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

F8 нажми, чтобы код в отладчик прогрузился, тогда и появится Find Error.
Только если код редактировался, то адрес 00447E73 уже протух, скорей всего.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 08.02.2011, 04:13   #7
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию


Код:
uses
  ..., Controls;
вот что нашел в модуле
Код:
  TControlActionLink = class(TActionLink)
  protected
    procedure SetVisible(Value: Boolean); override;
  TControl = class(TComponent)
  private
    procedure SetVisible(Value: Boolean);
    property Visible: Boolean read FVisible write SetVisible stored IsVisibleStored default True;
{ TControlActionLink }
procedure TControlActionLink.SetVisible(Value: Boolean);
begin
  if IsVisibleLinked then FClient.Visible := Value;
end;
{ TControl }
procedure TControl.SetVisible(Value: Boolean);
begin
  if FVisible <> Value then
  begin
    VisibleChanging;
    FVisible := Value;
    Perform(CM_VISIBLECHANGED, Ord(Value), 0);
    RequestAlign;
  end;
end;
компоненты я только начал учица писать и в модуле хоть и арентируюсь, но ошибку понять не могу
в ассемблере я вообше не знаю ничего
сеичас начну читать статью GunSmoker, может тогда разберусь
Изображения
Тип файла: jpg CPU.jpg (123.8 Кб, 221 просмотров)
VirusN13

Последний раз редактировалось ArtGrek; 08.02.2011 в 07:08.
ArtGrek вне форума Ответить с цитированием
Старый 08.02.2011, 07:18   #8
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

из прочитаного я понял что неверно удаляю, пункт 7 в статье GunSmokera
но как с етим бороца чет не понял
Код:
  TLabel(TekstS).Destroy;
  TLabel(TekstS) := nil
и
Код:
  FreeAndNil(TLabel(TekstS));
не помогли

и еше, хочу уточнить ошибку
Tekst_x_1, Tekst_x_2, Tekst_x_3 :My Labels Name;
удаляя Tekst_x_2 и переименовывая Tekst_x_3 в Tekst_x_2, при обрашении к Tekst_x_2 идет запрос в память старои Tekst_x_2?
я верно понимаю свою ошибку?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 08.02.2011, 08:14   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
TLabel(TekstS).Destroy;
А проверку чему равно TekstS перед освобождением?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2011, 17:54   #10
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
if (Key=VK_DELETE) and (TLabel(TekstS) <> nil) then
есть, вроди
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access violation at address 00478D0E in module 'Project1.exe'. Write of address 00000000 fondreykus-1 Общие вопросы Delphi 5 27.01.2010 14:25
Access violation at address 00456215 in module Autorun.exe. alexandrov28 Свободное общение 4 30.09.2009 20:41
Access violation at address... Ralf_ru Помощь студентам 13 05.04.2009 04:20
Access violation at address.. RegentM Общие вопросы Delphi 4 01.11.2007 03:46
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. Fen1x Общие вопросы Delphi 8 13.10.2007 19:13


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя