Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2008, 20:16   #1
nnova
 
Регистрация: 02.11.2008
Сообщений: 5
По умолчанию Как передать в TEdit подстроку под курсор

Добрый день, не нашел на форуме. Проблема такая:
1)При нажатии на TButton1 в TEdit передается, например, символ "а", при нажатии на TButton2 передается символ "б", но так что бы символы добавлялись в то место, где стоит(стоял до потери фокуса) курсор edit'a.
--
Если можно с кодом, спасибо за помощь.
nnova вне форума Ответить с цитированием
Старый 02.11.2008, 21:10   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Текущая позиция курсора равна Edit.SelStart. Эту величину нужно отслеживать в событиях EditChange, EditMouseUp, EditKeyUp и хранить в глобальной переменной.
Так вы всегда будете знать позицию курсора в Edit.
mihali4 вне форума Ответить с цитированием
Старый 03.11.2008, 18:33   #3
nnova
 
Регистрация: 02.11.2008
Сообщений: 5
По умолчанию

Решено. Все дело было в том что я использовал TButton, который снимает фокус с TEdit и устанавливает на себя. А SelStart и SelLenght теряют смысл (устанавливаются в 0) после потери фокуса. Решением было сменить TButton на TSpeedButton. Код, кому интересно, такой:

procedure TfmMain.SpeedButton1Click(Sender: TObject);
var
tmp: String;
i: Word;
pos: Word;
begin
pos := Edit1.SelStart;
for i := 1 to Edit1.SelStart do
tmp := tmp + Edit1.Text[i];
tmp := tmp + 'w';
if Edit1.SelStart < Length(Edit1.Text) then
for i := Edit1.SelStart + 1 to Length(Edit1.Text) do
tmp := tmp + Edit1.Text[i];
Edit1.Text := tmp;
Edit1.SelStart := pos + Length('w');
end;
nnova вне форума Ответить с цитированием
Старый 03.11.2008, 18:50   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А вот так - с простым TButton
Код:
procedure TForm1.Button1Click(Sender: TObject);
var tmp,tmpedit: string;
    oldedpos: integer;
begin
oldedpos:=Edit1.SelStart;
tmp:='A';
tmpedit:=Edit1.Text;
Insert(tmp, tmpedit, oldedpos+1);
Edit1.Text:=tmpedit;
Edit1.SetFocus;
Edit1.SelLength:=0;
Edit1.SelStart:=oldedpos+1;
end;
Какая разница - уходит фокус с эдита или нет?
mihali4 вне форума Ответить с цитированием
Старый 04.11.2008, 03:23   #5
nnova
 
Регистрация: 02.11.2008
Сообщений: 5
По умолчанию

mihali4, а ты случаем не в курсе, как узнать где стоит курсор на веб-странице (на каком INPUT,e), загруженной в TWebBrowser. Как получить handle этого input'a ???
nnova вне форума Ответить с цитированием
Старый 05.11.2008, 05:01   #6
nnova
 
Регистрация: 02.11.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от nnova Посмотреть сообщение
mihali4, а ты случаем не в курсе, как узнать где стоит курсор на веб-странице (на каком INPUT,e), загруженной в TWebBrowser. Как получить handle этого input'a ???
Сам написал сам и отвечу: накопал в MSDN такой код:
Когда документ уже загружен, OnDocumentComplete, в обработчике пишем:

// Нужно получить handle 2го уровня
//из окна TWebBrowser

global myHandle: Thandle;
-----
var h: THandle;
begin
h:=GetWindow(myWebbrowse.Handle, GW_CHILD); // Это уровень 1
h:=GetWindow(h, GW_CHILD); // а это уже 2
myHandle:=h;
end;

Далее myHandle уже можно использовать в SendMessage. Правда насколько я понял такой прием не будет работать с фреймами. И еще одна проблема: я хочу что бы по щелчку кнопки добавлялся новый page в pageControl и соответственно программно рождался новый TWebBrowser. Вот тут опять возникает тот же вопрос, как получить handle активного элемента, поиск GW_CHILD уже ни чего не дает для 2 го уровня. Вопрос знатокам...? Как вообще корректно решить this?
nnova вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать параметр? Иллидан Общие вопросы Delphi 8 12.07.2008 12:57
Как удалить из строки подстроку по маске ? - fenix - Помощь студентам 4 23.04.2008 15:04
Как передать указатель в процедуру??? kate4ka Общие вопросы Delphi 1 17.03.2008 12:49
Поставить курсор в конец строки в TEdit Никки Общие вопросы Delphi 2 17.03.2008 00:27
Как передать объект по наследству Legat Win Api 6 03.11.2007 11:19