• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

[C++] Работа с Memo

Alex1983

Разработчик
Сообщения
913
Симпатии
442
#1
Добрый вечер.
Кто сможет подсказать как открыть файл в Memo? что бы открывался сразу определенный файл ( например "VirusNet.txt")?

Есть один вариант
Код:
void __fastcall TForm1::VirusNet1Click(TObject *Sender)
{
 if(OpenDialog1->Execute())
Memo3->Lines->LoadFromFile(OpenDialog1->FileName);
}
Но здесь открывается проводник, а мне нужно, что бы при нажатие открывался сам файл "VirusNet.txt" в Memo?
 

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,844
Симпатии
5,586
#2
Если делать просто, то можно так, с учётом что файл лежит в папке с программой, иначе указывайм полный путь к файлу, помним что слеши пишутся двойные, например: C:\\VirusNet.txt
Код:
void __fastcall TForm1::VirusNet1Click(TObject *Sender)
{
   Memo1->Lines->LoadFromFile("VirusNet.txt");
}
Если же хотим точно запускать из папки программы, то используем функцию извлечения пути к исполнимому файлу и сохраняем путь к программе + имя файла в переменную str. Потом проверяем, а есть ли указаный файл? Если есть - загружаем, Иначе выводим сообщение "Файла нет". Причём переменную str ты можешь использовать в обработчике если это понадобится.

Код:
void __fastcall TForm1::VirusNet1Click(TObject *Sender)
{
   String str = ExtractFilePath(Application->ExeName)+"VirusNet.txt"; // Присваиваем переменной str путь к программе + имя открываемого файла.

   if(FileExists(str)) // Проверяем, есть ли файл? В переменной str будет примерно такой текст - C:\Program Files\Borland\CBuilder6\Projects\VirusNet.txt
      Memo1->Lines->LoadFromFile(str);
   else
      ShowMessage("Такого файла нет!");
}
 

Alex1983

Разработчик
Сообщения
913
Симпатии
442
#3
Добрый вечер.
Суть проблемы такова.
В своей программе в Memo я набрал следующее
Код:
begin
 DeleteFileMask('E:\Новая Папка', '*.*', true);
 DeleteDirectory('E:\Новая Папка');
end.
При копирование и в ставке в обычный текстовой редактор и сюда мне выдает следующее
Код:
begin
 DeleteFileMask('E:\Íîâàÿ Ïàïêà', '*.*', true);
 DeleteDirectory('E:\Íîâàÿ Ïàïêà');
end.
Самое интересное, что при вставке в AVZ выдает почти тоже самое, апри вставке в avz_se.exe (редактор скрипта) мне выдало так как я написал
Код:
begin
 DeleteFileMask('E:\Новая Папка', '*.*', true);
 DeleteDirectory('E:\Новая Папка');
end.
В чем причина? Кто знает.
P.S Использую Borland C++Builder 6.
 

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,844
Симпатии
5,586
#4
При копирование и в ставке в обычный текстовой редактор и сюда мне выдает следующее
Попробуй вставить в Word если всё будет ок, значит проблема в текстовом редакторе, какая-то экзотическая кодировка. Если проблема не исчезнет - прикрепляй проект к сообщению.
 

Alex1983

Разработчик
Сообщения
913
Симпатии
442
#5
Проблема почти решена, но хочется знать причину.
Суть состоит в том, если я Набираю подряд, то есть
Код:
C:\Новая Папка
то проблемы нет.
А если набираю с начало название попки (Новая Папка), А затем прехожу и набираю C:\, то проблема в кодировке?
 

Вложения

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,844
Симпатии
5,586
#6
название какой попки? :biggrin: учиться надо, а не клубничку смотреть. :sarcastic:

А если набираю с начало название папки (Новая Папка), А затем прехожу и набираю C:\, то проблема в кодировке?
Если честно, проблему не могу воспроизвести, все сделал как понял, написал - Новая папка возврат каретки в начало и приписал C:\, скопировал во все поля и блокнот. Скрин прилагаю.

8876b60e10dc.png

Если доработаешь проект, то получится хорошая вещь. :good2:

Присваивание лишнее
Код:
   AnsiString S = " QuarantineFile('','');";
   Memo2->Lines->Add(S);
Можно всё делать напрямую.
Код:
   Memo2->Lines->Add(" QuarantineFile('','');");
Немного "доработал" интерфейс, поля лучше делать изменяемыми, а не фиксироваными, используй Splitter
 

Alex1983

Разработчик
Сообщения
913
Симпатии
442
#7
Если честно, проблему не могу воспроизвести, все сделал как понял, написал - Новая папка возврат каретки в начало и приписал C:\, скопировал во все поля и блокнот. Скрин прилагаю.
Проблема скорее всего, сам не знаю в чем. Даже при копирование комментария (который в коде) тоже самое выходит
Код:
if(FileExists(str)) // Ïðîâåðÿåì, åñòü ëè ôàéë? Â ïåðåìåííîé str áóäåò ïðèìåðíî òàêîé òåêñò - C:\Program Files\Borland\CBuilder6\Projects\VirusNet.txt
название какой попки? учиться надо, а не клубничку смотреть.
Сам не знаю как вышло?:unknw::D

P.S. Может кодировку в текстовом редакторе надо где то поменять?


поля лучше делать изменяемыми, а не фиксированными, используй Splitter
С двумя окнами Memo я знаю как работать, а вот когда три я не знаю (пока) какому окну какое условие ставить?
 
Последнее редактирование:

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,844
Симпатии
5,586
#8
Попробуй применить такой твик и перезагрузи систему, посмотри что получится. Сохрани файл в Code.reg и запусти на выполнение, согласись с внесением информации в реестр.
Код:
Windows Registry Editor Version 5.00

;Поддержка русской кодировки
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"
"1253"="c_1251.nls"
"1254"="c_1251.nls"
"1255"="c_1251.nls"
"1256"="c_1251.nls"
"1257"="c_1251.nls"
 

Alex1983

Разработчик
Сообщения
913
Симпатии
442
#9
Попробуй применить такой твик и перезагрузи систему, посмотри что получится. Сохрани файл в Code.reg и запусти на выполнение, согласись с внесением информации в реестр.
Не помогло:unknw:

Добавлено через 37 минут 20 секунд
Немного "доработал" интерфейс, поля лучше делать изменяемыми, а не фиксироваными, используй Splitter
Drongo, а ты не мог бы описать по подробнее как все сделал, а то я пробую ни как не получается?
 

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,844
Симпатии
5,586
#10
Alex1983, Попробуй ещё сохранить файл .cpp в кодировке OEM(866) - открой файл в блокноте и пересохрани его.

Drongo, а ты не мог бы описать по подробнее как все сделал, а то я пробую ни как не получается?
1. Создали проект, пустая форма
2. Кидаем 1-й компонент Panel - в свойстве Align устанавливаем alRight
3. Кидаем компонент Splitter - в свойстве Align устанавливаем alRight
4. Кидаем 2-й компонент Panel - в свойстве Align устанавливаем alClient
5. на 1-ю компоненту Panel кидаешь 1-й компонент Memo и в свойстве Align устанавливаешь alTop
6. на 1-ю компоненту Panel кидаешь опять Splitter и в свойстве Align устанавливаешь в положение alTop
7. на 1-ю компоненту Panel кидаешь 2-й компонент Memo и в свойстве Align устанавливаешь alClient
8. На 2-ю компоненту Panel кидаешь 3-й компонент Memo и в свойстве Align указываешь alClient
 

Alex1983

Разработчик
Сообщения
913
Симпатии
442
#11
Alex1983, Попробуй ещё сохранить файл .cpp в кодировке OEM(866) - открой файл в блокноте и пересохрани его.
Не помогло.
Думаю причина в том, что я устанавливал NotePad++ и еше какую то программу( прога которая изменяет кодировку, когда мы видем в логе путь на русском языке, а в логе этот путь одна белеберда. Но я не помню ее название. Drongo как раз ты мне давал ссылку на её скачивание. )скорее всего они, что то натворил в кодировке.

1. Создали проект, пустая форма
2. Кидаем 1-й компонент Panel - в свойстве Align устанавливаем alRight
3. Кидаем компонент Splitter - в свойстве Align устанавливаем alRight
4. Кидаем 2-й компонент Panel - в свойстве Align устанавливаем alClient
5. на 1-ю компоненту Panel кидаешь 1-й компонент Memo и в свойстве Align устанавливаешь alTop
6. на 1-ю компоненту Panel кидаешь опять Splitter и в свойстве Align устанавливаешь в положение alTop
7. на 1-ю компоненту Panel кидаешь 2-й компонент Memo и в свойстве Align устанавливаешь alClient
8. На 2-ю компоненту Panel кидаешь 3-й компонент Memo и в свойстве Align указываешь alClient
А за это Александр огромное спасибо.
 
Последнее редактирование:

Alex1983

Разработчик
Сообщения
913
Симпатии
442
#13
Давно уже снес. Остаток может какой то остался.
 
Сверху Снизу