Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 18

Улучшение текстового редактора

28.12.2009, 15:49. Показов 5704. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как обычно нужна помощь, учител сказал чтоб в текстовом редакторе открывался файл если его просто перетащить на окно, прошу помочь, как это реализовать и чем??
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.12.2009, 15:49
Ответы с готовыми решениями:

Создание текстового редактора
Добрый день господа программисты. Прошу помочь написать текстовый редактор. Ну так вот,я написал основной скелет редактора. Благодаря...

Многократное undo для текстового редактора
операця undo для текстового редактора хотя бы 5 раз.

День добрый по функциям текстового редактора подскажите
День добрый по функциям текстового редактора подскажите Наипростейших редактор с одним полем мемо пара кнопок ну и меню в котором теже...

23
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
28.12.2009, 16:39
Здесь тебе в помощь будет технология Drag and Drop. Почитай про неё.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
28.12.2009, 16:46
Лучший ответ Сообщение было отмечено как решение

Решение

NAqpAN9I, Это пишешь в файле .h после секции public, только сам public и private из примера не копируй, это как для ориентации что и где писать...
C++
1
2
3
4
5
6
7
8
9
10
...
private:    // User declarations
        void __fastcall WmDropFiles(TWMDropFiles& Message);
        void __fastcall ReadFile(AnsiString FileName);
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WmDropFiles)
END_MESSAGE_MAP(TForm);
};
Это пишешь в файле .cpp в обработчике OnCreate
C++
1
DragAcceptFiles(Handle, true); // Разрешаем перетаскивание файлов
И собственно, описываем фукнции
void __fastcall WmDropFiles(TWMDropFiles& Message);
void __fastcall ReadFile(AnsiString FileName);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
...
// Перетаскиваем файлы. Создаём события--------------------------------------
void __fastcall TForm1::WmDropFiles(TWMDropFiles& Message)
{
   HDROP drop_handle = (HDROP)Message.Drop;
   char fName[MAXPATH];
   int filenum = DragQueryFile(drop_handle, -1, NULL, NULL);
   for(int i = 0; i < filenum; i++){
      DragQueryFile(drop_handle, i, fName, MAXPATH);
      ReadFile(fName);
     }
   DragFinish(drop_handle);
}
// После перетаскивания, вычисляем расширения и открываем файл в RichEdit-----
void __fastcall TForm1::ReadFile(AnsiString FileName)
{
   AnsiString str = ExtractFileExt(FileName);
   if((str == ".txt")||(str == ".rtf"))
      RichEdit1->Lines->LoadFromFile(FileName);
}
 
...
4
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 18
28.12.2009, 17:31  [ТС]
Цитата Сообщение от Maestrino Посмотреть сообщение
char fName[MAXPATH];
компилятор ругается к этой строке, говорит что MAXPATH не известный символ....
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
28.12.2009, 19:48
Цитата Сообщение от NAqpAN9I Посмотреть сообщение
компилятор ругается к этой строке, говорит что MAXPATH не известный символ....
C++
1
#include <dir.h>
0
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 18
28.12.2009, 19:51  [ТС]
аааа...паксибки)
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
27.02.2010, 12:42
Вот такой вот ребята вопрос интересен. Появилась необходимость перетаскиванием открывать два файла. На форме есть RichEdit1 и RichEdit2, перетаскиваются два файла, пусть это будут файлы с расширением .txt и .log, нужно чтобы .txt открылся в RichEdit1, а .log в RichEdit2.
Использую такой код, представлен ниже, но он открывает только один файл, даже если перетягиваешь два. Что и как нужно изменить, чтобы открывалось два файла методом перетаскивания. Спасибо.


Файл .h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//---------------------------------------------------------------------------
 
#ifndef Analitic1H
#define Analitic1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Dialogs.hpp>
#include <ExtCtrls.hpp>
#include "XPManifest.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TRichEdit *RichEdit1;
        TRichEdit *RichEdit2;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall WmDropFiles(TWMDropFiles& Message);
        void __fastcall ReadFile(AnsiString FileName);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WmDropFiles)
END_MESSAGE_MAP(TForm);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Файл .cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <dir.h>
...
// Инициализация приложения--------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    DragAcceptFiles(Handle, true); // Разрешаем перетаскивание файлов
}
// Перетаскиваем файлы. Создаём события--------------------------------------
void __fastcall TForm1::WmDropFiles(TWMDropFiles& Message)
{
   HDROP drop_handle = (HDROP)Message.Drop;
   char fName[MAXPATH];
   int filenum = DragQueryFile(drop_handle, -1, NULL, NULL);
   for(int i = 0; i < filenum; i++){
      DragQueryFile(drop_handle, i, fName, MAXPATH);
      ReadFile(fName);
     }
   DragFinish(drop_handle);
}
// После перетаскивания, вычисляем расширения и открываем файл в RichEdit-----
void __fastcall TForm1::ReadFile(AnsiString FileName)
{
   AnsiString str = ExtractFileExt(FileName);
   if((str == ".txt") || (str == ".log")){
      RichEdit1->Lines->LoadFromFile(FileName);
     }
}


Добавлено через 22 часа 5 минут
Решил самостоятельно, правда придумал вот так. Функцию ReadFile подредактировал. Поскольку первый файл должен загрузиться в RichEdit1, то проверяем, если RichEdit1 пустой - значит первый файл открываем в нём, второй файл, записываем в RichEdit2.

C++
1
2
3
4
5
6
7
8
9
10
11
12
// После перетаскивания, вычисляем расширения и открываем файл в RichEdit-----
void __fastcall TForm1::ReadFile(AnsiString FileName)
{
   AnsiString str = ExtractFileExt(FileName);
   if((str == ".htm") || (str == ".xml")){
      if(RichEdit1->Lines->Text == "")  // Вот такая проверка на пустой RichEdit1
         RichEdit1->Lines->LoadFromFile(FileName);
      else
         RichEdit2->Lines->LoadFromFile(FileName);
     }
}
//---------------------------------------------------------------------------
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
22.04.2010, 15:46
Друзья, в общем помогите правильно сделать так, чтобы два файла .xml и .htm открывались каждый в своём окне, но не методом перетаскивания, а через OpenDialog. С загрузкой одного файла, я знаю как.
C++
1
2
3
4
5
6
7
8
9
...
// Загрузить ------------------------------------------------------------
void __fastcall TForm1::N5Click(TObject *Sender)
{
   if(OpenDialog1->Execute()){
      ReadFile(OpenDialog1->FileName);
     }
}
...
Но загрузить два файла через диалоговое окно выбора файлов не знаю как. Хотя установил свойство OpenDialog - Options - ofAllowMultiSelect = true. Файлы выделяются, но загружается только один, стоящий первым из нескольких выделеных. В идеале, хотелось бы чтобы эти файлы, загруженые через OpenDialog обрабатывались функцией ReadFile
C++
1
2
3
4
5
6
7
8
9
10
11
12
...
// После перетаскивания, вычисляем расширения и открываем файл в RichEdit-----
void __fastcall TForm1::ReadFile(AnsiString FileName)
{
   AnsiString str = ExtractFileExt(FileName);
   if(str == ".htm"){
      RichEdit1->Lines->LoadFromFile(FileName);
   else if(str == ".xml")
      RichEdit2->Lines->LoadFromFile(FileName);
     }
}
...
По логике, нужно каким-то образом узнавать сколько файлов было выделено и загружено, а далее передавать их поочерёдно функции ReadFile. Но я незнаю, как это сделать?
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
23.04.2010, 17:38
Maestro,
Цитата Сообщение от Maestro Посмотреть сообщение
сколько файлов было выделено и загружено
OpenDialog1->Files->Count
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    //OpenDialog1->Options << ofAllowMultiSelect;
 
    if ( OpenDialog1->Execute() )
    {
        int fCount = OpenDialog1->Files->Count;
 
        ShowMessage ("Количество выбранных файлов == " + IntToStr(fCount));
 
        for (int i = 0; i < fCount; ++i)
        ShowMessage ( OpenDialog1->Files->Strings[i].c_str() );
    }
}
//---------------------------------------------------------------------------
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
23.04.2010, 20:04
mirso, Спасибо. Так совсем получилось красиво. Бомба!
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
10.03.2011, 12:53
темка довольно старая, но все же придется поднять ее.

сделал все как написано в 3-м посте, и ничего не работает
ошибок не выдает, и соответственно ничего не показывает и не открывает.

вот вопрос, как заставить их работать ?
мне нужно что бы при перетаскивании в область Panel1 в Edit1 вставлялся полный путь к файлу.

C++
1
2
3
4
void __fastcall TForm1::ReadFile(AnsiString FileName)
{
      Edit1->Text = ExtractFilePath(FileName) + ExtractFileName(FileName);
}
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
10.03.2011, 15:20
Наверное так.
C++
1
2
3
4
void __fastcall TForm1::ReadFile(AnsiString FileName)
{
   Edit1->Text = ExpandFileName(FileName);
}
1
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
10.03.2011, 15:29
вот ведь странная програмка...

я понял чё я накрутил не так:

я вместо:
C++
1
DragAcceptFiles(Handle, true);
написал
C++
1
DragAcceptFiles(Panel1->Handle, true);
Но написано это был оумышленно, для того что бы ограничить область драгдропа.
и как то непонятно тогда, если оставить первый вариант разрешения, то все прокрассно работает, но файл можно вкинуть в любую область формы. А во втором случае файл можно вкинуть только в область панели, но блин ничего не происходит в итоге
0
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 4
24.05.2011, 01:05
Maestro,
извините у меня такой вопрос к вам:
по поводу улучшения текстового редактора
у меня 2 форми ви би не могли помоч у меня видает такую ошибку:
[ILINK32 Error] Error: Unresolved external '__fastcall TForm1::WmDropFiles(Messages::TWMDropFil es&)' referenced from D:\STUDENT\FEI-11\DOV\ZXZC\WORD PAD\DEBUG\UNIT1.OBJ
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
24.05.2011, 04:35
функцию удалил, прототип в заголовочном файле остался
удалить объектные файлы, сделать Build
0
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 4
24.05.2011, 15:50
а в какой unit нужно писать код????
0
0 / 0 / 1
Регистрация: 11.06.2012
Сообщений: 40
24.06.2012, 02:19
А как открыть несколько файлов? Чтобы их (в данном примере) содержимое добавлялось в одну одно место?)
Т.е. например перетащил два файла "1.txt", "2.txt" с содержанием "1" и "2" соответственно, а я хочу чтобы в Memo1-> добавилось "1\n2" или что-то в этом роде

Добавлено через 28 минут
Всё разобрался =)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
24.06.2012, 05:40
Maximbl4, Правила,
п.4.10. Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме - есть и другие люди, которые столкнутся с той же проблемой и им поможет ваш ответ.
0
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 35
19.10.2015, 20:24
Цитата Сообщение от Maestro Посмотреть сообщение
DragQueryFile(drop_handle, i, fName, MAXPATH);
Помогите пожалуйста. Компилятор ругается в этой строчке.

[bcc32 Error] Unit1.cpp(36): E2034 Cannot convert 'char[260]' to 'wchar_t *'
[bcc32 Error] Unit1.cpp(36): E2342 Type mismatch in parameter 'lpszFile' (wanted 'wchar_t *', got 'char *')
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,910
Записей в блоге: 12
19.10.2015, 20:28
Новый Билдер (начиная с 2009) и Юникодный проект? Замени
C++
1
2
3
4
5
// char fName[MAXPATH];
// на такое описание:
TCHAR fName[MAXPATH];
// или на такое:
wchar_t fName[MAXPATH]; // но это хуже, с TCHAR-ом лучше будет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2015, 20:28
Помогаю со студенческими работами здесь

Текстовый редактор - исходник текстового редактора типа WordPad
есть у кого исходник текстового реадтора типу WordPad? в папке с программой я нашол в EXAMPLES , но там я не розобралса с еитим язиками...

Вывести количество строк, слов и символов текстового редактора
Всем добрый день. Подскажите пожалуйста. У меня есть текстовый редактор, внизу Мемо находится лейбал. Мне нужно чтобы в этом TLabel...

Возникла трудная задачка при создании текстового редактора
возникла проблема с сохранением файлов...например, если создаю новый документ и сохраняю его в формате *.txt , то открывая созданный файл в...

Работа текстового редактора
Привет. Скажите как работает редактор текста (именно элемент EditBox). Я вообще не шарю как это может работать, ну типа: наверно,...

Исходник текстового редактора
Здравствуйте. Есть у кого исходник текстового редактора на QT? Нужен простой редактор, с возможностью ввода и функциями правки в меню,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru