Пятница, 22 Ноября 2024, 16:36

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Delphi:Вопрос-Ответ
karuyДата: Суббота, 04 Февраля 2012, 19:10 | Сообщение # 201
заслуженный участник
Сейчас нет на сайте
Quote (Spider_System)
Я нашел что-то про .res-файлы, но по-моему это не совсем то, что нужно.

Ошибаешься, как раз то.
Spider_SystemДата: Суббота, 04 Февраля 2012, 19:11 | Сообщение # 202
Злой прогер-пьяница
Сейчас нет на сайте
Quote (karuy)
Ошибаешься, как раз то.

а, отлично, просто подумал, что это что-то вроде архивов, которые таскать с прогой надо.
Ну значит покопаемся в этом деле.


Маньяк. Убийца. Социопат. Анархист.
Мой проект:
Spider System
Исходники Spider System
GameMixДата: Воскресенье, 05 Февраля 2012, 13:03 | Сообщение # 203
старожил
Сейчас нет на сайте
TimKruz, работа кода впечатляет. Много возможностей у Windows, но их пока изучишь...
LunarPixel, твой вариант выглядит просто и работает. Но, так же, не понятно, что за функция.

Спасибо вам за помощь! Буду разбираться smile .

Но вот появилась проблема касательно Application:

Что я такого там сделал, что появляется такая ошибка при обращении к формам?


Steel Standoff - 2D аркада.
Мои статьи


Сообщение отредактировал GameMix - Воскресенье, 05 Февраля 2012, 13:08
karuyДата: Воскресенье, 05 Февраля 2012, 13:21 | Сообщение # 204
заслуженный участник
Сейчас нет на сайте
GameMix, А на каком ивенте выполняется этот участок кода? - Правильно нинакаком. Либо так делай:
Code
procedure TForm1.FormCreate(Sender: TObject);
begin
   ShowMessage('ПРИВЕТ');
   Close;
end;;

Либо так:
Code
procedure aaa;
begin
   ShowMessage('ПРИВЕТ');
   Form1.Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  aaa;
end;

Хотя на онкриейт по идее форма не закроется.
GameMixДата: Воскресенье, 05 Февраля 2012, 13:44 | Сообщение # 205
старожил
Сейчас нет на сайте
karuy, спасибо, теперь ошибка не появляется. Ставил закрытие формы в события onActivate/onShow - форма закрывается не сразу.

Можно как-нибудь сделать, чтобы она закрывалась сразу, не успев отобразиться на панели задач?


Steel Standoff - 2D аркада.
Мои статьи


Сообщение отредактировал GameMix - Воскресенье, 05 Февраля 2012, 14:19
TimKruzДата: Воскресенье, 05 Февраля 2012, 16:26 | Сообщение # 206
старожил
Сейчас нет на сайте
Quote (GameMix)
TimKruz, работа кода впечатляет. Много возможностей у Windows, но их пока изучишь...

Литературу можно почитать... На Microsoft'ском сайте есть онлайн-справочник (официальный, с примерами на C++ и Delphi), правда, на английском... Есть похожие и на русском...
Quote (GameMix)
LunarPixel, твой вариант выглядит просто и работает. Но, так же, не понятно, что за функция.

Да всё просто. GetAsyncKeyState(код_клавиши) (константы можешь также глянуть в модуле Windows.pas со строчки 18157) возвращает 0, если кнопка не нажата... Вот тут можешь глянуть... или вот описание от Microsoft...

Quote (GameMix)
Что я такого там сделал, что появляется такая ошибка при обращении к формам?

Код вида «implementation begin blablabla end.» в модулях Delphi выполняется как инициализирующий модуль. Т.е. в нём можно, например, задавать значения переменным, создавать динамические переменные и т.п. Этот код выполняется сразу после подключения к основному коду или другому модулю. Так что в коде project1.dpr, куда подключается твой unit1.pas, этот код будет стоять выше создания и инициализации объектов TApplication и TForm1, следовательно, обращаться к ним нельзя.
Quote (GameMix)
karuy, спасибо, теперь ошибка не появляется. Ставил закрытие формы в события onActivate/onShow - форма закрывается не сразу.
Можно как-нибудь сделать, чтобы она закрывалась сразу, не успев отобразиться на панели задач?

Если тебе это окно вообще нафиг не надо, просто удали строчку «Application.CreateForm(TForm1, Form1)» из кода программы.
Если тебе нужно сразу закрыть программу, не инициируя формы, можешь заменить в твоём первом варианте кода "form1.close" на "halt(0)".
Но благоразумнее удалить форму совсем, если она тебе просто ненужна.
Например, ты хочешь просто вывести окошко с сообщением, можешь начать новый консольный проект, удалить из него всё и вставить следующее:
Code
uses dialogs; begin showmessage('Привет!'); end.




Сообщение отредактировал TimKruz - Воскресенье, 05 Февраля 2012, 16:42
berzegovДата: Воскресенье, 04 Марта 2012, 14:00 | Сообщение # 207
участник
Сейчас нет на сайте
Подскажите пожалуйста тип данных, чтобы совмещал integer и string.

LunarPixelДата: Воскресенье, 04 Марта 2012, 14:14 | Сообщение # 208
старожил
Сейчас нет на сайте
berzegov, в каком смысле совмещал!?
переводи из стринга в интеджер и обратно.
intotostr(int) и strtoint(str)


berzegovДата: Воскресенье, 04 Марта 2012, 16:39 | Сообщение # 209
участник
Сейчас нет на сайте
Quote (LunarPixel)
в каком смысле совмещал!?


Например в Edit вводится слово с цифрами и мне надо записать их в одну переменную.


sk0rpi0nДата: Воскресенье, 04 Марта 2012, 17:41 | Сообщение # 210
Tiberium
Сейчас нет на сайте
Quote
Например в Edit вводится слово с цифрами и мне надо записать их в одну переменную.

Гм, ну запиши в строку, а если тебе нужны числа, то не быдлокодь, и убери записывание символов(кроме цифр) из Edit.




Adventures of the Purple Ball - готов.
Wanderer - готов.
tracer07Дата: Воскресенье, 04 Марта 2012, 18:01 | Сообщение # 211
постоянный участник
Сейчас нет на сайте
berzegov,
var s:string;
begin
s:=edit1.text;
end;

в переменную запишутся все символы включая числа и прочие знаки. Никакой другой тип данных для этого не нужен
TimKruzДата: Воскресенье, 04 Марта 2012, 18:20 | Сообщение # 212
старожил
Сейчас нет на сайте
berzegov, можешь разделить буквы от цифр, пройдясь по строке, например (исправленный код):
Code
var str,buf:string; x:longword; i,n:byte;
begin
    str:=edit1.text;
    n:=length(str);
    i:=1;
    while i<=n do
    begin
      if str[i] in ['0'..'9'] then
      begin
        buf:=buf+str[i];
        delete(str,i,1);
        dec(n);
      end
      else inc(i);
    end;
    x:=strtoint(buf);
end;

Этот код поместит в X (целое положительное 32-битное число) число, "зашифрованное" в строке str, переданной из поля Edit1, а в строке str останется строка без цифр.
Например, строка "абвгд342клмн09-57ы" будет разбита на число 3420957 и строку "абвгдклмн-ы". Но, можно разбивать иначе, скажем, выделяя отдельные числа, разделённые буквами, или выделять дробные и отрицательные числа.
Стандартных средств для этих целей в Delphi нет.




Сообщение отредактировал TimKruz - Воскресенье, 04 Марта 2012, 20:13
berzegovДата: Воскресенье, 04 Марта 2012, 18:45 | Сообщение # 213
участник
Сейчас нет на сайте
Quote (sk0rpi0n)
Гм, ну запиши в строку, а если тебе нужны числа, то не быдлокодь, и убери записывание символов(кроме цифр) из Edit.

Спасибо
Quote (sk0rpi0n)
в переменную запишутся все символы включая числа и прочие знаки. Никакой другой тип данных для этого не нужен

Спасибо, но ты меня чуть не понял

Quote (TimKruz)
Этот код поместит в X (целое положительное 32-битное число) число, "зашифрованное" в строке str, переданной из поля Edit1, а в строке str останется строка без цифр.
Например, строка "абвгд342клмн09-57ы" будет разбита на число 3420957 и строку "абвгдклмн-ы". Но, можно разбивать иначе, скажем, выделяя отдельные числа, разделённые буквами, или выделять дробные и отрицательные числа.
Стандартных средств для этих целей в Delphi нет.

Спасибо, это тоже подойдет.


TimKruzДата: Воскресенье, 04 Марта 2012, 20:10 | Сообщение # 214
старожил
Сейчас нет на сайте
Quote (berzegov)
Спасибо, это тоже подойдет.

berzegov, я там ошибся немного (с циклом и множеством цифр), вот исправил, теперь работает правильно:
Code
var str,buf:string; x:longword; i,n:byte;
begin
   str:=edit1.text;
   n:=length(str);
   i:=1; //счётчик
   while i<=n do //FOR не подойдёт, т.к. длина строки меняться будет
     if str[i] in ['0'..'9'] then
     begin
       buf:=buf+str[i];
       delete(str,i,1);
       dec(n); //уменьшаем длину строки, а счётчик не трогаем
     end
     else inc(i); //если не цифра, то просто увеличим счётчик
   x:=strtoint(buf);
end;




Сообщение отредактировал TimKruz - Воскресенье, 04 Марта 2012, 20:15
Ivas1256Дата: Пятница, 06 Апреля 2012, 14:54 | Сообщение # 215
был не раз
Сейчас нет на сайте
я пишу 2D игру, нужно ль на форму кидать какие-либо объекты и если да то какие

Сообщение отредактировал Ivas1256 - Пятница, 06 Апреля 2012, 15:06
TimKruzДата: Пятница, 06 Апреля 2012, 16:04 | Сообщение # 216
старожил
Сейчас нет на сайте
Ivas1256, всё зависит от того, как (с помощью чего) ты её пишешь. Ты можешь использовать стандартные компоненты (например, кнопки, надписи), а можешь рисовать прямо на канву формы. С использованием DirectX или OpenGL тебе ничего не потребуется (кроме соответствующих модулей; хотя по-прежнему можешь добавлять стандартные компоненты). Как использовать - ищи в поисковиках уроки, лучше книги-самоучители.
Есть инкапсулированные в компоненты движки (например, DelphiX, но он давно закрыт и не развивается), для использования которых нужно "кинуть на форму" соответствующий компонент, обычно не визуальный; но игровые движки не идут в комплекте с Delphi, их нужно скачивать и устанавливать отдельно.

Короче, ищи уроки/книги про программирование игр (или, например, использование OpenGL) на Delphi.




Сообщение отредактировал TimKruz - Пятница, 06 Апреля 2012, 16:07
sk0rpi0nДата: Пятница, 06 Апреля 2012, 17:07 | Сообщение # 217
Tiberium
Сейчас нет на сайте
Quote
я пишу 2D игру, нужно ль на форму кидать какие-либо объекты и если да то какие

Немного не по теме, но можешь попробовать движки ZenGL и GLScene.




Adventures of the Purple Ball - готов.
Wanderer - готов.
Ivas1256Дата: Суббота, 07 Апреля 2012, 09:30 | Сообщение # 218
был не раз
Сейчас нет на сайте
TimKruz, а вот если мне надо чтоб при нажатии мышкой выполнялось какое-нибудь событие, это через DirectX, через движок или это средствами delphi делается?
sk0rpi0nДата: Суббота, 07 Апреля 2012, 10:11 | Сообщение # 219
Tiberium
Сейчас нет на сайте
Quote
а вот если мне надо чтоб при нажатии мышкой выполнялось какое-нибудь событие, это через DirectX, через движок или это средствами delphi делается?

Через Delphi




Adventures of the Purple Ball - готов.
Wanderer - готов.
Ivas1256Дата: Суббота, 07 Апреля 2012, 18:34 | Сообщение # 220
был не раз
Сейчас нет на сайте
Спасибо, буду разбираться biggrin
Поиск:

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