Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
1

проблема с RichEdit

03.08.2009, 01:02. Показов 4275. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сразу скажу я пишу на winapi.Вот в чем проблема я в диалоге вставил RichEdit но программа не показывает это окно , но когда я его удаляю из rc файла и компилирую прогу то окно показывается. В чем проблема. Вот еще один вопрос как в RichEdit загрузить rtf файл ? Первый фопрос приоритетней!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.08.2009, 01:02
Ответы с готовыми решениями:

Проблема с RichEdit'ом и кнопкой
Здравствуйте. Пишу небольшой текстовый редактор. Только начал учить winapi. MSDN читал. Не понял в...

В поле RichEdit удалить html-теги; при вставке в RichEdit замена старого текста на новый
Всем привет! помогите пожалуйста с написание кода на две процедуры : - В поле RichEdit удалить...

Из RichEdit в RichEdit без потери форматирования
Есть RichEdit1 с форматированным текстом(цвет, стиль и тп.) нужно передать этот текст в переменную...

RichEdit
\\Надо получить в одной строке два значения (№счёт и через пробел значение переменой х) При...

6
59 / 31 / 15
Регистрация: 30.05.2009
Сообщений: 234
05.08.2009, 20:25 2
В Delphi надо добавить вот это:
Delphi
1
procedure InitCommonControls; stdcall; external 'comctl32.dll';
или модуль Uses Commctrl.
А при вызове окна вот это:InitCommonControls;
0
10 / 10 / 0
Регистрация: 25.07.2009
Сообщений: 41
05.08.2009, 21:28 3
Цитата Сообщение от Crazyman Посмотреть сообщение
Сразу скажу я пишу на winapi.Вот в чем проблема я в диалоге вставил RichEdit но программа не показывает это окно , но когда я его удаляю из rc файла и компилирую прогу то окно показывается. В чем проблема.
Как вставил? Это компонент?

Если уж совсем по-виндовому делать, то в Делфи это будет примерно так:

Delphi
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var
  MyWnd: HWND = 0;
  FLibHandle: HModule = 0;
 
procedure TForm1.FormCreate(Sender: TObject);
var f: Integer;
    r: TRect; OldError: integer;
    s: string;
    n: integer;
    ParentWin: HWND;
 
begin
  ParentWin := Handle;
    if FLibHandle = 0 then
  begin
        OldError := SetErrorMode(SEM_NOOPENFILEERRORBOX);
        FLibHandle := LoadLibrary('Riched20.dll');
        if (FLibHandle < HINSTANCE_ERROR) then
            FLibHandle := LoadLibrary('RICHED32.DLL');
        if (FLibHandle < HINSTANCE_ERROR) then
            FLibHandle := 0;
        SetErrorMode(OldError);
    end;
 
  //Create window
    Windows.GetClientRect(ParentWin,r);
    // Create window invisbile, only show when data fully loaded!
    MyWnd:=CreateWindow('RichEdit20A','',WS_CHILD or ES_MULTILINE or ES_READONLY or
                                WS_HSCROLL or WS_VSCROLL or ES_NOHIDESEL,
        r.left,r.top,r.right-r.left,
        r.bottom-r.top,ParentWin,0,HInstance,nil);
    if MyWnd = 0 then
        MyWnd:=CreateWindow('RichEdit','',WS_CHILD or ES_MULTILINE or ES_READONLY or
                                WS_HSCROLL or WS_VSCROLL or ES_NOHIDESEL,
        r.left,r.top,r.right-r.left,
        r.bottom-r.top,ParentWin,0,HInstance,nil);
    if MyWnd <> 0 then
  begin
        SendMessage(MyWnd, EM_SETMARGINS, EC_LEFTMARGIN, 8);
        SendMessage(MyWnd, EM_SETEVENTMASK, 0, ENM_UPDATE); //ENM_SCROLL doesn't work for thumb movements!
    //if wraptext then
      SendMessage(MyWnd,EM_SETTARGETDEVICE,0,0);
    //else
    //  SendMessage(MyWnd,EM_SETTARGETDEVICE,0,1);
    //auto urldetection
    PostMessage(MyWnd,EM_AUTOURLDETECT,1,0);
 
 {And there is the second question answer right gere :-) }
    //load text to window
    SetWindowText(MyWnd,PChar(Memo1.Text)); //here can be either RTF or plain text
 
    //make window visible
    ShowWindow(MyWnd,SW_SHOW);
  end;
0
59 / 31 / 15
Регистрация: 30.05.2009
Сообщений: 234
05.08.2009, 22:18 4
Цитата Сообщение от Mechanic Посмотреть сообщение
Как вставил? Это компонент?
Такая ситуация бывает когда окно с компонентом лежит в файле ресурсов и тогда приходится вызывать процедуру InitCommonControls, а иначе окно не появится при его вызове с помощью DialogBox.
0
10 / 10 / 0
Регистрация: 25.07.2009
Сообщений: 41
05.08.2009, 23:50 5
Цитата Сообщение от Nikfel Посмотреть сообщение
Такая ситуация бывает когда окно с компонентом лежит в файле ресурсов и тогда приходится вызывать процедуру InitCommonControls, а иначе окно не появится при его вызове с помощью DialogBox.
Ага. Понятно. Пасиб.
Только ведь это stub, как пишет товарищ <ссылка на форум>. А MSDN вообще говорит, что его нужно вызывать, только если есть манифест, и желание его использовать..

Цитата Сообщение от MSDN
Creating a Rich Edit Control

To create a rich edit control, call the CreateWindowEx function, specifying the rich edit window class. If you are using Microsoft Rich Edit 1.0 (Riched32.dll), specify RichEdit for the window class parameter. If you are using Rich Edit 2.0 or later (Riched20.dll), specify RICHEDIT_CLASS for the window class parameter.

Rich edit controls support most of the window styles used with edit controls as well as additional styles. You should specify the ES_MULTILINE window style if you want to allow more than one line of text in the control. For more information, see Rich Edit Control Styles.

Note To use visual styles with these controls, an application must include a manifest and must call InitCommonControls at the beginning of the program. For information on visual styles, see Visual Styles. For information on manifests, see Enabling Visual Styles.
По-моему, надежнее всяких AfxInitRichEdit2(), и иже с ними, вручную грузить нужную dll'ку, как в примере выше. ;-)

Добавлено через 6 минут 47 секунд
А еще в ресурсах люди ручьями прописывают, какой именно класс контрола нужен! :-)))
<здесь была ссылка на форум>
0
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
06.08.2009, 01:03  [ТС] 6
Скажу по секрету как использовать RichEdit v4.0 он кстате картинки поддерживает!
// загрузка dll с RichEdit v4.0

FLibHandle:= LoadLibrary('msftedit.dll');

CreateWindow('RICHEDIT50W,'', бла бла

данный код был взят из стандартной программы (wordpad) поставляяемой с пиндовс

Добавлено через 4 минуты 16 секунд
Можно давить текст в RichEdit так
Delphi
1
2
3
4
5
6
7
8
9
10
11
var
 EditStream: TEditStream;
 
   begin 
with EditStream do
    begin
      dwCookie := LongInt(pr);
      pfnCallBack := @StreamLoad;
      dwError := 0;
    end;
    SendMessage(hwnd, EM_STREAMIN, SF_RTF, Longint(@EditStream));
1
Yuran007
16.03.2010, 15:56 7
может кто знает как сделать цветную подсветку текста на WinApi с помощью функции RicEdit
16.03.2010, 15:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2010, 15:56
Помогаю со студенческими работами здесь

RichEdit
При нажатии RichEdit1 очищает только 1 строку. RichEdit1-&gt;Lines-&gt;Delete(AutoSize); А...

RichEdit
Как форматировать текст? Как сохранять в doc, htm, rtf, txt?

RichEdit
Здравствуйте! Подскажите, пожалуйста, есть компонент RichEdit в нем есть не большой текст (буквы и...

RichEdit
Есть такая проблема: В RichEdit заносится текст с таблицами и форматированием, все это сохраняется...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru