Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Console Application в Delphi 
V
    Опции темы
Chrumov
  Дата 10.5.2013, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.5.2013

Репутация: нет
Всего: нет



В общем возник вопрос сохранения некоторых данных программы перед ее закрытием, т.е. при выключении компа и т.п.
Как это можно сделать в Console Application?
PM   Вверх
kami
Дата 10.5.2013, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



PM MAIL WWW   Вверх
Chrumov
  Дата 10.5.2013, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.5.2013

Репутация: нет
Всего: нет



А можно по подробнее? А то у меня не получатся
PM   Вверх
kami
Дата 10.5.2013, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Chrumov @  10.5.2013,  13:52 Найти цитируемый пост)
А то у меня не получатся

Что конкретно не получается?
PM MAIL WWW   Вверх
Chrumov
  Дата 10.5.2013, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.5.2013

Репутация: нет
Всего: нет



Я не понимаю как и где это писать, надо таймер ставить чтобы оно эту функцию прогоняло или как?
Если я просто сую в программу, оно не работает, хотя ошибок не показывает.

Это сообщение отредактировал(а) Chrumov - 10.5.2013, 22:03
PM   Вверх
kami
Дата 10.5.2013, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Chrumov @  10.5.2013,  21:56 Найти цитируемый пост)
Если я просто сую в программу,

Покажи, как "суешь" smile
PM MAIL WWW   Вверх
Poseidon
Дата 10.5.2013, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(Chrumov @  10.5.2013,  21:56 Найти цитируемый пост)
Если я просто сую в программу, оно не работает
Вот прямо в том виде, в котором функция приведена, и суешь? Копи-пастом? Тогда не удивительно. А пробовал разобраться вообще что там к чему?



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Chrumov
  Дата 10.5.2013, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.5.2013

Репутация: нет
Всего: нет




Код

program Project;

uses
  SysUtils, Classes, Windows;

function Ctrl_Handler(Ctrl: Longint): LongBool;
var
 f: textfile;
begin
  if Ctrl in [CTRL_SHUTDOWN_EVENT, CTRL_LOGOFF_EVENT] then
  begin
   AssignFile(f, 'text.txt');
   Append(f);
   Writeln(f, 'ololo');
   Closefile(f);
  end
  else
  begin

  end;
  Result := true;
end;

begin

end.



Вот так вот "сую"
PM   Вверх
Poseidon
Дата 10.5.2013, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Chrumov, молодец. А теперь еще раз тыкни на ссылку kami и прочти внимательно что там написано внизу, после кода. 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Chrumov
Дата 10.5.2013, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.5.2013

Репутация: нет
Всего: нет



Код

program Project;

uses
  SysUtils, Classes, Windows;

function Ctrl_Handler(Ctrl: Longint): LongBool;
var
 f: textfile;
begin
  if Ctrl in [CTRL_SHUTDOWN_EVENT, CTRL_LOGOFF_EVENT] then
  begin
   AssignFile(f, '1');
   Append(f);
   Writeln(f, 'ololo');
   Closefile(f);
  end
  else
  begin

  end;
  Result := true;
end;

begin
SetConsoleCtrlHandler( Ctrl_Handler, TRUE );
end.




Not enough actual parameters...
PM   Вверх
kami
Дата 10.5.2013, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Вот, кстати, реальный пример неработающего FAQ из поисковика. А он (пример сей) разошелся в интернете...
Надо так:
Код

SetConsoleCtrlHandler(@Ctrl_Handler, TRUE )

Кстати, меня глючит или Ctrl_Handler должна быть stdcall?

Это сообщение отредактировал(а) kami - 10.5.2013, 23:33
PM MAIL WWW   Вверх
Chrumov
  Дата 10.5.2013, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.5.2013

Репутация: нет
Всего: нет



Хоть убейте, не работает  smile 

Ошибок нет, запускаю прогу, вырубаю комп, включаю, текстовый файл пуст

Это сообщение отредактировал(а) Chrumov - 10.5.2013, 23:49
PM   Вверх
northener
Дата 11.5.2013, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(kami @  10.5.2013,  23:32 Найти цитируемый пост)
Надо так:

Почему надо так?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
kami
Дата 11.5.2013, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(northener @  11.5.2013,  01:41 Найти цитируемый пост)
Почему надо так?

Могу ошибаться, конечно, но:
1. если без указателя - Delphi думает, что нужно подставить результат выполнения функции. Соответственно - выдает недостаточно параметров.
2. В SetConsoleCtrlHandler указано "A pointer to the application-defined HandlerRoutine function", кроме того - в объявлении этой ф-и в Windows.pas первый параметр идет как FarProc.

Добавлено через 1 минуту и 23 секунды
И - до сих пор не понимаю:
Цитата(kami @  10.5.2013,  23:32 Найти цитируемый пост)
 меня глючит или Ctrl_Handler должна быть stdcall?


Добавлено через 6 минут и 54 секунды
Update:
меня не глючит. Действительно, правильный код выглядит так:
Код

function Ctrl_Handler(Ctrl: Longint): BOOL; stdcall;
var
  f: textfile;
begin
  if Ctrl in [CTRL_CLOSE_EVENT, CTRL_BREAK_EVENT] then
    begin
      MessageBox(0, '11234eqerf', 'asdfasdf', MB_OK);
    end;
  Result := true;
end;

begin
  SetConsoleCtrlHandler(@Ctrl_Handler, true);
  while True do
    Sleep(1000);
end.

Для Chrumov, в этом примере код реагирует на нажатие кнопки "закрыть" консольного окна и на Ctrl+Break, а не на завершение работы Windows. Нужные параметры для отлавливания можно найти в MSDN
PM MAIL WWW   Вверх
Alexeis
Дата 11.5.2013, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(kami @  11.5.2013,  00:32 Найти цитируемый пост)
Кстати, меня глючит или Ctrl_Handler должна быть stdcall?

   Чо думать, переходим на 
http://msdn.microsoft.com/en-us/library/wi...6(v=vs.85).aspx
затем на 
http://msdn.microsoft.com/en-us/library/wi...2(v=vs.85).aspx
И видим
Код

BOOL WINAPI HandlerRoutine(
  _In_  DWORD dwCtrlType
);

Для 32х битных систем WINAPI точно имеет stdcall


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.