Форум: "WinAPI";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
ВнизRichEdit 2.0 Найти похожие ветки
← →
Sfagnum (2003-09-26 13:50) [0]Как с помощью CreateWindowEx создать RichEdit на форме, в MSDN написано что класс RICHEDIT_CLASS - Designates a Rich Edit 2.0 control, но ниже приведённая строка ни хрена не показывает
wndText := CreateWindowEx(0, "RICHEDIT_CLASS","",WS_VISIBLE or WS_CHILD or WS_TABSTOP or WS_BORDER or ES_MULTILINE , 15, 10, 270, 25,wndMain,0,hInstance,nil);
подскажите, направте...
← →
MBo (2003-09-26 14:00) [1]а библиотеку RICHED20.DLL загружаешь?
← →
Sfagnum (2003-09-26 14:04) [2]мдяяя.... нет :)
← →
Sfagnum (2003-09-26 14:57) [3]загрузил. вроде...
не идёт вот весь текст
program WinMin ;
uses
windows, messages;
var
wc : TWndClassEx;
MainWnd, REWnd : HWND;
Mesg : TMsg;
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
else Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
End;
var R: tRect;
begin
if LoadLibrary("RICHED20.DLL") = 0 then exit;
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,cw_UseDefault,cw_UseDefault,cw_UseDefault,cw_UseDefault,0,0,Hinstance,nil);
ShowWindow(MainWnd,CmdShow);
GetClientRect(MainWnd, R);
REWnd := CreateWindowEx (WS_EX_CLIENTEDGE,"RICHEDIT_CLASS","",ws_child,R.left, R.top,R.right - R.left, R.bottom - R.top,0,0,Hinstance,nil);
ShowWindow(REWnd,CmdShow);
while GetMessage(Mesg,0,0,0) do begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end.
← →
nikkie (2003-09-26 15:12) [4]в дебагере посмотри какой получается REWnd. насколько я вижу, ты ему при создании не указываешь parent - поэтому и не создается он.
и еще - логичнее создавать сразу со силем WS_VISIBLE, а не вызывать потом ShowWindow (да еще с параметром CmdShow). а показывать основное окно после того, как созданы все его дети.
← →
Sfagnum (2003-09-26 15:25) [5]Между строками
RegisterClassEx(wc);
иwhile GetMessage(Mesg,0,0,0) do begin
переписал на
MainWnd := CreateWindowEx (0,"WinMin : Main","Win Min",ws_overlappedwindow,cw_UseDefault,cw_UseDefault,cw_UseDefault,cw_UseDefault,0,0,Hinstance,nil);
GetClientRect(MainWnd, R);
REWnd := CreateWindowEx (WS_EX_CLIENTEDGE,"RICHEDIT_CLASS","",WS_VISIBLE or ws_child,R.left, R.top,R.right - R.left, R.bottom - R.top,MainWnd,0,Hinstance,nil);
ShowWindow(MainWnd,SW_SHOW);
REWnd = 0 ...
чо не так ?
← →
Sfagnum (2003-09-26 15:56) [6]заменил "RICHEDIT_CLASS" на "RichEdit20A" и всё пошло !?!?!?
← →
clickmaker (2003-09-26 15:59) [7]Что говорит GetLastError ?
← →
Sfagnum (2003-09-26 16:40) [8]The parametr is incorrect - как всегда информативно
← →
Sfagnum (2003-09-26 18:00) [9]У меня ещё несеолько вопросов назрело:
1. Не все показанные сообщения/стили в MSDN"е распознаються в Дельфях, я так понимаю, что их надо объявить через константы, где посмотреть эти значения. Проблемы возникли например со следующим стилем: ES_DISABLENOSCROLL
2. В редакторе Delphi при двойном щелчке на слово содержащее символ "_" выделяеться всё слово, а в RichEdit 2.0 только до этого символа например:
В редаакторе: ES_DISABLENOSCROLL
В RichEdit: ES_ DISABLENOSCROLL
если что-нить встроенное чтобы выделять как в первом случае?
Заранее спасибо
← →
clickmaker (2003-09-26 18:16) [10]ES_DISABLENOSCROLL = $00002000
← →
Sfagnum (2003-09-26 18:30) [11]2 clickmaker
Спасибо, а если не секрет где посмотрел и как это узнать?
← →
clickmaker (2003-09-26 18:34) [12]Delphi6\Source\Rtl\Win\RichEdit.pas
← →
Sfagnum (2003-09-29 13:18) [13]2 clickmaker
Спасибо...
Ещё вопрос...
Как отлавливать нажатие клавиши в RichEdit?
объевляю я всё это безобразие объявляю показываю следующи образом:
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,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0,Hinstance,nil);
GetClientRect(MainWnd, R);
REWnd := CreateWindowEx (WS_EX_CLIENTEDGE,"RichEdit20W","",
WS_VISIBLE or WS_CHILD or WS_BORDER or WS_VSCROLL or ES_NOHIDESEL or ES_AUTOVSCROLL
or ES_MULTILINE or ES_DISABLENOSCROLL or ES_SAVESEL or ES_SUNKEN,
R.left, R.top,R.right - R.left, R.bottom - R.top,MainWnd,0,Hinstance,nil);
в ф-ииfunction WindowProc(wnd:HWND; Msg : Integer; wParam:wParam; lParam:lParam):lResult; stdcall;
сообщения WM_KEYDOWN, WM_CHAR от RichEdit не перехватываються...
Где их надо перехватывать или что надо сделать шоб они перехватывались в WindowProc
← →
Sfagnum (2003-09-29 16:41) [14]Неужели придёться хук юзать?!?!?!?
← →
clickmaker (2003-09-30 13:17) [15]Ну насчет хука - это ты погорячился...
EM_SETEVENTMASK + WM_NOTIFY c извещением EN_MSGFILTER от RichEdit должны помочь
← →
nikkie (2003-09-30 15:36) [16]общая техника в такой ситуации - subclassing. пишешь еще одну REWndProc и
REWndProcOld := SetWindowLong(ReHwnd, GWL_WNDPROC, REWndProc)
в REWndProc не забываешь вызвать REWndProcOld.
конкретно для RichEdit можно, конечно, и EM_SETEVENTMASK.
← →
Sfagnum (2003-09-30 18:56) [17]>Ну насчет хука - это ты погорячился...
эт от тишины... :)
2 clickmaker
потихоньку подплываю к этой мысли, на просторах msdn"а...
2 nikkie
А можно ссылочку на более подродное описание этой техники... желательно с примерами...
Извени за наглую просьбу.
← →
nikkie (2003-09-30 21:11) [18]мог бы и сам на гугле поиск сделать
http://community.borland.com/article/0,1410,16487,00.html
← →
Sfagnum (2003-10-01 12:31) [19]2nikkie
Спасибо
Очередной вопрос...
Как надо задать стиль RichEdit"a, чтобы при пустом окне всё равно были видны полосы прокрутки и чтоб они были активными...
я сейчас использую следующие стили:
WS_VISIBLE or WS_CHILD or WS_BORDER or WS_HSCROLL or WS_VSCROLL or ES_NOHIDESEL or ES_MULTILINE
or ES_AUTOVSCROLL or ES_AUTOHSCROLL or ES_SAVESEL or ES_SUNKEN
причём у меня создалось впечатление, что в присутствии стилейWS_HSCROLL or WS_VSCROLL
стилиES_AUTOVSCROLL or ES_AUTOHSCROLL
лишнии
← →
Sfagnum (2003-10-01 17:22) [20]пошёл по пути clickmaker"а от (30.09.03 13:17)
сделал такую обработку
if (msgF^.msg = WM_KEYDOWN) and (msgF^.wParam = VK_TAB) then
if TabPress then Result := DefWindowProc(Wnd,msg,wPar,lPar) else Result := 0
else Result := DefWindowProc(Wnd,msg,wPar,lPar);
Прога проходит черезResult := 0
и всё равно добавляет TAB не пойму в чём трабла...
← →
clickmaker (2003-10-01 17:46) [21]MSDN:
Return Value
If the control should process the event, the message returns a zero value.
If the control should ignore the event, the message returns a nonzero value
← →
Sfagnum (2003-10-02 10:37) [22]Я наверно что-то плохо понимаю, разве я не так сделал?
но ради экспиремента Result"у присвоил -1 эффект тот же...
Оттуда же
WM_NOTIFY Message
Return Value
The return value is ignored except for notification messages that specify otherwise.
А переписываеться ли возвращаемое значение или игнорируеться?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c