Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.04.2013, 17:06
Nostradamus051 Nostradamus051 вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Проблема с переполнением стека

Добрый день!

Программа компилируется, работает нормально, но при закрытии выдает ошибку EAccessViolation (скрин во вложении).
Дописал при закрытии try-except, получил stackoverflow.
Сразу оговорюсь, программирую на уровне универа, так что не особо сильно во всем этом соображаю.
Помогите плз с решением проблемы.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Edit1: TEdit;
    Timer1: TTimer;
    Label1: TLabel;
    Image1: TImage;
    procedure MemClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
txt:array[1..17] of string;
mem:array[1..5,1..5] of tmemo;
f:system.text;
color1,color2,fontcolor1,fontcolor2:tcolor;
i,j,n,k,razmer_shrifta,taimer:integer;
s,s1,s2,shrift,stil_shrifta,path,imya_risunka:string;
  Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.MemClick(Sender: TObject);
begin
TMemo(Sender).visible:=false;
end;

procedure TForm1.N1Click(Sender: TObject);
begin
Form1.FormCreate(sender);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
path:=extractfilepath(application.ExeName)+'Config.txt';
assignfile(f,path);
reset(f);
readln(f,s);
label1.Caption:='Âîïðîñ: '+s;
readln(f,s);
n:=strtoint(s);
readln(f,s);
case strtoint(s) of
1: color1:=clwhite;
2: color1:=clred;
3: color1:=clyellow;
4: color1:=clgreen;
5: color1:=clskyblue;
6: color1:=clpurple;
7: color1:=clblack;
end;
if strtoint(s) in [1,3,5] then fontcolor1:=clwindowtext else fontcolor1:=clwindow;
readln(f,s);
case strtoint(s) of
1: color2:=clwhite;
2: color2:=clred;
3: color2:=clyellow;
4: color2:=clgreen;
5: color2:=clskyblue;
6: color2:=clpurple;
7: color2:=clblack;
end;
if strtoint(s) in [1,3,5] then fontcolor2:=clwindowtext else fontcolor2:=clwindow;
readln(f,shrift);
readln(f,s);
razmer_shrifta:=strtoint(s);
readln(f,stil_shrifta);
readln(f,s);
taimer:=strtoint(s);
readln(f,imya_risunka);
imya_risunka:=extractfilepath(application.ExeName)+imya_risunka;
for i:=1 to 16 do begin
  readln(f,txt[i]);
  repeat
    if pos('#13',txt[i])>0 then begin
      j:=pos('#13',txt[i]);
      delete(txt[i],j,3);
      s1:=copy(txt[i],1,j-1);
      s2:=copy(txt[i],j,length(txt[i])-j+1);
      txt[i]:=s1+#13+s2;
      end;
    until pos('#13',txt[i])=0;
  end;
closefile(f);
image1.Picture.LoadFromFile(imya_risunka);
image1.Width:=form1.ClientWidth;
image1.Height:=form1.ClientHeight-image1.Top;
k:=1;
For i:=1 to n do
  for j:=1 to 4 do begin
  mem[i,j]:=tmemo.Create(self);
  mem[i,j].Create(self).OnClick:=MemClick;
  mem[i,j].parent:=self;
  mem[i,j].left:=trunc((j-1)*image1.Width/4);
  mem[i,j].width:=trunc(image1.Width/4);
  mem[i,j].Top:=trunc(image1.Top+(i-1)*image1.Height/n);
  mem[i,j].Height:=trunc(image1.Height/n);
  if ((i in [1,3]) and (j in [1,3])) or
  ((i in [2,4]) and (j in [2,4])) then begin
    mem[i,j].Color:=color1;
    mem[i,j].Font.Color:=fontcolor1;
    end else begin
    mem[i,j].Color:=color2;
    mem[i,j].Font.Color:=fontcolor2;
    end;
  mem[i,j].Font.Name:=shrift;
  mem[i,j].Font.Size:=razmer_shrifta;
  if stil_shrifta='Îáû÷íûé' then mem[i,j].Font.Style:=[] else
  if stil_shrifta='Ïîëóæèðíûé' then mem[i,j].Font.Style:=[fsBold] else
  if stil_shrifta='Íàêëîííûé' then mem[i,j].Font.Style:=[fsItalic] else mem[i,j].Font.Style:=[fsBold,fsItalic];
  mem[i,j].text:=txt[k];
  k:=k+1;
  mem[i,j].cursor:=crArrow;
  mem[i,j].ReadOnly:=true;
  end;
PostMessage(Form1.Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
end;

procedure TForm1.N2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
label1.Width:=form1.ClientWidth-label1.Left*2;
image1.Width:=form1.ClientWidth;
image1.Height:=form1.ClientHeight-image1.Top;
For i:=1 to n do
  for j:=1 to 4 do begin
  mem[i,j].left:=trunc((j-1)*image1.Width/4);
  mem[i,j].width:=trunc(image1.Width/4);
  mem[i,j].Top:=trunc(image1.Top+(i-1)*image1.Height/n);
  mem[i,j].Height:=trunc(image1.Height/n);
  end;
end;

end.
Изображения
Тип файла: jpg Снимок.JPG (21.2 Кбайт, 8 просмотров)
Ответить с цитированием
  #2  
Старый 26.04.2013, 17:50
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Замените 112 строку на
Код:
mem[i,j].OnClick:=MemClick;
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Nostradamus051 (26.04.2013)
  #3  
Старый 26.04.2013, 17:56
Nostradamus051 Nostradamus051 вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Замените 112 строку на
Код:
mem[i,j].OnClick:=MemClick;
Спасибо! Помогло!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter