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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение цвета выделенного текста в RichEdit 
:(
    Опции темы
Burich-Caeser
Дата 29.9.2005, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Снова непонятки с RichEdit. Пытался менять цвет так:
Код

  LockWindowUpdate(hRichedit);
  SendMessage(hRichEdit,em_setsel,Range.cpMin ,Range.cpMax);
  SendMessage(hRichEdit,EM_GetCharFormat,Integer(true),longint(@CharFormat));
  CharFormat.cbSize :=sizeof(charformat);
  CharFormat.dwMask :=CFM_Color;
  CharFormat.crTextColor :=3;
  SendMessage(hRichEdit,em_setcharformat,SCF_WORD or SCF_SELECTION,longint(@Charformat));
  SendMessage(hRichEdit,em_setsel,pos,pos);
  LockWindowUpdate(0);

Ничего хорошего не вышло. В открытых VCL аналогичный код.
Кто знает, помоготе, пожалуйста.
--------------------
Ты брошен вниз силой судьбы,Ты унижен и раздавлен,Время забыть то, кем ты был,Но помнить, кем ты стал...
PM MAIL   Вверх
Pakshin A. S.
Дата 29.9.2005, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

  RichEdit1.SelAttributes.Color:=clRed;

Добавлено @ 21:08
Черт... это же в WinApi тема... smile

Это сообщение отредактировал(а) Girder - 10.10.2005, 13:59
PM   Вверх
Vex
Дата 29.9.2005, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

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



попробуй так:

Код

 LockWindowUpdate(hRichedit);    
  SendMessage(hRichEdit,em_setsel,Range.cpMin ,Range.cpMax);    
  SendMessage(hRichEdit,EM_GetCharFormat,Integer(true),longint(@CharFormat));    
  CharFormat.cbSize :=sizeof(charformat);    
  CharFormat.dwMask :=CFM_Color;    
  CharFormat.crTextColor :=3;    
  SendMessage(hRichEdit,em_setcharformat,SCF_WORD or SCF_SELECTION,longint(@Charformat));    
  SendMessage(hRichEdit,em_exsetsel,0,longint(@Charformat));    
  SendMessage(hRichEdit,em_hideselection,false,false);
  LockWindowUpdate(0);
  



--------------------
Слава Україні.
PM   Вверх
Vex
Дата 30.9.2005, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

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



Вот, держи исходник. Выделяешь текст, а потом нажимаешь на кнопку (она сразу под текстом, ее не видно, но она существует smile ) Извини за не аккуратность, мне завтра рано вставать, думаю ты разберешься smile

Код

program SelectTextInRichEdit ;

uses
  QDialogs,  Windows,
  SysUtils, Classes,
  Controls, Forms, Dialogs,
   Messages,  Variants,  Graphics,
   Buttons, StdCtrls, ComCtrls, ImgList, RichEdit;

const
 RichId = 10;


var
  wc : TWndClassEx;
  MainWnd, RichWnd : HWND;
  Mesg : TMsg;
  hRichDll: HINST;
  CharFormat: TCharFormat;
  Button1:HWND;


function WindowProc(wnd:HWND; Msg : Integer; wParam:wParam; lParam:lParam):lResult; stdcall;
begin
  case msg of
    WM_DESTROY: begin
      PostQuitMessage(0);
      Exit; 
      Result:=0;
    end; 
    WM_SIZE: begin 
      MoveWindow(RichWnd, 0, 0, LoWord(lParam), HiWord(lParam), False);
      Result:=DefWindowProc(wnd,msg,wparam,lparam);
    end;
    WM_ACTIVATE: begin 
      Result:=DefWindowProc(wnd,msg,wparam,lparam); 
      SetFocus(RichWnd);
    end;

    WM_COMMAND: begin

     //**********************
    // òóò ìû è ìåíÿåì öâåò
    //*********************
if LoWord( wParam ) = 0 then begin

 LockWindowUpdate(RichWnd);

  SendMessage(RichWnd,EM_GetCharFormat,Integer(true),longint(@CharFormat));
  CharFormat.cbSize :=sizeof(charformat);
  CharFormat.dwMask :=CFM_Color;
  CharFormat.crTextColor :=clRed;
  SendMessage(RichWnd,em_setcharformat,SCF_WORD or SCF_SELECTION,longint(@Charformat));
  SendMessage(RichWnd,em_exsetsel,0,longint(@Charformat));
  SendMessage(RichWnd,em_hideselection,0,0);
  LockWindowUpdate(0);
end;
     end;


  else
    Result:=DefWindowProc(wnd,msg,wparam,lparam);
  end;

End;

var R: tRect;
begin 
  hRichDll := LoadLibrary('RICHED20.DLL');
  if hRichDll = 0 then exit;
  try
    with wc do begin
      cbSize := sizeof(wc);
      style := cs_hredraw or cs_vredraw;
      lpfnWndProc := @WindowProc;
      cbClsExtra := 0; 
      cbWndExtra := 0;
      hInstance := HInstance;
      hIcon := LoadIcon(0,idi_application);
      hCursor := LoadCursor(0,idc_arrow);
      hbrBackground := COLOR_BTNFACE+1;
      lpszMenuName := nil;
      lpszClassName := 'WinMin : Main';
    end;


    RegisterClassEx(wc);
    MainWnd := CreateWindowEx (0,'WinMin : Main','Win Min',
    WS_OVERLAPPEDWINDOW,500,100,400,100,0,0,Hinstance,nil);
   GetClientRect(MainWnd, R);

    Button1 := CreateWindowEx( WS_EX_STATICEDGE, 'Button', 'Button1', WS_VISIBLE or WS_CHILD,
10, 20, 90, 40, MainWnd, 0, hInstance, nil );



    RichWnd := CreateWindowEx (WS_EX_STATICEDGE,'RichEdit20W','idjkjhfdhsf dhfkdh kdsh fkdsh fkdsfd',
      WS_VISIBLE or WS_CHILD,
     100, 100,100, 100,MainWnd,RichID,Hinstance,nil);





    ShowWindow(MainWnd,SW_NORMAL);
    ShowWindow(Button1,SW_NORMAL);
    SetFocus(Button1);





 //********************
 //if (Mesg.message = WM_CHAR) and (Mesg.hwnd = REWnd) then begin



//end;
 //********************
         while GetMessage(Mesg,0,0,0) do begin




      TranslateMessage(Mesg);
      DispatchMessage(Mesg);
    end;


  finally
    FreeLibrary(hRichDll);
  end;
end.



--------------------
Слава Україні.
PM   Вверх
Burich-Caeser
Дата 30.9.2005, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Vex сПАсибище. Попробую разобраться. smile
--------------------
Ты брошен вниз силой судьбы,Ты унижен и раздавлен,Время забыть то, кем ты был,Но помнить, кем ты стал...
PM MAIL   Вверх
Burich-Caeser
Дата 1.10.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Vex Странно, работает только в одно выделение. Подкрасить два отдельных слова, оставив между ними черный не получается smile


lonely delphist Спасибо, в VCL я знаю. Проблема в том, что надо через АПИ.
--------------------
Ты брошен вниз силой судьбы,Ты унижен и раздавлен,Время забыть то, кем ты был,Но помнить, кем ты стал...
PM MAIL   Вверх
Vex
Дата 2.10.2005, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

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




Код

WM_COMMAND: begin
if LoWord( wParam ) = 0 then begin
  LockWindowUpdate(RichWnd);
  SendMessage(RichWnd,EM_GetCharFormat,Integer(true),longint(@CharFormat));
  CharFormat.cbSize :=sizeof(charformat);
  CharFormat.dwMask :=CFM_Color;
  CharFormat.crTextColor :=clRed;
  SendMessage(RichWnd,em_setcharformat,SCF_WORD or SCF_SELECTION,longint(@Charformat));
  SendMessage(RichWnd,em_exsetsel,0,longint(@Charformat));
 SendMessage(RichWnd,em_hideselection,0,0);
 LockWindowUpdate(0);


добавь:

Код

Charformat.cbSize:=0;




--------------------
Слава Україні.
PM   Вверх
Burich-Caeser
Дата 3.10.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Vex Прошу прощения за глупый вопрос, но почему 0, а не размер структуры. Всегда срабатывал второй вариант.
--------------------
Ты брошен вниз силой судьбы,Ты унижен и раздавлен,Время забыть то, кем ты был,Но помнить, кем ты стал...
PM MAIL   Вверх
Vex
Дата 3.10.2005, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

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



Цитата(Burich @ 3.10.2005, 18:57)
Vex Прошу прощения за глупый вопрос, но почему 0, а не размер структуры. Всегда срабатывал второй вариант.

по моему проблема где-то здесь:
Код

 CharFormat.cbSize :=sizeof(charformat);


вот, кстати интересная загадка smile
Буратине дали три яблока. Два он съел. Сколько яблок осталось у Буратины?
Думаете одно? Нифига … Оказывается — ответа нет. Никто же не знает сколько у него уже было яблок до этого…
Мораль — обнуляйте переменные

smile

Цитата
Всегда срабатывал второй вариант.

Только что проверил, не сработал...
Добавлено @ 19:34
Может ты меня не правильно понял, Charformat.cbSize:=0; добавь в конец, а не вместо CharFormat.cbSize :=sizeof(charformat);

вот так должно быть:

Код

WM_COMMAND: begin    
if LoWord( wParam ) = 0 then begin    
  LockWindowUpdate(RichWnd);    
  SendMessage(RichWnd,EM_GetCharFormat,Integer(true),longint(@CharFormat));    
  
CharFormat.cbSize :=sizeof(charformat);    

  CharFormat.dwMask :=CFM_Color;    
  CharFormat.crTextColor :=clRed;    
  SendMessage(RichWnd,em_setcharformat,SCF_WORD or SCF_SELECTION,longint(@Charformat);
  SendMessage(RichWnd,em_exsetsel,0,longint(@Charformat));    
 SendMessage(RichWnd,em_hideselection,0,0);    
 LockWindowUpdate(0);


CharFormat.cbSize :=0;    





--------------------
Слава Україні.
PM   Вверх
Burich-Caeser
Дата 5.10.2005, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Vex Урреу, все работает как надо. Спасибо большое.
--------------------
Ты брошен вниз силой судьбы,Ты унижен и раздавлен,Время забыть то, кем ты был,Но помнить, кем ты стал...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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