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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выделенный текст, как узнать выделенный текст 
:(
    Опции темы
Artik
Дата 10.1.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня есть мемо, лабел и таймер на форме. В таймере я получаю хендл активного окна, заголовок вишу в лабел. Дальше надо из этого активного окна получить выделенный текст (если он вообще там есть). Думаю надо узнать хендл активного компонента, но как? И я не знаю, как получить именно выделенный текст, а не весь. Помогите плиз
Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
 str:array[0..255] of char;
begin
HWN := Windows.GetForegroundWindow;
Getwindowtext(HWN,@str,256);
Label1.Caption:=str;
// дальше нужна помощь
end;


PM MAIL WWW   Вверх
Rennigth
Дата 10.1.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 15
Всего: 76



Artik, 
AttachThreadInput + GetFocus


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Artik
Дата 11.1.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Можно кодом плиз, чтобы вставить в мой вышенаписанный. Я не писал бы в этом разделе если бы хорошо разбирался в Делфи 
PM MAIL WWW   Вверх
Rennigth
Дата 11.1.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 15
Всего: 76



Цитата(Artik @  11.1.2008,  13:31 Найти цитируемый пост)
Можно кодом плиз, чтобы вставить в мой вышенаписанный. Я не писал бы в этом разделе если бы хорошо разбирался в Делфи  

вот накатал примерчик.
Код

unit Unit25;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm25 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  end;

var
  Form25: TForm25;

implementation

{$R *.dfm}

//function GetThreadId(hThread: THandle): DWORD; stdcall; external 'Kernel32.dll';

procedure TForm25.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := true;
end;

procedure TForm25.Timer1Timer(Sender: TObject);
var
  hFrgdWnd, hFocusWnd: HWND;
  dwThreadID, dwCurThreadID, dwProcessID: DWORD;
  hThread: THandle;
  pText: PChar;
begin
  hFrgdWnd := GetForegroundWindow;
  dwCurThreadID := GetCurrentThreadId;
  if (hFrgdWnd > 0) and (dwCurThreadID > 0) then
  begin
    dwThreadID := GetWindowThreadProcessId(hFrgdWnd, dwProcessID);
    if dwThreadID > 0 then
    begin
      if dwThreadID <> dwCurThreadID then
        AttachThreadInput(dwThreadID, dwCurThreadID, True);

      hFocusWnd := GetFocus;
      if hFocusWnd > 0 then
      begin
        pText := GetMemory(MAX_PATH);
        try
          GetWindowText(hFocusWnd, pText, MAX_PATH);
          ShowMessage(pText);
        finally
          FreeMemory(pText);
        end;
      end;
      if dwThreadID <> dwCurThreadID then
        AttachThreadInput(dwThreadID, dwCurThreadID, False);
    end;
  end;

end;

end.



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Artik
Дата 17.1.2008, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да этот код работает, но маленько не так, проверить очень просто, открываем обычный блокнот, и прога не видит текст в нём :( 
Я помню раньше тыкал как примат, тупо меняя значения и прочие в своём коде после Label1.Caption:=str; с функциями FindWindowEx либо EnumChildWindows. Может лучши их использовать, с ними у меня хотябы в блокноте работало, но увы в нём и только в нём :( 
Текст я так-же брал Getwindowtext(HWN,@str,256);
PM MAIL WWW   Вверх
Alexzz
Дата 19.1.2008, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.4.2007
Где: Латвия

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



Цитата
И я не знаю, как получить именно выделенный текст, а не весь.

У всяких там редакторов типа Tedit или TLabeledEdit есть такие свойства как .Selstart и .Sellength, из которых можно получить начало и длину выделенного фрагмента. Ну и если .SelLength=0 то соответственно ничего не выделено, а SelStart просто указывает на курсор.

Это сообщение отредактировал(а) Alexzz - 19.1.2008, 03:50
PM WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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