| 
| 
 | Вопрос # 5 508/ вопрос закрыт / | 
 |  Доброго времени суток, уважаемые эксперты!Не судите строго за вопрос, но возникли сложность с обновлением строкового ресурса в программе.
 
 1 проблема видимо в том, что программа пытается обновить ресурс в самой себе, а следовательно натыкается на файл который исполняется и не может его обновить. На сколько я помню - можно при запуске загружать программу в оперативную память и дальше работать с копией из памяти, следовательно можно будет спокойно работать с ресурсами из ехе. Но это не самое важное, основная проблема в другом.
 
 2 проблема - так как я не могу получить доступ к файлу, попытался обновить информацию у этой же программы но положеной в другую директорию, а следовательно не выполняемую. НО после выполнения кода, который ни на что не ругается (проверял GetLastError после каждой команды и ругнулось только на s:=StrToInt(year_on) и выдало 8, хотя год и присваивается какой нужно), и проверке ресурсов программы через restorator - данные те же, что и были ранее.
 
 Надеюсь на вашу помощь.
 Прилагаю листинг процедуры в которой и возникает проблема.
 Код показывает что я пытаюсь обновить ресурс как исполняемого файла, так и не исполняемого, но информация не обновляется нигде.
 Исполняемый файл находится в D:\DirPath\ProgramDirPath\poschitalka.exe
 Приложение:Переключить в обычный режим procedure TDate_change.Ok_buttonClick(Sender: TObject);varday_on,month_on,year_on:word;date_on:tdatetime;res:THandle;    s:string;    qwerty:integer;    nam:string;    error_code:integer;Ptr : Pointer;beginnam:=Application.ExeName; date_on:=monthCalendar1.date;decodedate(int(date_on),year_on,month_on,day_on);      s:=FloatToStr(year_on);      res:=BeginUpdateResource(PChar(nam),false);     Ptr:=Addr(s);     UpdateResource(res,RT_STRING,'65261',LANG_NEUTRAL,ptr,sizeof(s));     EndUpdateResource(res,false);     error_code:=getlasterror();     ShowMessage(IntToStr(error_code));     s:=FloatToStr(month_on);     res:=BeginUpdateResource('D:\DirPath\poschitalka.exe',false);     Ptr:=Addr(s);     UpdateResource(res,RT_STRING,'65262',LANG_NEUTRAL,ptr,sizeof(s));     EndUpdateResource(res,false);     s:=FloatToStr(day_on);     res:=BeginUpdateResource(PChar(nam),false);     Ptr:=Addr(s);     UpdateResource(res,RT_STRING,'65263',LANG_NEUTRAL,ptr,sizeof(s));     EndUpdateResource(res,false);Close;end;
|  |   Вопрос задал: Pessimist (статус: Посетитель)Вопрос отправлен: 16 июля 2011, 21:38
 Состояние вопроса: закрыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 23; последнее сообщение — 18 июля 2011, 19:47; участников в обсуждении: 4. Страницы: [1] [2] [Следующая »]  
|   | bugmenot (статус: 3-ий класс), 16 июля 2011, 23:43 [#2]: Цитата (Pessimist): который ни на что не ругается (проверял GetLastError после каждой команды не вижу в коде.
 алсо, "команда".
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | min@y™ (статус: Доктор наук), 17 июля 2011, 11:06 [#3]:Прочитал вопрос 3 раза. Не понял, для чего это надо. Аффтар, поясни, плиз. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Pessimist (статус: Посетитель), 17 июля 2011, 16:33 [#4]:Хочу, чтобы настройки таскались за программой, при этом не используя реестр и дополнительные файлы. А так - для общего развития хорошо бы понять как же обновить ресурсы в другом ехе файле. 
 Неужели никто не имел дела с изменением ресурсов в ехе файлах?
 |  
|   | Pessimist (статус: Посетитель), 17 июля 2011, 17:13 [#5]:Перенес изменение ресурса в другое приложение (сделаю чтобы в нужный момент оно распаковывалось из ехе в котором мне нужно изменить ресурс,а после изменения перезапустит его. Но все равно не получается обновить ресурс. Код незначительно изменил:
 
 procedure TDate_change.Ok_buttonClick(Sender: TObject);
var
day_on,month_on,year_on:word;
date_on:tdatetime;
res:THandle;
    s:string;
    nam:string;
Ptr : Pointer;
year_id,month_id,day_id:word;
begin
year_id:=65261;
month_id:=65262;
day_id:=65263;
GetDir(0,nam);
 
date_on:=monthCalendar1.date;
decodedate(int(date_on),year_on,month_on,day_on);
 
     s:=FloatToStr(year_on);   
     res:=BeginUpdateResource(PChar(nam+'\poschitalka.exe'),false);
     Ptr:=Addr(s);
     UpdateResource(res,RT_STRING,PChar(year_id),LANG_NEUTRAL,ptr,sizeof(s));
     EndUpdateResource(res,false);
 
     s:=FloatToStr(month_on);
     res:=BeginUpdateResource(PChar(nam+'\poschitalka.exe'),false);
     Ptr:=Addr(s);
     UpdateResource(res,RT_STRING,PChar(month_id),LANG_NEUTRAL,ptr,sizeof(s));
     EndUpdateResource(res,false);
 
     s:=FloatToStr(day_on);
     res:=BeginUpdateResource(PChar(nam+'\poschitalka.exe'),false);
     Ptr:=Addr(s);
     UpdateResource(res,RT_STRING,PChar(day_id),LANG_NEUTRAL,ptr,sizeof(s));
     EndUpdateResource(res,false);
Close;
end;После выполнения этого кода, ехе файл обновляется, о чем свидетельствует его моргание в explorer'у винды и так же дата изменения файла меняется. НО нужные мне строки не меняются на те значения которые я в нее хочу внести. Может не так обращаюсь к функциям?
 
 Очень надеюсь на вас.
 |  
|   | min@y™ (статус: Доктор наук), 18 июля 2011, 08:20 [#6]: Цитата (Pessimist): Очень надеюсь на вас.  Зря надеешься. Я уверен, что люди, сидящие у нас на портале, такой фигнёй не занимались никогда. И правильно делали.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 18 июля 2011, 09:59 [#7]:Это в DOS было модно так делать. Там всё просто, надо перестать протирать до дыр Ctrl+V и подумать верхней головойдостаточно прочитать описание в справочнике.виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | Pessimist (статус: Посетитель), 18 июля 2011, 10:38 [#8]:Редактор ресурса - ненужная ерунда? Локализатор для своих проектов например на нем можно построить...Ну да, зачем он нужен, можно же все держать в куче отдельных файлов, когда их существования можно избежать, а их наличие не дает прироста скорости. |  
|   | min@y™ (статус: Доктор наук), 18 июля 2011, 11:38 [#9]: Цитата (Pessimist): Ну да, зачем он нужен, можно же все держать в куче отдельных файлов Не в куче файлов, а в одном файле.
 
 Цитата (Pessimist): а их наличие не дает прироста скорости.  А их отсутствие даёт прирост в скорости? Ущипните меня...
 Думаешь, будет заметно, что настройки из файла прочитались не за 10 миллисекунд, а за 50? Нюню.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Pessimist (статус: Посетитель), 18 июля 2011, 13:08 [#10]:Отойти от слова настройки никак не получается? Хранить таким образом можно и языки для своих программ. Обращение к строкам находящимся в ресурсе проще некуда, но я решил начать с хранения в этих строках ресурсов. Редактор ресурса для упрощения локализации продукта - человеком который не разбирается в программировании - тоже бред не нужный. |  
|   | min@y™ (статус: Доктор наук), 18 июля 2011, 13:14 [#11]: Цитата (Pessimist): Отойти от слова настройки никак не получается? Хранить таким образом можно и языки для своих программ. Обращение к строкам находящимся в ресурсе проще некуда, но я решил начать с хранения в этих строках ресурсов. Редактор ресурса для упрощения локализации продукта - человеком который не разбирается в программировании - тоже бред не нужный.  
 Желаю удачи.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 18 июля 2011, 13:21 [#12]:Кстати, забыл сказать... Много народу занималось подобной куйнёй, у некоторых даже получалось. Но все они в итоге говорили, что нуевонах - овчинка выделки не стоит. 
 Не трать время, браза, оно не бесконечное.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Gooddy (статус: 3-ий класс), 18 июля 2011, 13:28 [#13]: Цитата: Не трать время, браза, оно не бесконечное. Иди выпей.
 Чисти код! Чисти код! Чисти код! |  
|   | min@y™ (статус: Доктор наук), 18 июля 2011, 13:47 [#14]: Цитата (Gooddy): Иди выпей.  Ну повернулся я на 180°, ну открыл сейф. Там у меня 0,7 Арарат болтаеццо. 5 звездофф. Отхлебнул из горла грамм 50, закусил дыней.
 
 Что дальше?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Gooddy (статус: 3-ий класс), 18 июля 2011, 13:50 [#15]:А я не тебе =P Чисти код! Чисти код! Чисти код! |  
|   | min@y™ (статус: Доктор наук), 18 июля 2011, 14:02 [#16]: Цитата (Gooddy): А я не тебе А кому? Цитата-то моя.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Gooddy (статус: 3-ий класс), 18 июля 2011, 14:10 [#17]:Автору вопроса. Чтоб не бездельничал а пошёл выпил.
 Чисти код! Чисти код! Чисти код! |  
|   | min@y™ (статус: Доктор наук), 18 июля 2011, 14:13 [#18]:Ну вот, блин... Зря я пузырь откупорил. Полгода хранил в сейфе, теперь придёццо допивать. Я уже и братву пригласил, Серёга пошёл в сельпо за икрой... Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Gooddy (статус: 3-ий класс), 18 июля 2011, 14:18 [#19]:Почему зря то? Отдохнёшь. Чисти код! Чисти код! Чисти код! |  
|   | bugmenot (статус: 3-ий класс), 18 июля 2011, 14:20 [#20]: Цитата (Gooddy): Иди выпей. йоду.
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  Страницы: [1] [2] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |