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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> загрузка в memo 
:(
    Опции темы
Darkmaster
Дата 10.2.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



такая вот проблема, мне нужно чтобы прога при старте(либо OnShow -Form либо OnCreate) загружала в Мемо определенный текстовый файл. Когда просто запускаешь прогу то все работает, но вот в чем проблема, у меня прога добавлена в автозагрузку и при автозагрузке текстовый файл не грузится. Как исправить? Вот код:
Код

procedure TForm1.FormShow(Sender: TObject);
begin
if FileExists('воскресенье.txt') then
Memo7.Lines.LoadFromFile(ExtractFilePath(ParamStr(0))+'воскресенье.txt');
if FileExists('суббота.txt') then
Memo6.Lines.LoadFromFile('суббота.txt');
if FileExists('пятница.txt') then
Memo5.Lines.LoadFromFile('пятница.txt');
if FileExists('четверг.txt') then
Memo4.Lines.LoadFromFile('четверг.txt');
if FileExists('среда.txt') then
Memo3.Lines.LoadFromFile('среда.txt');
if FileExists('вторник.txt') then
Memo2.Lines.LoadFromFile('вторник.txt');
if FileExists('понедельник.txt') then
Memo1.Lines.LoadFromFile('понедельник.txt');

--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
_hunter
Дата 10.2.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



путь к файлу толком пропиши ( впиши абсолютный )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Darkmaster
Дата 10.2.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



проблема в том что это не устраивает, так как программа может хранится в разных каталогах и файлы должны находится в папке с прогой.
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
nickelfire
Дата 10.2.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ты напиши так:
Код

memo1.lines.loadfromfile(getfilepath(paramstr(0))+'filename.txt');

тока не помню точно paramstr(0) или paramstr[0].
PM MAIL   Вверх
Foley
Дата 10.2.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фсемба Яцца
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 31.1.2006
Где: Россия, Арх.обл

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



Можешь попробовать так (если файл воскресенье в каталоге проги):

memo1.lines.loadfromfile(GetCurrentDir+'воскресенье.тхт')
PM MAIL ICQ   Вверх
Snowy
Дата 10.2.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Код
SetCurrentDirectory(PChar(ExtractFileDir(ParamStr(0))));
Вылечит твою проблему.
PM MAIL   Вверх
Int64
Дата 11.2.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Foley @ 10.2.2006, 23:17)
Можешь попробовать так (если файл воскресенье в каталоге проги):

memo1.lines.loadfromfile(GetCurrentDir+'воскресенье.тхт')

GetCurrentDir - возвращает текущую директорию. Текущая директория не обязательно равна директории программы. Можно использовать SetCurrentDirectory, как показал Snowy. Но использовать абсолютные пути будет правильней. Не пойму, почему ты в LoadFromFile используешь абсолютный путь, а в FileExists - нет. Если текущая директория не равна директории твоей программы, то LoadFromFile никогда не выплнится:
Код

if FileExists('воскресенье.txt') then
Memo7.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'воскресенье.txt');

Напиши так:
Код

if FileExists(ExtractFilePath(ParamStr(0)) + 'воскресенье.txt') then    
Memo7.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'воскресенье.txt');

И все будет работать smile.
PM MAIL   Вверх
Yanis
Дата 11.2.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



Код

const
  def_ext = '.txt';
  days_list: array[0..6] of string = ('Понедельник', 'Вторник', 'Среда', 'Четверг' ,'Пятница' ,'Суббота', 'Воскресенье');
...
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  s: string;
begin
  s := GetCurrentDir;
  SetCurrentDir(ExtractFilePath(ParamStr(0)));
  for i := 0 to High(days_list) do
    if FileExists(days_list[i]+def_ext) then
      if FindComponent('Memo'+IntToStr(i+1)) is TMemo then
        (FindComponent('Memo'+IntToStr(i+1)) as TMemo).Lines.LoadFromFile(days_list[i]+def_ext);
  SetCurrentDir(s);
end;


Это сообщение отредактировал(а) Yanis - 11.2.2006, 12:11


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Int64
Дата 11.2.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Yanis @ 11.2.2006, 12:09)
Код

const
  def_ext = '.txt';
  days_list: array[0..6] of string = ('Понедельник', 'Вторник', 'Среда', 'Четверг' ,'Пятница' ,'Суббота', 'Воскресенье');
...
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  s: string;
begin
  s := GetCurrentDir;
  SetCurrentDir(ExtractFilePath(ParamStr(0)));
  for i := 0 to High(days_list) do
    if FileExists(days_list[i]+def_ext) then
      if FindComponent('Memo'+IntToStr(i+1)) is TMemo then
        (FindComponent('Memo'+IntToStr(i+1)) as TMemo).Lines.LoadFromFile(days_list[i]+def_ext);
  SetCurrentDir(s);
end;

Я лично не вижу смысла использовать SetCurrentDir даже так - лишние строки кода, нет где гарантии того, что директорию никто не сменит во время работы - в результате опять файл не грузиться. Пихать в цикл - не рационально, не красиво... Указав абсолютный путь избавляемся от подобного рода проблем. Ну и еще - дело вкуса, а точнее - привычки.
PM MAIL   Вверх
Yanis
Дата 11.2.2006, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



Int64, я не сомневаюсь в вашей способности написать более функциональный и быстрый код, потому что надеюсь вы не сомневаетесь в моей способности сделать тоже самое.
В тот момент мне это решение пришлось по вкусу и я так написал. Учитывая саму проблему автора и выбранный путь её решения такой код будет смотреться вполне прилично smile


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Int64
  Дата 11.2.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Просто пытался направить человека на путь истинный smile
PM MAIL   Вверх
Foley
Дата 12.2.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фсемба Яцца
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 31.1.2006
Где: Россия, Арх.обл

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



Цитата(Int64 @ 11.2.2006, 11:46 Найти цитируемый пост)
GetCurrentDir - возвращает текущую директорию. Текущая директория не обязательно равна директории программы

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


Цитата(_hunter @ 10.2.2006, 20:47 Найти цитируемый пост)
путь к файлу толком пропиши ( впиши абсолютный )

можно ведь и путь к экзешнику найти программно и добавить его в эдит, потом при указании пути подставить значение эдита + имя файла, в этом случае прога будет корректно работать и при копировании в другой каталог.
Добавлено @ 00:33
упс... недоглядел... что-то совсем невнимательный стал пардон за:
Цитата(Foley @ 12.2.2006, 00:24 Найти цитируемый пост)
можно ведь и путь к экзешнику найти программно и добавить его в эдит, потом при указании пути подставить значение эдита + имя файла, в этом случае прога будет корректно работать и при копировании в другой каталог

(это у всех написано)

PM MAIL ICQ   Вверх
Yanis
Дата 12.2.2006, 05:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



Цитата(Foley @ 12.2.2006, 00:24 Найти цитируемый пост)
а тогда по какому принцыпу определяется текушая директория?

Напрмер, в свойствах ярлыка к любой программе есть свойство "Рабочая папка". Если значение этого свойства не совпадает с путём к программе, то текущая дирректория при запуске через этот ярлык будет уже "неверной" для программы.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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