![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
BidiMode
=BuckLr= © (2008-01-07 23:39:00)Как реализовать для edit контрола? Кто-нибудь знает? Я пробовал SetWindowLong с флагами WS_EX_LEFT, WS_EX_RTLREADING, WS_EX_LEFTSCROLLBAR, WS_EX_LAYOUT_RTL, но это имеет не совсем правильный эффект - каретка находится на противоположной стороне, т.е. так как будто включен обычный режим, не справа - налево.
=BuckLr= (2008-01-10 19:56:00) [1]
> все работает нормально?
Да! Запиши на стикере. Пригодится!
D[u]fa (2008-01-10 16:13:00) [2]т.е после CM_BASE + 60 уже неважно стер текст или нет все работает нормально?
=BuckLr= (2008-01-09 23:47:00) [3]Блин, вот как надо-то было:
const
PFM_ALIGNMENT = $00000008;
EM_SETPARAFORMAT = WM_USER + 71;
var
Paragraph: TParaFormat2;
begin
FillChar(Paragraph, SizeOf(Paragraph), 0);
Paragraph.cbSize := SizeOf(Paragraph);
with Paragraph do
begin
dwMask := PFM_ALIGNMENT;
wAlignment := Ord(raRight) + 1;
end;
SendMessage(MFBox.Handle, EM_SETPARAFORMAT, 0, LPARAM(@Paragraph));
Perform(CM_BASE + 60{CM_BIDIMODECHANGED}, 0, 0);
end;
И всё работает! Подгляел у RxLib
=BuckLr= (2008-01-09 23:28:00) [4]Хотя странно... По идее, винда должна же поддерживать всякие тайские языки... Странно это всё
=BuckLr= (2008-01-09 23:27:00) [5]D[u]fa, слушай сюда :)
Прочитал на Королевстве Делфи ответ на похожий вопрос by Vasily Mulukov:
> К сожалению, у тебя ничего не выйдет - все расширенные свойства окон > и Би-Ди моде поддерживаются только в локализованной (Арабской) версии
> винды.
Так что похоже я делал всё правильно, только вот винда сама не хотела устанавливать эти стили :)
=BuckLr= (2008-01-09 21:52:00) [6]Да, пока сделал так. Но вообще я думаю что VCL делает несколько иначе - я же смотрел исходники. Ну да ладно. Похоже, кроме нас с тобой тема больше никого не интересует, так что закрываем :)
D[u]fa (2008-01-09 15:55:00) [7]дык а чем не нравится способ то? по моему ниче не нормального нету в нем
=BuckLr= (2008-01-09 14:15:00) [8]Ну да... Правда, это костыли. Сейчас ищу способ сделать это средствами api. Ведь на VCL как-то работает...
D[u]fa (2008-01-09 10:49:00) [9]собсно кажись понял... если текст в риче был, а потом сделали алигн и стерли его, то он восстанавливается. попробуй так:
RichEdit1.Clear;
RichEdit1.RE_TextAlign := raRight;
вроде не соскакивает обратно
D[u]fa (2008-01-09 10:48:00) [10]мда.. я вместо того чтоб найти встроенную RE_TextAlign изобрел велосипед))
а как удаляешь весь текст?
=BuckLr= (2008-01-09 01:18:00) [11]Между тем, D[u]fa, это можно было сделать при помощи RE_TextAlign. И имеется недостаток - если сделать такой BidiMode, то всё работает. но стоит только удалить весь текст, как каретка снова становится на левый край. Чувствую, что-то нужно делать не так... По крайней мере на VCL такое можно было сделать (и я делал) перекрытием создания контрола. Блин, ну как же сделать нормальный двунаправленный режим?
=BuckLr= (2008-01-08 22:06:00) [12]Возникла проблема с другой стороны - мне кажется, что не работает TRichFmtArea - raWord. Т.е. если я устанавливаю область форматирования в raWord, то не происходит никаких изменений со словами, на которых расположен курсор. По-моему, глюк KOL
=BuckLr= (2008-01-08 21:30:00) [13]
> Я кроме как картинок через RTF ничего не вставлял
Да вот я тоже :) А в сях оно есть, но только я в сях полный дЭбил
D[u]fa (2008-01-08 21:25:00) [14]=BuckLr=, насчет интерфейс хз даже. Я кроме как картинок через RTF ничего не вставлял =)
=BuckLr= (2008-01-08 21:20:00) [15]Спасибо, D[u]fa. Работает!
=BuckLr= (2008-01-08 19:46:00) [16]К слову, D[u]fa. Ты не знаешь случаем, какие интерфейсы и как использовать для вставки объектов. Если я буду использовать olerichedit - там нужный интерфейс имеется.
D[u]fa (2008-01-08 18:42:00) [17]ну я ж проверил у себя =)
=BuckLr= (2008-01-08 18:41:00) [18]Супер! Сейчас попробую. Спасибо! Надеюсь, это будет работать...
D[u]fa (2008-01-08 18:38:00) [19]тож не сложно:
procedure RE_AlignText2(RichEdit: PControl; alignment: TTextAlign);
var
pf2: PARAFORMAT2;
begin
ZeroMemory(@pf2, SizeOf(pf2));
pf2.cbSize := SizeOf(PARAFORMAT2);
pf2.dwMask := PFM_ALIGNMENT;
pf2.wAlignment := Byte(alignment) + 1;
RichEdit.Perform(EM_SETPARAFORMAT, 0, Integer(@pf2));
end;
procedure TForm1.Button1Click(Sender: PObj);
begin
RE_AlignText2(RichEdit1, taCenter);
end;
=BuckLr= (2008-01-08 18:23:00) [20]В общем... Я оперирую с richedit. там это сложнее... Имеется свойство RE_TextAlign но оно применяется к области форматирования. TextAlign кажется не работает для richedit.