Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

Открыть новую тему     Написать ответ в эту тему

data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаем новые возможности и баги
Просьба писать только про Delphi 2009 и выше - по остальным версиям есть соответствующая тема.
Вопросы вареза здесь не обсуждаются !!!
См. также:
Известные важные баги Delphi 2010:

Описание________________________________________________ Исправлено Решение/Альтернатива_____________________
  1. Внимание !  Деинсталляция D2010 нарушает работу D2007 и D2009 !  
При деинсталляции удаляются CC3280MT.DLL и CC3290MT.DLL из Windows\System32,   необходимые для работы D2007 и D2009 соответственно.
Сделайте резервные копии
  2. Code Formatter не работает, если не инсталлирован пакет моделирования.   В нем также присутствует множество багов. Используйте с осторожностью.   1.   JEDI CodeFormat 2.44 SVN Snapshot (~750Kb)   Требуются JCL и JVCL  
2.GExperts with Formatter
  3. Не работает F1 в Object Inspector Update 2   IDEFixPack 2.9 от Andreas Hausladen
(dev. snapshots)
  4. Если IDE начинает падать с сообщением "Out of resources", возможно, что поврежден .res файл проекта. Удалить его, запустить IDE, открыть проект - новый .res файл будет создан автоматически.
  5. В редакторе не работает Class Completion, если в декларируемом классе есть поля с шаблонами. Перед декларированием поля добавить public или private и т.д.
  6. TTrayIcon.ShowBalloonHint() не работает на ОС ниже Vista [QC 77561] Update 2 * Установить Update 2   * ИЛИ почитать о причинах и решении проблемы на форуме embarcadero и в QC   * ИЛИ воспользоваться альтернативой, например Cooltray 4.4.0
  ...      


Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 14:28 26-08-2009 | Исправлено: data man, 18:27 06-08-2010
0D0A

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TechnoDreamer
Если "пределы" это парент модальной формы, то обрабатывай его WM_SETCURSOR. Иначе через хук.

Всего записей: 158 | Зарегистр. 21-09-2009 | Отправлено: 14:44 27-12-2010 | Исправлено: 0D0A, 14:56 27-12-2010
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins

Цитата:
По той статье книга написана, а к книге компакт диск с примерами прилагается. Я бы вам рекомендовал все же взглянуть на них.  
Что касается вашего кода, то стоит выделить код, вырезающий подстроку от текущей позиции до следующего пробела, в отдельную функцию.

Я прочел (не все, про TCP только), после этого решил перейти на IRC.
Как время будет прочту все Пока IRC для меня наилучшее решение, т.к. с клиентом я относительно долго работал, а в сервере ничего сложного нет, да и стабильно вроде пока работает.
 
Кинул в отдельную функцию, только что это меняет? Сам способ корявый.
Проще тогда отправлять каждый параметр в отдельной строке, и копировать с 15 символа до конца строки, но это тоже коряво да и сообщение увеличится в 3 раза.
 
П.с.
Еще одна не очень приятная вещь, при получении параметров по куску кода который я выкладывал выше (копирование из строки значений), параметры задаются сразу, как и должно быть, но если сразу после "задания" параметров - загружать текстуру (исходя из принятых данных), то игра виснет XD Но если подождать перед загрузкой 10 мс. то все отлично работает.

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 17:23 27-12-2010 | Исправлено: ZBEP, 18:16 27-12-2010
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZBEP
Цитата:
Кинул в отдельную функцию, только что это меняет? Сам способ корявый.
Проще тогда отправлять каждый параметр в отдельной строке, и копировать с 15 символа до конца строки, но это тоже коряво да и сообщение увеличится в 3 раза.  
Можно передавать числа в бинарном виде, правда не с помощью IRC.
По поводу задержек - хз, приведенная вами часть кода такого эффекта давать не должна.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 19:47 27-12-2010 | Исправлено: Frodo_Torbins, 19:48 27-12-2010
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins, а что мешает через IRC в бинарном виде передавать? И зачем?
Ну это пока не особо важно, а вот что с загрузками текстур не пойму, к примеру если перед загрузкой текстуры ожидаю 10 мс иногда виснет (хз отчего зависит, бывает на 3 загрузке, бывает на 1).
А если кидаю на таймер с интервалом в 10 и включаю его как получу нужные значения и после загрузки текстур - отключаю, то все стабильно и без зависаний, как и должно быть.
Как то странно..
 
П.с.
С таймеров вообще не виснет вне зависимости от интервала.
 
Вот еще без таймера если, то выдало такое вот:
   
Но с какого перепугу???
Все заданно, все нужные переменные получены, место для текстуры создано..
 
хз инди ли в этом виновата или делфи..
 
Вот например код по нажатию на мемо - грузить тексуру:

Код:
procedure TForm1.Memo1Click(Sender: TObject);
begin
DXLoadTextureFromFile('Data/Karts/1.png',Bus,0);
end;

Грузит все удачно без проблем.
 
А вот пример загрузки текстуры, если от idIRCServer пришла команда "DellKart"

Код:
procedure TForm1.IdIRC1DellKart(ASender: TIdCommand);
begin
DXLoadTextureFromFile('Data/Karts/1.png',Bus,0);
end;

Зависает почти всегда. Даже если sleep ставить и т.д. перед загрузкой.

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 21:48 27-12-2010 | Исправлено: ZBEP, 00:14 28-12-2010
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZBEP
Похоже что то не то с синхронизацией потоков. Внимательно проследите в каком потоке какая часть вашего кода выполняется.
Цитата:
а что мешает через IRC в бинарном виде передавать? И зачем?
IRC - это стандартизированный протокол, и компоненты могут без вашего ведома вырезать из сообщений символы к примеру с кодами ниже 32. А полезен бинарный режим потому, что для чисел от 0 до 255 вы можете передавать по одному байту, при этом вообще не парясь с парсингом строк.
Что то мне подсказывает, что в инди должна быть возможность совместить кастомный бинарный протокол с IRC в одном потоке. По крайней мере компрессию они как то делают.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 23:34 27-12-2010 | Исправлено: Frodo_Torbins, 23:35 27-12-2010
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins, спс, понятно, не знал.
А насчет этого:

Цитата:
Вот например код по нажатию на мемо - грузить тексуру:

Код:
procedure TForm1.Memo1Click(Sender: TObject);
begin
DXLoadTextureFromFile('Data/Karts/1.png',Bus,0);
end;

Грузит все удачно без проблем.
 
А вот пример загрузки текстуры, если от idIRCServer пришла команда "DellKart"

Код:
procedure TForm1.IdIRC1DellKart(ASender: TIdCommand);
begin
DXLoadTextureFromFile('Data/Karts/1.png',Bus,0);
end;

Зависает почти всегда. Даже если sleep ставить и т.д. перед загрузкой.

Идеи есть?

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 00:20 28-12-2010
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZBEP
Вполне возможно IdIRC1DellKart вызывается в отдельном потоке, в новых версиях иде это должно быть видно. Попробуйте вызывать DXLoadTextureFromFile('Data/Karts/1.png',Bus,0); в ответ на кастомное сообщение, к примеру WM_User+1. А из IdIRC1DellKart соответственно отправлять это сообщение самому себе.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 00:43 28-12-2010
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins, вроде нашел в чем проблема, но не совсем разобрался, позже напишу подробнее, в чем дело было.
(В функции загрузки изображения)
 
п.с.
Блин, чет не выходит ничего, как бы не выводил - все равно иногда виснет, хоть и реже..
Завтра буду пробовать обойти это..
 
Можно вообще сделать по другому, но это дольше и больше нагрузки.
Заносить все в логи, а потом по таймеру, построчно искать в логах нужную строку, затем в этой строке побуквенно искать нужные значения..
Но хотелось бы без этого обойтись, т.к. если бы не зависания, то было бы очень удобно, сразу принимать нужные команды без лишних манипуляций с логами.
 
Если у кого-нибудь есть желание, то могу залить простейший пример клиент-сервера с выводом изображения через DX по принятию команды от сервера, может это я криворукий.
 
Frodo_Torbins,
Цитата:
Попробуйте вызывать DXLoadTextureFromFile('Data/Karts/1.png',Bus,0); в ответ на кастомное сообщение

При принятии любых сообщений idIRC -ом текстуры загружаются через раз и когда не загружаются, прога намертво виснет и иногда жалуется на память.
 
Если создать отдельную процедуру загрузки текстуры и вызвать ее в IdIRC1DellKart, с ожиданиями или сразу, то все равно текстуры иногда не загружаются и прога намертво виснет.
 
П.п.с.
Не знаю как у Вас у всех, но у меня при использовании INDY постоянные проблемы XD
Правда все что были ранее успешно решены, а с этим я хз что делать..  
Скорее надо LoadTextureFromFile ковырять чем INDY, но DXLoadTextureFromFile я уже ковырял и это мало чем помогло
 
А если сделать так:

Код:
procedure TForm1.IdIRC1DellKart(ASender: TIdCommand);  
begin
IdIRC1.CommandHandlers.Items[1].Enabled:=false; //Это команда DellKart, типа обрабатывать ее или нет.
DXLoadTextureFromFile('Data/Karts/1.png',Bus,0);
IdIRC1.CommandHandlers.Items[1].Enabled:=true;
end;

То иногда начинаются жуткие артефакты (видео) в программе и немного поменьше вне ее и после закрытия проги не исчезают.
(Начинает экран зерниться).
С чем это связано я хз, INDY явно против DX  
 
Отключил в ннди ParseParams и сделал паузу перед загрузкой текстуры в 10мс, немного помогло, зависает реже, но зависает.

Код:
IdIRC1.CommandHandlers.Items[1].ParseParams:=False;

 
Кинул в таймер обновление всех текстур карт.
Если приходит нужная команда, то таймер включается, обновляет текстуры и отключается.
Т.к. текстур всего 20 (те что могут меняться по команде), то для системы это не очень напряжно.

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 01:00 28-12-2010 | Исправлено: ZBEP, 19:29 28-12-2010
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZBEP
Судя по тому что написано дело именно в потоках. Стандартом VCL является то что вы не можете использовать Visual Component Library из потоков. Зная немного IdXXX реальнее предположить что вы не в главном потоке это делаете. Рекоммендация одна и та же как написал Frodo_Torbins. Получив по IdXXX вы посылаете себе сообщение. Попробую изобразить код что надо:

Код:
TForm1 = class(TForm)
  ...
  private
      procedure WM_User_1(var Message: TMessage); message WM_User+1;
   ...
 
procedure TForm1.IdIRC1DellKart(ASender: TIdCommand);
begin
    PostMessage(Handle, WM_User+1, 0, 0)
end;  
 
procedure TForm1.WM_User_1(var Message: TMessage);
begin
    Memo1Click(Self.Memo1);
end;  
 


Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 11:57 29-12-2010
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover, я видимо не правильно понял по началу.
 
А как мне передать полученное значение в WM_User_1?
Ну т.е.

Код:
procedure TForm1.IdIRC1DellKart(ASender: TIdCommand);
var KDell:string;
begin
KDell:=ASender.RawLine[12];  //Как KDell передать, не объявляя ее глобально?
PostMessage(Handle, WM_User+1, 0, 0)
end;
 
procedure TForm1.WM_User_1(var Message: TMessage);
begin
DXLoadTextureFromFile('Data/Karts/'+KDell+'.png',Bus,0); //Что бы загрузило текстуру по полученному номеру.
end;

 
Пробовал как обычно, что то вроде такого:

Код:
procedure TForm1.WM_User_1(var Message: TMessage;KDell:string);

Но не прокатило, да и в PostMessage как мне отослать то что я хочу?
Сори за глупый вопрос, но раньше с этим вообще не сталкивался.

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 20:41 29-12-2010 | Исправлено: ZBEP, 20:44 29-12-2010
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZBEP
У PostMessage целых два параметра для передачи данных. В первый можно запихнуть ссылку на область памяти, а во второй ее размер. Этого вполне достаточно чтобы в WM_User_1 освободить память выделенную в IdIRC1DellKart. Получить эти два параметра можно из Message.WParam и Message.LParam. Поэкспериментируйте, там все довольно просто.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:45 29-12-2010
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins, ок спасибо, как время будет сделаю)

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 00:59 30-12-2010
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Тут он посылает значение самому себе и не очень удачный выбор передавать параметры. Лучше сохранить типа
событие
form1.MyParam1 := StringТочтояхочу;
А потом читать его прямо без всякого винапи.
 
Добавлено:
ZBEP
var KDell:string;  
Это надо объявить в теле формы то есть
TForm1 = class()
public
  KDell:string;  
end;
Тогда эта переменная будет видна и там и там.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 10:16 30-12-2010
Kr_Alex



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста.
Как в стандартный TImage загрузить картинку tiff?

Всего записей: 120 | Зарегистр. 16-07-2004 | Отправлено: 10:34 30-12-2010
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover, спс, так наверное и сделаю, не хотел по началу так делать, там и так много слишком всего объявлено, думал можно примерно также, как с процедурами/функциями передавать им значения переменных, без объявления их в теле формы.
Жалко нельзя в той же процедуре загружать текстуру, в которой пулучил данные от сервера, а то много лишнего, но нужного получается.
 
Офф:
Сделал динамическое изменение статов для каждой из карт (ну точнее для карт уже было, но тогда при изменении параметров, к примеру Карты №5 значения менялись у всех Карт №5 на поле. Теперь параметры меняются только у той карты, у которой они были изменены) + там с параметрами героев кое что сделал.
Осталось через серв учитывать все нужные значения и уже будет полная синхронизация клиентов во время игры.
Останется только дорабатывать, т.е. вводить способности для карт (сейчас они дез способностей. только бьются), добавлять новые карты (сейчас их 88).  
Ну и менюшки всякие для удобства рисовать.
Магию героев буду делать только после доделывания боевой системы карт/магических карт/способностей карт.
Вобще идей очень много и вроде, знаю как это все сделать (ну если конечно опять не вылезит что-то вроде того, как с загрузкой текстур в процедуре приема сообщений).
Времени только не хватает

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 19:46 30-12-2010 | Исправлено: ZBEP, 19:51 30-12-2010
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kr_Alex
Обычно достаточно добавить в uses модуль реализующий поддержку нужного формата. Искать такой модуль можно например тут: http://www.torry.net/pages.php?id=112

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:17 31-12-2010
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как добавить свое событие в TTimer, что бы было к примеру так:
procedure Timer3Timer(Sender: TObject;N1,N2:integer);
 
Или может легче создать компонент, наследника TTimer ?
 
П.с.
Знаю, что в гугле это есть, но я сейчас на неделю уезжаю почти в деревню без инета и т.д.
Буду там пока менюшки рисовать да серверную часть встрою в саму игру и анимацию доработаю.
 
По идее, если изменить событие, а не добавить, будет что-то вроде этого: ExtCtrls.pas

Код:
...
protected
procedure DoOnAnimate(Sender: TObject; N1,N2:integer); virtual;
 
...
procedure TCustomTrayIcon.DoOnAnimate(Sender: TObject; N1,N2:integer);
begin
  if Assigned(FOnAnimate) then
    FOnAnimate(Self);
  if Assigned(FIconList) and (FIconIndex < FIconList.Count - 1) then
    IconIndex := FIconIndex + 1
  else
    IconIndex := 0;
  Refresh;
end;
 
...
FTimer.OnTimer := DoOnAnimate;
...

Но я не уверен, пока нет возможности проверить.

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 22:01 01-01-2011 | Исправлено: ZBEP, 22:47 01-01-2011
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZBEP
А откуда таймеру знать какие значение должны быть у N1 и N2? У него должны быть как минимум дополнительные поля, или событие.
Если беретесь редактировать стандартный компонент, то копируйте его код в отдельный MyExtCtrls.pas, с редактированием стандартных модулей могут возникнуть разные нехорошие проблемы. Или же воспользуйтесь Шаманским методом Geo.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:45 02-01-2011
Samotek

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по интерфейсу IDE. В 2007 я панель с компонентами докил в окошко с Project Manager.  Это что отменили или можно это настроить?

Всего записей: 2434 | Зарегистр. 18-05-2005 | Отправлено: 15:02 02-01-2011
zerofer



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
дайте пример авторизации на сайте https с сертификатом

Всего записей: 124 | Зарегистр. 12-10-2008 | Отправлено: 03:21 03-01-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru