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

Тема в разделе "Другие языки программирования", создана пользователем Alex1983, 12 дек 2010.

  1. Alex1983
    Оффлайн

    Alex1983 Разработчик

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

    Есть один вариант
    Код (Text):

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

    Drongo Ассоциация VN/VIP Разработчик

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

    Код (Text):
    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("Такого файла нет!");
    }
     
    2 пользователям это понравилось.
  3. Alex1983
    Оффлайн

    Alex1983 Разработчик

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

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.905
    Симпатии:
    8.222
    Попробуй вставить в Word если всё будет ок, значит проблема в текстовом редакторе, какая-то экзотическая кодировка. Если проблема не исчезнет - прикрепляй проект к сообщению.
     
  5. Alex1983
    Оффлайн

    Alex1983 Разработчик

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

    Вложения:

  6. Drongo
    Оффлайн

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.905
    Симпатии:
    8.222
    название какой попки? :biggrin: учиться надо, а не клубничку смотреть. :sarcastic:

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

    8876b60e10dc.png

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

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

    Alex1983 Разработчик

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

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


    С двумя окнами Memo я знаю как работать, а вот когда три я не знаю (пока) какому окну какое условие ставить?
     
    Последнее редактирование: 17 дек 2010
  8. Drongo
    Оффлайн

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.905
    Симпатии:
    8.222
    Попробуй применить такой твик и перезагрузи систему, посмотри что получится. Сохрани файл в Code.reg и запусти на выполнение, согласись с внесением информации в реестр.
    Код (Text):
    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"
     
    2 пользователям это понравилось.
  9. Alex1983
    Оффлайн

    Alex1983 Разработчик

    Сообщения:
    852
    Симпатии:
    523
    Не помогло:unknw:

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

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.905
    Симпатии:
    8.222
    Alex1983, Попробуй ещё сохранить файл .cpp в кодировке OEM(866) - открой файл в блокноте и пересохрани его.

    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
     
    2 пользователям это понравилось.
  11. Alex1983
    Оффлайн

    Alex1983 Разработчик

    Сообщения:
    852
    Симпатии:
    523
    Не помогло.
    Думаю причина в том, что я устанавливал NotePad++ и еше какую то программу( прога которая изменяет кодировку, когда мы видем в логе путь на русском языке, а в логе этот путь одна белеберда. Но я не помню ее название. Drongo как раз ты мне давал ссылку на её скачивание. )скорее всего они, что то натворил в кодировке.

    А за это Александр огромное спасибо.
     
    Последнее редактирование: 17 дек 2010
  12. Drongo
    Оффлайн

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.905
    Симпатии:
    8.222
    Bred. Возможно, снеси её тогда.
     
    2 пользователям это понравилось.
  13. Alex1983
    Оффлайн

    Alex1983 Разработчик

    Сообщения:
    852
    Симпатии:
    523
    Давно уже снес. Остаток может какой то остался.
     

Поделиться этой страницей