Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: zeugene
Дата сообщения: 04.12.2010 04:27
ZBEP
Для того, чтобы обращаться к хосту с динамическим IP-адресом существуют службы, подобные dyndns.com. Почитайте - там не сложно.
Чтобы запустить на хосте с ADSL IRC-сервер вам необходимо прокинуть наружу порт. По ссылке http://portforward.com/english/routers/port_forwarding/routerindex.htm можно посмотреть, как это делается на вашем модеме.
Если что-то непонятно, пишите. Но это, вообще-то, не имеет отношения к Delphi.
Автор: drog888
Дата сообщения: 04.12.2010 06:18
слышно что нибудь про update 2 для Rad Studio 2011?
Автор: zeugene
Дата сообщения: 04.12.2010 10:11
drog888
Судя по всему пока глухо: http://cc.embarcadero.com/reg/rad_studio
Автор: ZBEP
Дата сообщения: 04.12.2010 10:36
zeugene, спс, в ЛС написал
Просто я был не совсем в курсе этого, потому что раньше не было нужды в поднятии сервера, думал может как-то через делфи решается.
Потом уже вспомнил про белый IP (как написали).
Автор: ZBEP
Дата сообщения: 04.12.2010 18:52
Глупый вопрос.
Как нормально доставить сообщение от сервера к клиенту?
Точнее даже, как нормально принять.
Отправляю так:

Код: procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var CIP,Msg:string;
begin
CIP:=AContext.Binding.PeerIP;
Msg:=TrimRight(AContext.Connection.IOHandler.ReadLn(enUTF8));
AContext.Connection.IOHandler.WriteLn(CIP+': '+Msg,enUTF8);
RichEdit1.Lines.add(CIP+': '+Msg);
end;
Автор: aidarsimon
Дата сообщения: 04.12.2010 21:10
Здравствуйте, не могу разобраться как записывать в реестр в бинарном виде. Нужно записать ключ, введенный в поле edit в реестр в бинарном виде.
Т.е. мы вводим ключ mw56-4btrg-s3sfc-mlb8k-1xgnk а в реестр это должно добавиться как "KEY"=hex:c6,96,43,17,95,a5,58,fc,8f,30,9d,a1,d0,cd,0b
Автор: ZBEP
Дата сообщения: 04.12.2010 21:52
aidarsimon, вот StrToHex и HexToStr
Подправь как тебе надо (если нужны запятые вместо пробелов).


Код:
function HEXSTR(Sou: string): string;
Var t:integer; sl:string;
begin
With TStringList.Create Do
try
Text:=StringReplace(Sou,#32,#13#10,[rfReplaceAll]);
sl:='';
For t:= 0 to Count - 1 Do
sl:=sl+Chr(StrToInt('$' + Strings[t]));
Result:=sl;
finally
Free;
end;
end;

function StrHex(source: string): string;
var i:integer; c:Char; ste:string;
begin
ste:='';
for i:=1 to Length(source) do
begin
c:=source[i];
ste:=ste+IntToHex(integer(c),2)+' ';
end;
result:=ste;
end;
Автор: data man
Дата сообщения: 04.12.2010 22:09
aidarsimon

А можно так:
Код: var
S: string;
Reg: TRegistry;

begin
Reg := TRegistry.Create;
S := 'mw56-4btrg-s3sfc-mlb8k-1xgnk';
Reg.RootKey:=HKEY_CURRENT_USER;
if reg.OpenKey('Test', True) then
Reg.WriteBinaryData('KEY', pointer(S)^, Length(S)*SizeOf(S[1]));

FreeAndNil(Reg);
end;
Автор: aidarsimon
Дата сообщения: 05.12.2010 17:40
ZBEP
data man
спасибо, но у меня видимо странная ситуация, ключ то ли шифруется, то ли я недопетриваю
Вобщем постараюсь объяснить с помощью скриншотов.

http://i058.radikal.ru/1012/1f/6b960f1a4414.png
http://s008.radikal.ru/i304/1012/ab/6e9a079482f6.png

Не могу уловить зависимость, как ключ
PT49 6D69W RZ8KJ KTE8E 3ZD0D превращается в 49,9a,64,93,57,d4,e5,34,7f,1c,68,1b,f1,b9,0e
и как
FZ77 YWM9W 6FB7F 9Y2TW KZSTZ превращается в 4d,79,e3,9f,ef,f2,5e,75,bc,dc,fe,b3,f9,f3,42
Автор: Frodo_Torbins
Дата сообщения: 05.12.2010 18:19
aidarsimon
Здравствуй Zlib?
Автор: aidarsimon
Дата сообщения: 05.12.2010 18:26
Frodo_Torbins
можно по-подробней
Автор: Frodo_Torbins
Дата сообщения: 05.12.2010 18:44
aidarsimon
Ну у вас в реестре размер данных меньше чем размер строки с ключом. Из этого можно сделать вывод, что данные сжимаются.
В комплекте с делфи идет библиотека Zlib, и если целевая прога написана на делфи, то скорее всего именно эту библиотеку и использует. Хотя точно быть в этом уверенным нельзя, нужно ковырять эту прогу пейдами, отладчиками и прочими хакерскими тулзами. В общем если у вас нету исходников, и вы не можете связаться с автором, то вы попали
Автор: volser
Дата сообщения: 05.12.2010 19:23
aidarsimon
Вам сюда
Автор: aidarsimon
Дата сообщения: 05.12.2010 19:33
volser
я там уже год назад спрашивал - походу там не шарят ))
Автор: ZBEP
Дата сообщения: 05.12.2010 19:58
По моему глупому вопросу насчет принятием сообщений клиентом идеи есть?
Как проверить клиенту, что ему что то пришло, а не висеть в ожидании того, придет что-нибудь или нет?
В IRC это все обрабатовалось в OnRaw, а в IdTCPClient, даже если исключать таймаут, то почему-то происходит дисконнект.
В общем необходимо что-то вроде проверки наличия сообщения, а затем принимать через ReadLn или вообще другим способом..
Автор: Frodo_Torbins
Дата сообщения: 05.12.2010 20:54
ZBEP
Для приема используйте тцпсервер. Клиент и сервер прекрасно уживаются в одном приложении.
Вообще конечно это можно было бы объединить в одном компоненте. Посмотрите что еще есть в наборе инди, может вам какой другой компонент больше подойдет.
Автор: ZBEP
Дата сообщения: 05.12.2010 21:25
Frodo_Torbins, Хы.. пока так и делаю, но думал, что есть другой, более правильный способ, а то получается, что клиент только отсылает, а сервер принимает.
А из других компонентов раньше склонялся к IRC, но там сервер какой-то странный, хотя клиент на мой взгляд более удобный.

П.с.
Не по теме:
Кто-нибудь с модемом Dlink DSL-2540U поднимал сервер с серым IP ?
Я в него и DynDns вписал уже и порты для своего локального IP открыл и ICMP для LAN и WAN включил.
Из вне хост пингуется, ссылается на серый IP, т.е. ссылается на модем, а не на мой комп.
Может кто-нить знает, что надо в модеме выставить, что бы он перенаправлял полученный запрос от моего клиента на сервер, запущенный на моем компе?
Автор: zeugene
Дата сообщения: 06.12.2010 04:59
ZBEP
Смотри в модеме раздел, касающийся Port Forwart, Port Mapping. Тебе нужно "прокинуть" (forward) наружу порт изнутри. Модем будет все пакеты, приходящие на определённый порт извне перенаправлять на указаный порт внутри сети. Обычно можно указать как внешний, так и внутренний порт.
Автор: aidarsimon
Дата сообщения: 06.12.2010 19:15
Здрасьте еще раз )

Как-то бы сформулировать вопрос, чтоб был понятен
Нужно запустить игру, можно не через командную строку, но чтоб работало ))
При вызове просто полного пути игра не видит директорию с файлами.
http://i013.radikal.ru/1012/79/1225fde764ef.png

ShellExecute(Handle,'open','C:\WINDOWS\system32\cmd.exe','/k cd /d' + 'd:\games\pes6\',nil, SW_SHOW);

как дальше в здесь ввести еще pes6.exe ?
надо чтоб получилось как на скрине http://s006.radikal.ru/i213/1012/53/483355995921.png


Автор: Frodo_Torbins
Дата сообщения: 06.12.2010 19:33
aidarsimon
Третьим параметром указывайте путь к экзешнику, а для задания рабочего каталога предназначен пятый.
Автор: aidarsimon
Дата сообщения: 06.12.2010 20:05
Frodo_Torbins
спасибо, работает. Если еще возникнут вопросы, спрошу
Автор: Frodo_Torbins
Дата сообщения: 06.12.2010 20:19
aidarsimon
Если еще возникнут вопросы, сначала спросите у гугла - быстрее будет
Автор: aidarsimon
Дата сообщения: 06.12.2010 20:40
Frodo_Torbins
там бывает много лишнего, и запутываешься еще сильней.
Вот новый вопрос - нужно сложить две строки - одна путь, другая имя экзешника. Если делать через edit' ы то получается, но это по-тупому, а если складывать как стринг, то ниче не катит. Че то я туплю совсем, мог бы посотреть.

edit4.Text := RegQueryStr(HKEY_LOCAL_MACHINE, 'SOFTWARE\KONAMIPES6\PES6', 'installdir'); результатом будет d:\games\pes6\
edit5.text:= edit4.Text+'pes6.exe'; результат будет d:\games\pes6\pes6.exe
ShellExecute(Handle,'open',PChar(edit5.text),nil,PChar(edit4.Text), SW_SHOW);
в таком варианте все отлично.

а вот в таком открывается в проводнике папка d:\games\pes6

var destination,destinationfull,destinationexe:string;
destination:= RegQueryStr(HKEY_LOCAL_MACHINE, 'SOFTWARE\KONAMIPES6\PES6', 'installdir'); результат d:\games\pes6\
destinationexe:= 'pes6.exe'; результат pes6.exe
destinationfull:= destination+destinationexe ; результат d:\games\pes6\
соответственно
ShellExecute(Handle,'open',PChar(destinationfull),nil,PChar(destination), SW_SHOW); запускает проводник и переходит в d:\games\pes6\ , что логично

Почему не складываются строки?
Автор: Frodo_Torbins
Дата сообщения: 06.12.2010 20:56
aidarsimon
У меня все складывается. Внимательно просмотрите свой код.
Автор: aidarsimon
Дата сообщения: 07.12.2010 08:40
все ,понял. надо было вместо
edit4.Text := RegQueryStr(HKEY_LOCAL_MACHINE, 'SOFTWARE\KONAMIPES6\PES6', 'installdir');
написать
edit4.Text := pchar(RegQueryStr(HKEY_LOCAL_MACHINE, 'SOFTWARE\KONAMIPES6\PES6', 'installdir'));
Автор: tanaseduard
Дата сообщения: 07.12.2010 10:11
Есть проблема.

Проект полностью построен на bpl.
Соответственно модуль/окно загружается с bpl.
Таким способом:

Код:
Procedure Loader(RunSettings:TLoadModuleSettings);
Begin
Creating:=True;
Screen:=TScreen(RunSettings.Scr);
Application:=TApplication(RunSettings.App);
Settings:=RunSettings;
os_Session:=RunSettings.Session;
Application.CreateForm(Tfm_RK_Dish_Menu,fm_RK_Dish_Menu);
fm_RK_Dish_Menu.CreateAll;
fm_RK_Dish_Menu.ReadRights;
Creating:=False;
End;
Автор: Frodo_Torbins
Дата сообщения: 07.12.2010 10:49
tanaseduard
Странный код. Если вы используете bpl, то значит и рантайм пакеты у вас должны быть включены. А значит и объект Application (Screen, ...) у вас один на все приложение.
И что за exception? Если это AV, то можно попробовать погонять проект под SafeMM.
Автор: tanaseduard
Дата сообщения: 07.12.2010 11:10
Frodo_Torbins
Про SafeMM поподробней пожалуйста.
По поводу Application Вы правы.

Хотя мне кажеться что я нашел где затык.
Если главная форма из Bpl закрываеться, соответственно там стоит Action=caFree, то дочерние и иные формы созданные внутри этого пакета не дестроятся.
Попробую прописать в OnDestroy главной формы убивать то что ее.
Автор: Frodo_Torbins
Дата сообщения: 07.12.2010 11:44
tanaseduard
SafeMM это чисто отладочный менеджер памяти. С ним прога начинает пожирать оперативку тоннами, но зато проявляются всякие скрытые глюки. Эфективность по отлову багов конечно не 100%, но как дополнительный инструмент тестирования он довольно полезен.
Автор: tanaseduard
Дата сообщения: 07.12.2010 11:52
Frodo_Torbins
Спасибо.
Попробуем.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.