Модераторы: Vitalik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Drag&Drop в SynMemo 
:(
    Опции темы
igoreka
Дата 27.3.2009, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день
Необходимо что бы при Drag&Drop вставка шла на место указанное курсором мыши
в RichEdit это работает нормально

Код

void __fastcall TForm1::RichEdit1DragOver(TObject *Sender, TObject *Source,
      int X, int Y, TDragState State, bool &Accept)
{
// Accept = Source = ListBox1;
TPoint P;
P = Point(X, Y);                     
result =  SendMessage(RichEdit1->Handle, EM_CHARFROMPOS,(WPARAM)0, (LPARAM)(POINTL*)&P );
//Caption=result;
RichEdit1->SelStart=result;
RichEdit1->SetFocus();
}


В SynMemo result = 65ххх (точно число не помню) и не изменяется

(SynMemo на форме создается динамически во время выполнения программы )

Как решить эту проблему?

Заранее благодарен

PM MAIL   Вверх
igoreka
Дата 30.3.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



основная проблема решена

единственно не знаю как правиль спозицианировать курсор, пока написал 
Код

SynEdit1->SetFocus();
TPoint p;
p=Point(X,Y);
SynEdit1->CaretXY = BufferCoord(p.x/10,p.y/10)

как правильно указать положение кусора?
PM MAIL   Вверх
Crw
Дата 30.3.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



SynEdit1->CaretX = X;
SynEdit1->CaretY = Y;
PM MAIL   Вверх
igoreka
Дата 31.3.2009, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Crw @ 30.3.2009,  20:26)
SynEdit1->CaretX = X;
SynEdit1->CaretY = Y;

то же самое что и SynEdit1->CaretXY = BufferCoord(X,Y)
при малейшем движении мыши курсор бегает по всему полю
я так понимаю надо разделить на высоту (ширину) шрифта, но с этим проблема
PM MAIL   Вверх
Crw
Дата 31.3.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не сразу понял что надо из экранных координат перегнать в позицию курсора.
Попробуй воспользоваться функцией SynEdit'а
function DisplayToBufferPos(const p: TDisplayCoord): TBufferCoord;
PM MAIL   Вверх
igoreka
Дата 1.4.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за ответ
function DisplayToBufferPos(const p: TDisplayCoord): TBufferCoord;

можно премер как эту функцию использовать, метод науч. тыка не помог


PM MAIL   Вверх
Crw
Дата 1.4.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

procedure TForm1.SynEditMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  dcr:SynEditTypes.TDisplayCoord;
  bcr:TBufferCoord;
begin
  dcr:=SynEdit.PixelsToRowColumn(x,y);
  bcr:=SynEdit.DisplayToBufferPos(dcr);
  SynEdit.CaretXY:=bcr;
end;

PM MAIL   Вверх
igoreka
Дата 2.4.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile Спасибо! То что нужно!

прада не смог перевести на С++

 dcr:SynEditTypes.TDisplayCoord;
  bcr:TBufferCoord;

на
TBufferCoord bcr;
пишет 
[C++ Error] Unit1.cpp(221): E2015 Ambiguity between 'TBufferCoord' and 'Synedittypes::TBufferCoord'

пришлось без промежуточных
NewSynMemo[PageControl1->ActivePageIndex]->CaretXY =NewSynMemo[PageControl1->ActivePageIndex]->DisplayToBufferPos(NewSynMemo[PageControl1->ActivePageIndex]->PixelsToRowColumn(X,Y));  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема »


 




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


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

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