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

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

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

ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gpi, неа, друг, это не помогает. Выкидывал эти параметры поочерёдно, ещё когда ночью ковырялся в коде. Забыл просто в предыдущем своём посте написать о результатах этих экспериментов
 
Кстати, присоединяюсь к вопросу, который озвучил SPeller.

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 21:43 16-04-2006
SPeller



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

Цитата:
Кстати, присоединяюсь к вопросу, который озвучил SPeller

 
А ещё может быть 3-й, самый козырный вариант - выход в инет через прокси, когда даже пинги не ходят.
 
Выход один - пробовать подключиться на порт 80 сайтов, которые наверняка не в лежачем состоянии и не заблокированы какими-нить политиками. Первое, что приходит в голову - microsoft.com. Попали на него - инет есть, не попали - скорее всего нет.

Всего записей: 259 | Зарегистр. 11-01-2006 | Отправлено: 23:50 16-04-2006
0315

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста, создаю в Delphi свой класс, сохраняю переменную этого класса в типизированный файл, в поле моей переменной огромный массив строк, а он создаёт файл размеров 4 Байта. Если пытаюсь грузить в новую переменную содержимое файла, грузится, но переменная пустая. Подскажите как сохранить всё содержимое переменной моего класса.
 
Добавлено:
К приложению подгружается DLL, в которой содержится отдельный класс, как в этом классе создать програмно форму, примерный текст кода:
 
var NewForm: TForm;
begin
 NewForm:= TForm.Create(Fort);
 NewForm.Parent:= ???
 
Что писать в поле Parent? или может так вообще не выйдет?

Всего записей: 5 | Зарегистр. 17-04-2006 | Отправлено: 02:36 17-04-2006
ShIvADeSt



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

Цитата:
Подскажите пожалуйста, создаю в Delphi свой класс, сохраняю переменную этого класса в типизированный файл, в поле моей переменной огромный массив строк, а он создаёт файл размеров 4 Байта. Если пытаюсь грузить в новую переменную содержимое файла, грузится, но переменная пустая. Подскажите как сохранить всё содержимое переменной моего класса.

Телепаты в отпуске, код выгрузки в файл в студию.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:52 17-04-2006
SERGE_BLIZNUK

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

Цитата:
а он создаёт файл размеров 4 Байта

Угу. Код выгрузки давай сюда. И не забудь описание своего типа привести.
А пока, телепатически ;-)), думаю, что Вы выгружаете в файл Указатель на экземпляр своего типа (класса) ...

Код:
SizeOf(Form1)
возращает как раз 4 байта...
а пишет в файл наш молодой и наивный друг явно через такой код

Код:
  Write( MyFile, MyVar )
;-)))))))))
 
А тебе прийдётся делать в своём классе метод, сохраняющий все в файл ручками!
 
Пишите. Тут помогут.
 

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 06:28 17-04-2006
SPeller



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

Цитата:
создаю в Delphi свой класс, сохраняю переменную этого класса в типизированный файл, в поле моей переменной огромный массив строк, а он создаёт файл размеров 4

Потому что классовая переменная - это указатель. А указатели, как известно, занимают 4 байта. Чтобы сохранить содержимое класса в файл, лучше писать ручками. Если бы не использовались строки, то можно было бы записать в виде Stream.Write(Pointer(MyClass)^, MyClass.InstanceSize); . Но так как строки хранятся в динамически распределяемой памяти, при записи таким методом в файл запишутся тоже указатели на эти области. И при последующем чтении они будут указывать "вникуда". Поэтому - всё ручками.

Всего записей: 259 | Зарегистр. 11-01-2006 | Отправлено: 08:12 17-04-2006 | Исправлено: SPeller, 08:13 17-04-2006
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
0315
Но если хочеш как-то оптимизировать это сохранение (написать почти универсальный метод ), то необходимо использовать RTTI.
А вот тут есть даже компонент, который сохраняет класс в XML
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=465

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 12:35 17-04-2006
valerka78



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

Цитата:
Выход один - пробовать подключиться на порт 80 сайтов, которые наверняка не в лежачем состоянии и не заблокированы какими-нить политиками.

Ну вот , я же говорил что пинг не решает
100% программной проверки наличия подлючения к инету, наверное, просто не существует, так что проверка конектом на хост самое то.

Всего записей: 248 | Зарегистр. 16-01-2006 | Отправлено: 16:25 17-04-2006
SPeller



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Угу. Это давно извстно, но новичков всё тянет к RAS API и проверке на установленные сетевые подключения

Всего записей: 259 | Зарегистр. 11-01-2006 | Отправлено: 17:52 17-04-2006
JbBaDbot

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как сделать главное меню приложения прозрачным?

Всего записей: 9 | Зарегистр. 07-04-2006 | Отправлено: 18:47 17-04-2006
RoLerBooK



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня есть вопрос.
Я в программировании не силен, поэтому возник такой вопрос.
 
Каким образом можно вызвать программу (которая поддерживает консоль,т.е. принимает команды вместе с вызовом ее с командной строки) с передачей ей параметров и получить ответ от нее?  
Видимость вызываемой проги зависит от параметров или можно в вызове установить?
 
Хотелось бы пример такого увидеть.
Спасибо за внимание.

Всего записей: 155 | Зарегистр. 14-12-2005 | Отправлено: 20:51 17-04-2006
EZH



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

Цитата:
 
uses ShellApi;
...
ShellExecute(Handle,'open', 'c:\windows\notepad.exe','c:\SomeText.txt', nil, SW_SHOWNORMAL);
 

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 21:40 17-04-2006
RoLerBooK



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EZH
Спасибо за ответ, как я понял параметры передаются на месте 'c:\SomeText.txt' - ?
Мне например надо вызвать application.exe, которое вызывается следующим образом:
application.exe -r fileother.exe
 
Это надо сделать так?
 
ShellExecute(Handle,'open', 'application.exe','-r fileother.exe', nil, SW_SHOWNORMAL);  
 
И потом в какой параметр ответ передается?

Всего записей: 155 | Зарегистр. 14-12-2005 | Отправлено: 22:11 17-04-2006
EZH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
RoLerBooK
А что за ответ то? Что это вообще - ответ?  
 
Если ты вызываешь DOS прогу, то они обычно возвращают код возврата (ERRORLEVEL), но на сколько я знаю тебе до него будет не достучаться из Delphi. Как вариант можешь наваять .bat и в нем запускать свою прогу, и в bat же и проверять ERRORLEVEL. Ну а bat вызывать из Delphi.
 
Если вызываемая DOS-прога написана тобой, то можно попробовать заставить её возвращать значения через переменные окружения, к которым ты в Delphi будешь иметь доступ. Или заставить это делать тот же батник.
 
Если под ответом проги ты понимаешь какой-то вывод текста на консоль, то можно просто его перенаправить с консоли в текстовый файл, и уже из Delphi разбирать этот текстовик.
 
Если же ты запускаешь Win-приложение - то тут вооще куча вариантов, надо понять что и как возвращается, что тебе нужно...

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 22:52 17-04-2006 | Исправлено: EZH, 22:55 17-04-2006
RoLerBooK



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EZH
Нет прога Windows, просто работает с командной строки (вроде консолью называют, если неправильно поправьте).
 
Ну как она может запускать как с командной строки? меня первым делом интересует как запускать. С теми например. параметрами как я указал.
 
А ответ. например - код ошибки или все хорошо

Всего записей: 155 | Зарегистр. 14-12-2005 | Отправлено: 23:01 17-04-2006
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RoLerBooK
посмотрите пример запуска arj.exe  для запаковки (пример консольной программы)
_http://rapidshare.de/files/18285255/TestArj.dpr.html
Как получить код ошибки - я постараюсь сегодня посмотреть.

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 07:05 18-04-2006
ArtemiyUO

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если программа выводит результат своей работы в консоль то можно сделать так.
Запустить програму с параметром "progname.exe >> log.txt
после завершения работы программы в файле log.txt будет все что она вывела в консоль. Потом можно из дельфей анализировать данный файл.

Всего записей: 539 | Зарегистр. 12-12-2005 | Отправлено: 08:11 18-04-2006
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RoLerBooK
uses ...ShellApi,WinProcs,WinTypes
 
procedure TForm1.Button1Click(Sender: TObject);
Var
 s:integer;
 prog: array [0..255]of char;
 param: array [0..255]of char;
 wrkdir: array [0..255]of char;
 FProcessHnd: THandle;
 FTimer:TTimer;
 ExitCode:DWord;
 ShellInfo:TShellExecuteInfo;
 FHInstance:THandle;
 
begin
 StrPCopy(prog,Edit1.Text);
 StrPCopy(param,Edit2.Text);
 StrPCopy(wrkdir,Edit4.Text);
 
 FillChar(ShellInfo,SizeOf(TShellExecuteInfo),0);
 ShellInfo.cbSize:=SizeOf(TShellExecuteInfo);
 ShellInfo.fMask:=SEE_MASK_NOCLOSEPROCESS;
 ShellInfo.Wnd:=HWnd_Desktop;
 ShellInfo.lpFile:=prog;
 ShellInfo.lpParameters:=param;
 ShellInfo.lpDirectory:=wrkdir;
 ShellInfo.nShow:=SW_SHOWNORMAL;
 
 if ShellExecuteEx(@ShellInfo) then
   begin
    Edit3.Text:='Working';
    FHInstance:=ShellInfo.hInstApp;
    FProcessHnd:=ShellInfo.hProcess;
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(FProcessHnd,ExitCode);
    until (ExitCode<>still_Active);
 
   Edit3.Text:='Terminated:'+IntToStr(ExitCode);
  end;
 end;
 
ExitCode возвращает ERRORLEVEL
 
Добавлено:
еще можеш использовать компонент TRZLauncher из пакета Raize

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 09:12 18-04-2006
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RoLerBooK
Это называется перенаправлением вывода (еще бывает перенаправление ввода).
Примеры есть в MSDN, Королевстве Delphi, Delphi World и еще на множестве сайтов.
 
Вот пример с Delphi World.
Подробнее...
 
 
Но я рекомендую почитать первоисточник (MSDN) статья How to spawn console processes with redirected standard handles
http://support.microsoft.com/default.aspx?scid=kb;en-us;190351

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 10:52 18-04-2006 | Исправлено: vserd, 11:05 18-04-2006
RoLerBooK



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо всем кто ответил. Еще ничего не пробовал, пока остались вопросы.
 
SERGE_BLIZNUK
Вариант интересный. приблизительно мне это и надо. просто вызываемый процесс, не должен быть виден кроме самой программы, которая его вызвала. И в программе возможны не только работа с одним файдом. Но я думаю можно попробовать поиграться с о строками.
 
ArtemiyUO
Выводит в log инфу о файле и кое какие данные. Но что то много.
 
RostY
Я как понял, это кусок прогаммы какой-то. которая ему передает некоторые параметры. Не расшифруешь какие? И ShellExecuteEx лучше cmd? Будет работать с консолью?
 
 
vserd
Ну в первом месте работает же с DOS программой, а у меня Win приложение - консоль.
 
А во второй написано на С, по этому мне еще сложнее разобраться.
 
Ответ который выдает консоль, меня сейчас пока меньше всего интересует.
 
Интересно, а существует вариант при котором, этот файл я могу встроить в свое приложение (у меня нет исходника, есть сама прога) и как то работать с ней, с учетом, что встраиваемая прога - Win консоль, а встраивать нужно в Delphi программу?
 
P.S. Хотя наверно врядли найдется простое решение.
 
 

Всего записей: 155 | Зарегистр. 14-12-2005 | Отправлено: 18:10 18-04-2006
   

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi
ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru