berzegov, возможно, ты задаёшь в var какие-нибудь гигантские переменные или кучу объектов. Фишка в том, что память для обычных переменных резервируется сразу. Ну например, ты в модуле после var задаёшь много переменных - они все сразу блокируют необходимую для их существования память. А переменные из процедур и функций существуют только пока работает эта процедура. Вообще, каждой программе система отводит некоторое количество памяти... Его нельзя превышать... Компилятор проверяет, возможно ли создать все эти переменные... Кажется, так... Или ошибка вылетает при запуске exe? (сразу после компиляции) Вообще, код модуля покажи. Посмотрим конкретно, что там.
аТнОтХоАн, попробуй TStringList, там можно вводить сколько хочешь строк по 255 символов в одно место. Потом считываешь по одной строке. Кстати, если буква - 5 цифр, то как раз в строку умещается 51 символ.
Quote (аТнОтХоАн)
свой метод: одна буква - 5 цифр.
Удачи! Она тебе пригодится, чтобы не заблудится в своём же коде и не умереть с голоду.
Quote (GECK)
for i:=1 to 300 do s:=s+inttostr(i);
Такой фокус проходит, но обратиться к s[300] ты не сможешь. Потому что дальше 256 символа пути больше нет. Есть только тропинки. И, используя такой способ, можно потерять все эти символы. А вообще в string можно засунуть очень много символов. Но извлекать их можно только из ячеек 1..255, смещая остальные к "голове" строки.
Сообщение отредактировал TimKruz - Пятница, 08 Июля 2011, 19:46
private procedure shar(); procedure memory(); { Private declarations } public { Public declarations } end;
var Form1: TForm1;
PosX,PosY,VelX,VelY:Single; implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin memory; PosX:=250; PosY:=250; VelX:=2; VelY:=2; end;
procedure TForm1.shar; begin PosX:=PosX+VelX; PosY:=PosY+VelY; Image4.Left:=Round(PosX); Image4.Top:=Round(PosY); if PosX> ClientWidth-50 then VelX:=-VelX; if PosX<0 then VelX:=-VelX+random(2); if PosY> ClientHeight-58 then VelY:=-VelY; if PosY<0 then VelY:=-VelY+random(2); end;
procedure TForm1.Timer1Timer(Sender: TObject); var Overlay:Trect; begin shar; if IntersectRect(Overlay,Image4.BoundsRect,Image2.BoundsRect) then begin VelX:=-VeLx+Random(3); VelY:=-VelY+Random(3); end;
if IntersectRect(Overlay,Image4.BoundsRect,Image3.BoundsRect) then begin VelX:=-VeLx-Random(3); VelY:=-VelY-Random(3); end; end;
procedure TForm1.Timer2Timer(Sender: TObject); begin if Image2.Top>ClientHeight-Image2.Height-40 then Image2.top:=Image2.Top else begin if Image4.Top>Image2.Top then Image2.Top:=Image4.Top+Image2.Width; end; if Image4.Top<Image2.Top then Image2.Top:=Image4.top-Image4.Width; end;
procedure TForm1.memory; var H:THandle; begin if Win32Platform=ver_platform_win32_nt then H:=OpenProcess(PROCESS_ALL_ACCESS,False,GetCurrentProcessId); SetProcessWorkingSetSize(H,Dword(-1),DWORD(-1)); CloseHandle(H); end;
Ага, вот оно что. Что делает процедура memory? Я думаю, пытается получить больше памяти, т.е. расширяет отпущенные системой пределы памяти. Попробуй закомментировать вот так:
Code
procedure TForm1.FormCreate(Sender: TObject); begin //memory; PosX:=250; PosY:=250; VelX:=2; VelY:=2; end;
И скомпилируй. Ошибки должно не быть. А ещё попробуй запустить exe (если он есть) из Windows. Компилятор ограничивает.
Хз, собрал твой код, работает у меня твой пинг-понг, криво но работает, процедура мемори лишняя, поскольку у меня ерроров нет, могу только посоветовать трасировать прогу и написать где именно вылетает, будем думать, счас ничего сказать конкретного не льзя.
Трасировка - выполнения програмы шаг за шагом, предназначена как раз для случая когда програма у тебя неправильно работает и нужно понять где спрятался жук. В делфи: Ф8 (без захода в процедуру), Ф7 (из заходом). Короче посмотриш по шагам где програма вылетет и напишы сюда, будем разбираться.
Quote (berzegov)
Понравилось???
Ну как сказать... =) Для прокачки скила програмера самое - то, ну как сцену все - таки ковырял? =)
Трасировка - выполнения програмы шаг за шагом, предназначена как раз для случая когда програма у тебя неправильно работает и нужно понять где спрятался жук.
berzegov, нажимай F7 или F8 постоянно (можно нажать и не отпускать), т.е. одно нажатие - выполнение одной строчки кода. Программа выполняется как обычно, но надо всё время нажимать кнопку. Преимущество в том, что сразу видно, при выполнении какого участка кода возникла ошибка... Сейчас посмотрю твою программу, может пойму, что там не так. ... Э... А где файл модуля? Залей ВСЕ используемые файлы. Из поста № 66 взял текст модуля... Но всё равно не удалось восстановить проект. Пишет, что нужно инициализировать H и что нельзя создать exe.
karuy, как у тебя получилось сделать такой же проект?
Да, кстати, у меня exe-файл, что в архиве был, сразу выдаёт "Исключение неизвестное программное исключение" и адрес ошибки; потом пустое окошко ошибки и закрывается. Что-то ты там перемудрил.
P.S. У тебя там 4 TImage и 2 TTimer. Нужно учиться всё выводить на один image и использовать один таймер. Это легко. Но ещё лучше вообще без этих вещей обойтись.
P.S. У тебя там 4 TImage и 2 TTimer. surprised Нужно учиться всё выводить на один image и использовать один таймер. Это легко. Но ещё лучше вообще без этих вещей обойтись.
Можно и через Shape. На счет таймера подумаю
Quote
Да, кстати, у меня exe-файл, что в архиве был, сразу выдаёт "Исключение неизвестное программное исключение" и адрес ошибки; потом пустое окошко ошибки и закрывается. Что-то ты там перемудрил
У меня тоже
Добавлено (30.08.2011, 20:32) --------------------------------------------- Всем привет.А как сделать чтобы в Edit вводились только цифры?