Текущий архив: 2003.07.07;
Скачать: CL | DM;
Вниз
Наследник TMemo Найти похожие ветки
← →
BlackSun (2003-06-23 15:07) [0]Вопрос по наследованию. Есть TMemo. Задача - сделать так, чтобы при наведении
на Memo не менялся курсор, нельзя было бы вообще ничего выделять и не было бы
видно мигающего курсора.
Enabled:=false не подходит, потому что текст становится серым.
Помогите, как надо провести наследование...
Не надо говорить, чтобы использовать другой компонент и т.п. Задача
интересна в плане обучения.
← →
Семен Сорокин (2003-06-23 15:30) [1]для начала переписать CreateParams
← →
BlackSun (2003-06-24 08:42) [2]В CreateParams я смог изменить только курсор. Но как сделать, чтобы когда Enabled:=false, то цвет выводимого текста был черным, а не серым? Неужели никто не знает?
← →
Song (2003-06-24 09:07) [3]Перекрывай его отрисовку. Вообще, если ты спрашиваешь, как такое сделать, то скорей всего, пока рано тебе это делать.
← →
Sha (2003-06-24 12:43) [4]BlackSun © (23.06.03 15:07)
Положи TMemo на TPanel, у которой Enabled=false.
← →
BlackSun (2003-06-24 15:21) [5]Ну пробовал я перекрывать его отрисовку, и чего? Мне придется самому все рисовать, учитывая, что есть всякие Scrollbar"ы...
Мне всего-лишь надо цвет поменять, а рисует он пусть сам...
Идеальным вариантом было бы, чтобы он не реагировал на нажатия мыши, пробовал писать событие для мыши, но все равно компонент реагировал и на мое событие и на другое.
И вообще, я прошу советов, но не в плане "тебе еще рано". Извините, а у кого же тогда учиться, если каждый будет говорить "думай сам"... это же форум, если я не ошибаюсь? По-моему тут помогать должны... а не отшивать.
2Sha:
Фишка с TMemo+TPanel - конечно классно... но есть одно "но"... хотелось бы, чтобы можно было листать текст вверх-вниз...
← →
Семен Сорокин (2003-06-24 15:26) [6]BlackSun © (24.06.03 15:21)
Убери Color из published и задавай его хоть зеленым
← →
Ru (2003-06-24 15:35) [7]Пpи установке ReadOnly у TMemo остается куpсоp, хотелось бы и его убpать.
Создаём наследника:
unit UnReL;
interface
uses comctrls, Windows, Messages, SysUtils, Classes, Controls, Forms, ShellAPI, stdctrls;
type
TLRichEdit = class(TMemo)
private
procedure WMPaint(var Msg: TMessage); message WM_Paint;
procedure WMSetFocus(var Msg: TMessage); message WM_SetFocus;
procedure WMNCHitTest(var Msg: TMessage); message WM_NCHitTest;
PROCEDURE WMKEYDOWN(VAR Message: TMessage); message WM_KEYDOWN;
end;
implementation
procedure TLRichEdit.WMPaint;
begin
inherited;
HideCaret(Handle);
end;
procedure TLRichEdit.WMSetFocus;
begin
inherited;
HideCaret(Handle);
end;
procedure TLRichEdit.WMNCHitTest;
begin
inherited;
HideCaret(Handle);
end;
PROCEDURE TLRichEdit.WMKEYDOWN(VAR Message: TMessage);
VAR Key: Integer;
begin
Key:= Message.WParamLo;
if Key = vk_Up then
begin
Perform(EM_SCROLL, SB_LINEUP, 0);
Key:= 0;
end;
if Key = vk_Down then
begin
Perform(EM_SCROLL, SB_LINEDOWN, 0);
Key:= 0;
end;
inherited;
HideCaret(Handle);
end;
end.
Видимо хочется мемо как в листере Тотала? :)
← →
BlackSun (2003-06-24 17:22) [8]Спасибо всем за советы, особенно Ru
Вот как выглядит именно то, что я хотел...
unit NewMemo;
interface
uses comctrls, Windows, Messages, SysUtils, Classes, Controls, Forms, ShellAPI, stdctrls;
type
TLRichEdit = class(TMemo)
private
procedure WMPaint(var Msg: TMessage); message WM_Paint;
procedure WMSetFocus(var Msg: TMessage); message WM_SetFocus;
procedure WMNCHitTest(var Msg: TMessage); message WM_NCHitTest;
PROCEDURE WMKEYDOWN(VAR Message: TMessage); message WM_KEYDOWN;
procedure CreateParams(var Params: TCreateParams); override;//добавил
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Standard", [TLRichEdit]);
end;
procedure TLRichEdit.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WindowClass.hCursor := LoadCursor(0, IDC_ARROW);
end;
procedure TLRichEdit.WMPaint;
begin
inherited;
HideCaret(Handle);
end;
procedure TLRichEdit.WMSetFocus;
begin
// inherited; //изменил
HideCaret(Handle);
end;
procedure TLRichEdit.WMNCHitTest;
begin
inherited;
HideCaret(Handle);
end;
PROCEDURE TLRichEdit.WMKEYDOWN(VAR Message: TMessage);
VAR Key: Integer;
begin
Key:= Message.WParamLo;
if Key = vk_Up then
begin
Perform(EM_SCROLL, SB_LINEUP, 0);
Key:= 0;
end;
if Key = vk_Down then
begin
Perform(EM_SCROLL, SB_LINEDOWN, 0);
Key:= 0;
end;
inherited;
HideCaret(Handle);
end;
end.
← →
Ru (2003-06-24 17:33) [9]>BlackSun © (24.06.03 17:22)
не за что, это я подсмотрел ;)
Страницы: 1 вся ветка
Текущий архив: 2003.07.07;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.007 c