<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=204050&amp;view=findpost&amp;p=1708616</guid>
        <pubDate>Tue, 25 Sep 2007 15:53:29 +0000</pubDate>
        <title>цвет в чужом RichEdit</title>
        <link>https://forum.sources.ru/index.php?showtopic=204050&amp;view=findpost&amp;p=1708616</link>
        <description><![CDATA[uk-: работает спасибо :)]]></description>
        <author>uk-</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=204050&amp;view=findpost&amp;p=1708141</guid>
        <pubDate>Tue, 25 Sep 2007 11:05:25 +0000</pubDate>
        <title>цвет в чужом RichEdit</title>
        <link>https://forum.sources.ru/index.php?showtopic=204050&amp;view=findpost&amp;p=1708141</link>
        <description><![CDATA[Rouse_: Не знаю поможет ли или нет, я в принципе все закомментировал. Разбирайся:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">////////////////////////////////////////////////////////////////////////////////</div><div class="code_line">//</div><div class="code_line">// &nbsp;****************************************************************************</div><div class="code_line">// &nbsp;* Unit Name : RemoteRichEditDemo</div><div class="code_line">// &nbsp;* Purpose &nbsp; : Демо работы с уделенным RichEdit на примере WordPad</div><div class="code_line">// &nbsp;* Author &nbsp; &nbsp;: Александр (Rouse_) Багель</div><div class="code_line">// &nbsp;* Copyright : © Fangorn Wizards Lab 1998 - 2007</div><div class="code_line">// &nbsp;* Version &nbsp; : 1.00</div><div class="code_line">// &nbsp;* Home Page : http://rouse.drkb.ru</div><div class="code_line">// &nbsp;****************************************************************************</div><div class="code_line">//</div><div class="code_line">&nbsp;</div><div class="code_line">unit RemoteRichEditDemo;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button1: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button1Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;ShellAPI, RichEdit;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;PROCESS_BASIC_INFORMATION = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;ExitStatus: DWORD;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PebBaseAddress: Pointer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;AffinityMask: DWORD;</div><div class="code_line">&nbsp;&nbsp; &nbsp;BasePriority: DWORD;</div><div class="code_line">&nbsp;&nbsp; &nbsp;uUniqueProcessId: Ulong;</div><div class="code_line">&nbsp;&nbsp; &nbsp;uInheritedFromUniqueProcessId: Ulong;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;PEnumWindowsProcParam = ^TEnumWindowsProcParam;</div><div class="code_line">&nbsp;&nbsp;TEnumWindowsProcParam = record</div><div class="code_line">&nbsp;&nbsp; &nbsp;PID: DWORD;</div><div class="code_line">&nbsp;&nbsp; &nbsp;AResult: DWORD;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">function &nbsp;NtQueryInformationProcess(</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessHandle : THandle;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessInformationClass : Byte;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessInformation : Pointer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessInformationLength : ULONG;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ReturnLength : PULONG</div><div class="code_line">&nbsp;&nbsp;): DWORD; stdcall; external &#39;ntdll.dll&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure RemoteRichViewDemo;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;function EnumWindowsProc(AWnd: THandle; AParam: LPARAM): BOOL; stdcall;</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwProcessID: DWORD;</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetWindowThreadProcessId(AWnd, dwProcessID);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if dwProcessID = PEnumWindowsProcParam(AParam)^.PID then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SetLastError(0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;PEnumWindowsProcParam(AParam)^.AResult := AWnd;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Result := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Result := True;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;ProcessBasicInformation = 0;</div><div class="code_line">&nbsp;&nbsp;SampleText = &#39;Тестовая строка в удаленном RichEdit&#39;;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;ExecuteInfo: SHELLEXECUTEINFOA;</div><div class="code_line">&nbsp;&nbsp;Info: PROCESS_BASIC_INFORMATION;</div><div class="code_line">&nbsp;&nbsp;RichViewHandle: THandle;</div><div class="code_line">&nbsp;&nbsp;EnumWindowsProcParam: TEnumWindowsProcParam;</div><div class="code_line">&nbsp;&nbsp;CharFormat: TCharFormat;</div><div class="code_line">&nbsp;&nbsp;pCharFormat: Pointer;</div><div class="code_line">&nbsp;&nbsp;dwBytesWriten: DWORD;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;// Запускаем процесс Вордпада</div><div class="code_line">&nbsp;&nbsp;ZeroMemory(@ExecuteInfo, SizeOf(SHELLEXECUTEINFOA));</div><div class="code_line">&nbsp;&nbsp;ExecuteInfo.cbSize := SizeOf(SHELLEXECUTEINFOA);</div><div class="code_line">&nbsp;&nbsp;ExecuteInfo.lpFile := &#39;wordpad.exe&#39;;</div><div class="code_line">&nbsp;&nbsp;ExecuteInfo.fMask := SEE_MASK_NOCLOSEPROCESS;</div><div class="code_line">&nbsp;&nbsp;ExecuteInfo.nShow := SW_SHOWNORMAL;</div><div class="code_line">&nbsp;&nbsp;if not ShellExecuteEx(@ExecuteInfo) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;RaiseLastOSError;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Получаем его PID</div><div class="code_line">&nbsp;&nbsp;if NtQueryInformationProcess(ExecuteInfo.hProcess,</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessBasicInformation, @Info, SizeOf(Info), nil) &#60;&#62; NO_ERROR then</div><div class="code_line">&nbsp;&nbsp; &nbsp;RaiseLastOSError;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Немного подождем, пока инициализируются окна процесса</div><div class="code_line">&nbsp;&nbsp;Sleep(100);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Ищем его TopLevel окно</div><div class="code_line">&nbsp;&nbsp;ZeroMemory(@EnumWindowsProcParam, SizeOf(TEnumWindowsProcParam));</div><div class="code_line">&nbsp;&nbsp;EnumWindowsProcParam.PID := Info.uUniqueProcessId;</div><div class="code_line">&nbsp;&nbsp;EnumWindows(@EnumWindowsProc, Integer(@EnumWindowsProcParam));</div><div class="code_line">&nbsp;&nbsp;if EnumWindowsProcParam.AResult = 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;RaiseLastOSError;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Теперь ищем само окно RichView-а</div><div class="code_line">&nbsp;&nbsp;RichViewHandle :=</div><div class="code_line">&nbsp;&nbsp; &nbsp;FindWindowEx(EnumWindowsProcParam.AResult, 0, &#39;RICHEDIT50W&#39;, nil);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Пишем в нем текст</div><div class="code_line">&nbsp;&nbsp;SendMessage(RichViewHandle, WM_SETTEXT, 0, Integer(@SampleText[1]));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Выделяем буквы с девятой по пятнадцатую</div><div class="code_line">&nbsp;&nbsp;SendMessage(RichViewHandle, EM_SETSEL, 9, 15);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Далее начинаем работать с паямятью удаленного процесса</div><div class="code_line">&nbsp;&nbsp;// т.к. EM_SETCHARFORMAT требует указатель на буффер</div><div class="code_line">&nbsp;&nbsp;// Если не прописать его в удаленное АП, процесс рухнет.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Выделяем память под структуру</div><div class="code_line">&nbsp;&nbsp;pCharFormat := VirtualAllocEx(ExecuteInfo.hProcess, nil, SizeOf(TCharFormat),</div><div class="code_line">&nbsp;&nbsp; &nbsp;MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);</div><div class="code_line">&nbsp;&nbsp;if pCharFormat &#60;&#62; nil then</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Для изменения стиля выделенного текста</div><div class="code_line">&nbsp;&nbsp; &nbsp;// необходимо заполнить соответствующую структуру</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Сначала делаем кусок текста жирным</div><div class="code_line">&nbsp;&nbsp; &nbsp;ZeroMemory(@CharFormat, SizeOf(TCharFormat));</div><div class="code_line">&nbsp;&nbsp; &nbsp;CharFormat.cbSize := SizeOf(TCharFormat);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CharFormat.dwMask := CFM_BOLD;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CharFormat.dwEffects := CFE_BOLD;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Теперь необходимо ее переместить в память удаленного процесса</div><div class="code_line">&nbsp;&nbsp; &nbsp;if not WriteProcessMemory(ExecuteInfo.hProcess,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;pCharFormat, @CharFormat,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SizeOf(TCharFormat), dwBytesWriten) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;RaiseLastOSError;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Вот теперь все готово для изменения стиля текста,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// отправляем сообщение для изменения</div><div class="code_line">&nbsp;&nbsp; &nbsp;SendMessage(RichViewHandle, EM_SETCHARFORMAT,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SCF_SELECTION, Integer(pCharFormat));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// теперь по аналогии сделаем другой</div><div class="code_line">&nbsp;&nbsp; &nbsp;// кусок текста подчеркнутым и красным</div><div class="code_line">&nbsp;&nbsp; &nbsp; SendMessage(RichViewHandle, EM_SETSEL, 28, 36);</div><div class="code_line">&nbsp;&nbsp; &nbsp; CharFormat.dwMask := CFM_UNDERLINE or CFM_COLOR;</div><div class="code_line">&nbsp;&nbsp; &nbsp; CharFormat.dwEffects := CFE_UNDERLINE;</div><div class="code_line">&nbsp;&nbsp; &nbsp; CharFormat.crTextColor := clRed;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if not WriteProcessMemory(ExecuteInfo.hProcess,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;pCharFormat, @CharFormat,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SizeOf(TCharFormat), dwBytesWriten) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;RaiseLastOSError;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SendMessage(RichViewHandle, EM_SETCHARFORMAT,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SCF_SELECTION, Integer(pCharFormat));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Освобождаем ранее выделенную память</div><div class="code_line">&nbsp;&nbsp; &nbsp;VirtualFreeEx(ExecuteInfo.hProcess, pCharFormat, 0, MEM_RELEASE);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Ставим курсор в начало текста и любуемся результатом</div><div class="code_line">&nbsp;&nbsp;SendMessage(RichViewHandle, EM_SETSEL, 0, 0);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;RemoteRichViewDemo;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Rouse_</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=204050&amp;view=findpost&amp;p=1708110</guid>
        <pubDate>Tue, 25 Sep 2007 10:47:56 +0000</pubDate>
        <title>цвет в чужом RichEdit</title>
        <link>https://forum.sources.ru/index.php?showtopic=204050&amp;view=findpost&amp;p=1708110</link>
        <description><![CDATA[uk-: а где именно исходники его? не нашёл <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2007-09-25T10:48:22+00:00">25.09.07, 10:48</time></span></span><br>
всмысле на компе]]></description>
        <author>uk-</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=204050&amp;view=findpost&amp;p=1706063</guid>
        <pubDate>Sun, 23 Sep 2007 16:56:27 +0000</pubDate>
        <title>цвет в чужом RichEdit</title>
        <link>https://forum.sources.ru/index.php?showtopic=204050&amp;view=findpost&amp;p=1706063</link>
        <description><![CDATA[Smike: VCL поставляется с исходными текстами, можно посмотреть коды реализации методов RichEdit. Они вроде как основаны на том же механизме хендлов и сообщений, как и все WinApi.]]></description>
        <author>Smike</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=204050&amp;view=findpost&amp;p=1706018</guid>
        <pubDate>Sun, 23 Sep 2007 15:27:26 +0000</pubDate>
        <title>цвет в чужом RichEdit</title>
        <link>https://forum.sources.ru/index.php?showtopic=204050&amp;view=findpost&amp;p=1706018</link>
        <description><![CDATA[uk-: здраствуйте<br>подскажите пдлст. как в чужом RichEdit поменять у кусочка текста цвет.. выделить и...?]]></description>
        <author>uk-</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      </channel>
      </rss>
	