Суббота, 23 Ноября 2024, 10:18

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Delphi:Вопрос-Ответ
noTformaTДата: Пятница, 08 Июля 2011, 13:23 | Сообщение # 61
Ukrainian independent game developer
Сейчас нет на сайте
аТнОтХоАн, ммм про чар или справку по шифрованию? Первое - это массив указателей, вроде бы винчензо работает с делфи, про второе - в инете smile

@noTformaT
berzegovДата: Пятница, 08 Июля 2011, 18:40 | Сообщение # 62
участник
Сейчас нет на сайте
Всем привет.

При компиляций игры появляется ошибка "Out of memory" но у меня достаточно памяти.

Как исправить?


noTformaTДата: Пятница, 08 Июля 2011, 18:45 | Сообщение # 63
Ukrainian independent game developer
Сейчас нет на сайте
Quote (berzegov)
При компиляций игры появляется ошибка "Out of memory" но у меня достаточно памяти.

Как исправить?

разве? Скрин сделай виртуальной памяти smile
Увеличь файл подкачки smile


@noTformaT
karuyДата: Пятница, 08 Июля 2011, 19:19 | Сообщение # 64
заслуженный участник
Сейчас нет на сайте
berzegov, немножко поконкретнее, код приведи, а то ответить могу только так же абстрактно как и ты спросил.
TimKruzДата: Пятница, 08 Июля 2011, 19:38 | Сообщение # 65
старожил
Сейчас нет на сайте
berzegov, возможно, ты задаёшь в var какие-нибудь гигантские переменные или кучу объектов. Фишка в том, что память для обычных переменных резервируется сразу. Ну например, ты в модуле после var задаёшь много переменных - они все сразу блокируют необходимую для их существования память. А переменные из процедур и функций существуют только пока работает эта процедура.
Вообще, каждой программе система отводит некоторое количество памяти... Его нельзя превышать...
Компилятор проверяет, возможно ли создать все эти переменные... Кажется, так... Или ошибка вылетает при запуске exe? (сразу после компиляции)
Вообще, код модуля покажи. Посмотрим конкретно, что там.

аТнОтХоАн, попробуй TStringList, там можно вводить сколько хочешь строк по 255 символов в одно место. Потом считываешь по одной строке.
Кстати, если буква - 5 цифр, то как раз в строку умещается 51 символ. yes
Quote (аТнОтХоАн)
свой метод: одна буква - 5 цифр.

eek respect Удачи! Она тебе пригодится, чтобы не заблудится в своём же коде и не умереть с голоду. yes

Quote (GECK)

for i:=1 to 300 do
s:=s+inttostr(i);

Такой фокус проходит, но обратиться к s[300] ты не сможешь. Потому что дальше 256 символа пути больше нет. smile Есть только тропинки. И, используя такой способ, можно потерять все эти символы.
А вообще в string можно засунуть очень много символов. surprised Но извлекать их можно только из ячеек 1..255, смещая остальные к "голове" строки.




Сообщение отредактировал TimKruz - Пятница, 08 Июля 2011, 19:46
berzegovДата: Пятница, 08 Июля 2011, 19:45 | Сообщение # 66
участник
Сейчас нет на сайте
Quote
Думаю, у тебя эта ошибка не при компиляции, а запуске программы (F9 нажимаешь?).

Да и при компиляции
Вот код


TimKruzДата: Пятница, 08 Июля 2011, 19:49 | Сообщение # 67
старожил
Сейчас нет на сайте
Ага, вот оно что. Что делает процедура memory? Я думаю, пытается получить больше памяти, т.е. расширяет отпущенные системой пределы памяти. wacko
Попробуй закомментировать вот так:
Code

procedure TForm1.FormCreate(Sender: TObject);
begin
//memory;
PosX:=250;
PosY:=250;
VelX:=2;
VelY:=2;
end;

И скомпилируй. Ошибки должно не быть.
А ещё попробуй запустить exe (если он есть) из Windows. Компилятор ограничивает.


berzegovДата: Пятница, 08 Июля 2011, 19:54 | Сообщение # 68
участник
Сейчас нет на сайте
Quote
Ага, вот оно что. Что делает процедура memory? Я думаю, пытается получить больше памяти, т.е. расширяет отпущенные системой пределы памяти.


Процедура Memory освобождает память.

Я ставил Memory после ошибки, думая уменьшить кол-во потребляемой памяти


karuyДата: Пятница, 08 Июля 2011, 20:49 | Сообщение # 69
заслуженный участник
Сейчас нет на сайте
Хз, собрал твой код, работает у меня твой пинг-понг, криво но работает, процедура мемори лишняя, поскольку у меня ерроров нет, могу только посоветовать трасировать прогу и написать где именно вылетает, будем думать, счас ничего сказать конкретного не льзя.
berzegovДата: Пятница, 08 Июля 2011, 21:17 | Сообщение # 70
участник
Сейчас нет на сайте
Quote
трасировать прогу и написать где именно вылетает


А по подробнее?

Добавлено (08.07.2011, 21:17)
---------------------------------------------

Quote
собрал твой код, работает у меня твой пинг-понг


Понравилось???


karuyДата: Пятница, 08 Июля 2011, 22:19 | Сообщение # 71
заслуженный участник
Сейчас нет на сайте
Quote (berzegov)
А по подробнее?

Трасировка - выполнения програмы шаг за шагом, предназначена как раз для случая когда програма у тебя неправильно работает и нужно понять где спрятался жук. В делфи: Ф8 (без захода в процедуру), Ф7 (из заходом). Короче посмотриш по шагам где програма вылетет и напишы сюда, будем разбираться.
Quote (berzegov)
Понравилось???

Ну как сказать... =) Для прокачки скила програмера самое - то, ну как сцену все - таки ковырял? =)
berzegovДата: Суббота, 09 Июля 2011, 11:02 | Сообщение # 72
участник
Сейчас нет на сайте
Quote
Трасировка - выполнения програмы шаг за шагом, предназначена как раз для случая когда програма у тебя неправильно работает и нужно понять где спрятался жук.


F8 и F7 ничего не показывают.

Добавлено (09.07.2011, 11:02)
---------------------------------------------

Quote
Хз, собрал твой код, работает у меня твой пинг-понг


Если можешь дай ссылку и я скачаю.


karuyДата: Суббота, 09 Июля 2011, 11:48 | Сообщение # 73
заслуженный участник
Сейчас нет на сайте
Не может такого быть, если конечно ты не жмеш ф8 и ф7 во время выполнения програмы =)

Лучше скинь свой исходник.


Сообщение отредактировал karuy - Суббота, 09 Июля 2011, 11:50
berzegovДата: Суббота, 09 Июля 2011, 12:52 | Сообщение # 74
участник
Сейчас нет на сайте
Исходник

У меня прога не запускается.


karuyДата: Суббота, 09 Июля 2011, 13:16 | Сообщение # 75
заслуженный участник
Сейчас нет на сайте
Прикрепи еще файл формы и на будущее: лей только *.dpr, *.pas, *.dfm остальное мусор.
TimKruzДата: Суббота, 09 Июля 2011, 16:59 | Сообщение # 76
старожил
Сейчас нет на сайте
berzegov, нажимай F7 или F8 постоянно (можно нажать и не отпускать), т.е. одно нажатие - выполнение одной строчки кода. Программа выполняется как обычно, но надо всё время нажимать кнопку. Преимущество в том, что сразу видно, при выполнении какого участка кода возникла ошибка...
Сейчас посмотрю твою программу, может пойму, что там не так. yes
...
Э... А где файл модуля? biggrin Залей ВСЕ используемые файлы.
Из поста № 66 взял текст модуля... Но всё равно не удалось восстановить проект. Пишет, что нужно инициализировать H и что нельзя создать exe.

karuy, как у тебя получилось сделать такой же проект? surprised

Да, кстати, у меня exe-файл, что в архиве был, сразу выдаёт "Исключение неизвестное программное исключение" и адрес ошибки; потом пустое окошко ошибки и закрывается. Что-то ты там перемудрил. biggrin

P.S. У тебя там 4 TImage и 2 TTimer. surprised Нужно учиться всё выводить на один image и использовать один таймер. Это легко. Но ещё лучше вообще без этих вещей обойтись.


berzegovДата: Вторник, 30 Августа 2011, 20:32 | Сообщение # 77
участник
Сейчас нет на сайте
Quote
P.S. У тебя там 4 TImage и 2 TTimer. surprised Нужно учиться всё выводить на один image и использовать один таймер. Это легко. Но ещё лучше вообще без этих вещей обойтись.


Можно и через Shape. На счет таймера подумаю

Quote
Да, кстати, у меня exe-файл, что в архиве был, сразу выдаёт "Исключение неизвестное программное исключение" и адрес ошибки; потом пустое окошко ошибки и закрывается. Что-то ты там перемудрил


У меня тоже

Добавлено (30.08.2011, 20:32)
---------------------------------------------
Всем привет.А как сделать чтобы в Edit вводились только цифры?


LunarPixelДата: Вторник, 30 Августа 2011, 20:42 | Сообщение # 78
старожил
Сейчас нет на сайте
berzegov, ну как то так:

if not(key in['0'..'9',#8]) then key:=#0;

В процедуру KeyPress для Edit

#8 - это клавиша backspace, если не ошибаюсь. Если ошибаюсь, то измени на нужное. smile




Сообщение отредактировал LunarPixel - Вторник, 30 Августа 2011, 20:43
AngevengelistДата: Вторник, 30 Августа 2011, 20:45 | Сообщение # 79
постоянный участник
Сейчас нет на сайте
Не знаю какую версию юзаешь, в FormShow своей формы напиши

Code
var oldlong: integer;
begin
  oldlong := GetWindowLongA(edit1.Handle, GWL_STYLE);
  SetWindowLongA(edit1.Handle, GWL_STYLE, oldlong or ES_NUMBER);
end;

berzegovДата: Вторник, 30 Августа 2011, 23:31 | Сообщение # 80
участник
Сейчас нет на сайте
Delphi 7.Завтра проверю код

Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг