Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-05-17

Редактор текста [Delphi7] [WinXP]

Приветствую.

Передо мной стоит задача: написать что-то типа Delphi'йского code editor'а,
только в очень упрощённой форме.

Основные требования к редактору:
1. Сделать, чтобы можно было работать со строками текста как в Delphi т.е. в
Delphi, например, можно переместить курсор на произвольное место в в строке,
независимо от того написан ли там текст или же нет.
2. Сделать "подсветку синтаксиса" к определённым словам (чтобы они
выделялись bold'ом и/или цветом).
3. Сделать, чтобы в редакторе был шрифт Counter New и сделать так, чтобы
если пользователь вставляет кусок текста, который напран шрифтом Arial
(например), то чтобы этот текст вставлялся шрифтом Counter New. Вобщем,
чтобы всё было шрифтом Counter New.
4. Сделать, чтобы если при неподвижном курсоре мыши пользователь набирает
текст, то курсор мыши никуда не исчезал (он пропадает куда-то если
использовать RichEdit).

Вобщем требуется, чтобы редактор был максимально похож на code editor для
Delphi.

Я пытался разобраться с компонетом RichEdit, но по этому компоненту мне не
хватило справки, а пример, который входит в Delphi не удовлетворяет
требуемым условиям. Поэтому и застрял практически на всех пунктах.
Или может быть именно для написания таких редакторов нужно использовать
специальные компонеты, а не RichEdit?
Подскажите пожалуйста.

С уважением, Lakmus
ICQ - 241479153
www.nvkz.net/lakmus

Номер выпуска : 4500
Возраст листа : 604 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/369259
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-05-17 22:00:44 (#369259)

Re[3]: Перехват MessageBox-сообщений

Приветствую!

>Мне нужна нарисовать свое окно с контролами. И оно не будет зависеть от
темы и скинов Винды. Мне это не надо да и не важно... Я >делаю аналог
окон Балонов, на подобие тех, которые показывает Агент
>(Помощник) в Офисе.

А зачем вообще перехватывать сообщения? Не проще ли:
1) переопределить AfxMessageBox, задав новую функцию, например,
MyMessageBox - и вызывать именно ее?
2) ловить и обрабатывать исключения, выдавая опять-таки сообщения через
MyMessageBox?

С уважением, Ольга.

Номер выпуска : 4499
Возраст листа : 604 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/369258
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-05-17 22:00:27 (#369258)

Delhi - ValueListEditor

Здравствуйте програмеры!

Подскажите, как при програмном изменении ячейки сохранить в ней фокус
ввода и снять выделение с текста.

   2005-05-17 21:55:39 (#369252)

Re[3]: Proxies.pas

Здравствуйте, GENEMI,

G> А как подключить DesignIDE.dcp? я думал что надо подключать через
G> 'uses' но через можно подключать только pas файлы или как?
Честно говоря не помню, но это было в описании пакета устанавливаемого
компонента. Или его нету в описании, тогда нужно добавить, или если
есть, тогда должно пойти!

   2005-05-17 14:02:39 (#368976)

Re[2]: Proxies.pas

...::: Приветствую, Шистеров Павел :::...

А как подключить DesignIDE.dcp? я думал что надо подключать через
'uses' но через можно подключать только pas файлы или как?

ШП> "Это обычная ситуация для Delphi6. Добавьте в части использования
ШП> ссылку на DesignIDE.dcp. Не забудьте также указать в опциях пакета
ШП> 'Design time only' и 'Rebuild as needed' - это касается в том числе
ШП> любой другой версии Delphi (начиная с D3). "

= = = = = = = = = = = = = = = = = = = =
...::: by GENEMI :::...

Номер выпуска : 4496
Возраст листа : 604 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/368955
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-05-17 13:36:35 (#368955)

Re[4]: Перехват MessageBox-сообщений

Здравствуйте, Victor.

В письме mid:20050516210408.3685***@c*****.subscribe
Вы писали 16 мая 2005 г. в 19:58:49 [GMT +2:00]:

>> Мне нужна нарисовать свое окно с контролами. И оно не будет зависеть
>> от темы и скинов Винды. Мне это не надо да и не важно...
>> Я делаю аналог окон Балонов, на подобие тех, которые показывает Агент
>> (Помощник) в Офисе.

Я все-таки нашел, как перехватывать API функции.
Если кому интересно, ниже код для перехвата MessageBoxA.
В примере берется Блокнот для перехвата, он он почему у меня отказался
работать. Но если вместо Блокнота использовать другую прогу, то все
ОК. Одно только "но", здесь перехватывается вся функция, т.е. вместо
вызова MessageBoxA можно подставить любую другую свою функцию.
А мне бы еще как-то узнать передаваемые параметра в MessageBoxA и их
потом юзать. Может кто-нибудь знает как это делается ?

library MyMessageBoxDLL;

uses
SysUtils, Windows, Messages, Classes;

{$R *.RES}
type
TImageImportDescriptor=packed record
OriginalFirstThunk : DWORD;
TimeDateStamp : DWORD;
ForwarderChain : DWORD;
Name : DWORD;
FirstThunk : DWORD;
end;
PImageImportDescriptor=^TImageImportDescriptor;

PPointer = ^Pointer;

var filename:array[0..max_path-1] of char;
hook:HHook=0;
PEHeader:PImageNtHeaders;
ImageBase:cardinal;

function MyHookProcedure(hWnd: HWND; lpText, lpCaption: PWideChar; uType: UINT):
Integer;
stdcall;
begin
result:=MessageBoxA(0, 'Notepad', 'my hook', 0);
//Но уже через нашу табл. импорта
end;

procedure ProcessImports(PImports:PImageImportDescriptor);
Var
PImport:PImageImportDescriptor;
PRVA_Import:LPDWORD;
ProcAddress:pointer;
Temp_Cardinal:cardinal;

begin{1}
ProcAddress:=GetProcAddress(GetModuleHandle('USER32.DLL'), 'MessageBoxA');
PImport:=PImports;
while PImport.Name<>0 do
begin{2}
PRVA_Import:=LPDWORD(pImport.FirstThunk+ImageBase);
while PRVA_Import^<>0 do
begin{3}
if PPointer(PRVA_Import)^=ProcAddress
then
begin{4}
VirtualProtect(PPointer(PRVA_Import),4,PAGE_READWRITE,Temp_Cardinal);
PPointer(PRVA_Import)^:=@MyHookProcedure; //пишем свою...
VirtualProtect(PPointer(PRVA_Import),4,Temp_Cardinal,Temp_Cardinal);
end;{1}
Inc(PRVA_Import);
end;{2}
Inc(PImport);
end;{3}
end;{4}

procedure DllEntryPoint(reson:longint);stdcall;
begin
case reson of
DLL_PROCESS_ATTACH:
begin
DisableThreadLibraryCalls(hInstance);
ZeroMemory(@FileName, SizeOf(FileName));
GetModuleFileName(GetModuleHandle(nil), @FileName, SizeOf(FileName));
if Pos('MSAGENT.EXE',AnsiUpper(FileName))<>0 then //сейчас я хочу попробовать
все это дело надо нотепадом
begin
ImageBase:=GetModuleHandle(nil);
PEHeader:=pointer(int64(ImageBase)+PImageDosHeader(ImageBase)._lfanew);//pe
header
ProcessImports(pointer(PEHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress+ImageBase));
end;
end;
end;
end;

function nexthook(code:integer;wParam,lParam:longint):longint;stdcall;
begin
result:=callnexthookex(hook,code,wParam,lParam);
end;

procedure sethook(flag:bool);export; stdcall;
begin
if flag then
hook:=setwindowshookex(wh_getmessage,@nexthook,hInstance,0)
else
begin
unhookwindowshookex(hook);
hook:=0;
end;
end;

exports sethook;

begin
DLLProc:=@DllEntryPoint;
DllEntryPoint(DLL_PROCESS_ATTACH);
end.

Вызов хука из проекта:

var
sethook:procedure(flag:bool)stdcall;
hDll:hModule;

begin
hDll:=LoadLibrary('MyMessageBoxDLL.dll');
@sethook:=GetProcAddress(hDll, 'sethook');
sethook(true);
messagebox(0,'Не закрывай, пока идет работа','MyMessageBox Test',0);
sethook(false);
FreeLibrary(hDll);
end;

   Feniks 2005-05-17 12:31:43 (#368909)

Re: RAS Disconnect DialUp

> Delphi
> Функция Disconnect: Boolean - разрывает активное DialUp соединение
> Написана, используя библиотеку RAS
> ОС: WinXp, Win98 - работает
> Win2k SP4 - не работает, и в чем проблема не найду!

Блин. А GetLastError() не учили вызывать?? Код ошибки-то скажи!

--
С уважением, boroda
mailto:boroden***@s*****.ru

Номер выпуска : 4494
Возраст листа : 604 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/368829
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   Шматко А.А. 2005-05-17 11:46:22 (#368829)