-
Как реализовать для edit контрола? Кто-нибудь знает? Я пробовал SetWindowLong с флагами WS_EX_LEFT, WS_EX_RTLREADING, WS_EX_LEFTSCROLLBAR, WS_EX_LAYOUT_RTL, но это имеет не совсем правильный эффект - каретка находится на противоположной стороне, т.е. так как будто включен обычный режим, не справа - налево.
-
WS_EX_NOINHERITLAYOUT ?
-
> Дмитрий К © (08.01.08 00:38) [1]
>
> WS_EX_NOINHERITLAYOUT ?
Пардон, это я не про то.
У меня каретка отображается справа если подключить манифест.
-
> У меня каретка отображается справа если подключить манифест.
Т.е.? Если установить WS_EX_LEFT, WS_EX_RTLREADING, WS_EX_LEFTSCROLLBAR и WS_EX_LAYOUT_RTL, то при отключенном манифесте каретка будет слева, а при подключенном - справа? Но такого не должно быть! В ВСЛ работает даже без подключенного манифеста.
И ещё. За что отвечает WS_EX_NOINHERITLAYOUT?
-
EditBox.ExStyle := EditBox.ExStyle or WS_EX_RIGHT; ?
-
> EditBox.ExStyle := EditBox.ExStyle or WS_EX_RIGHT;
I tried to do so, but it don't work for me. What about you?
-
=BuckLr=, только что создал МСК проект. кинул на него едитбокс выставил TextAlign на taRight и все нормально. текст справа каретка там же. Прбовал и с манифестом и без него
-
В общем... Я оперирую с richedit. там это сложнее... Имеется свойство RE_TextAlign но оно применяется к области форматирования. TextAlign кажется не работает для richedit.
-
тож не сложно:
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;
-
Супер! Сейчас попробую. Спасибо! Надеюсь, это будет работать...
-
ну я ж проверил у себя =)
-
К слову, D[u]fa. Ты не знаешь случаем, какие интерфейсы и как использовать для вставки объектов. Если я буду использовать olerichedit - там нужный интерфейс имеется.
-
Спасибо, D[u]fa. Работает!
-
=BuckLr=, насчет интерфейс хз даже. Я кроме как картинок через RTF ничего не вставлял =)
-
> Я кроме как картинок через RTF ничего не вставлял
Да вот я тоже :) А в сях оно есть, но только я в сях полный дЭбил
-
Возникла проблема с другой стороны - мне кажется, что не работает TRichFmtArea - raWord. Т.е. если я устанавливаю область форматирования в raWord, то не происходит никаких изменений со словами, на которых расположен курсор. По-моему, глюк KOL
-
Между тем, D[u]fa, это можно было сделать при помощи RE_TextAlign. И имеется недостаток - если сделать такой BidiMode, то всё работает. но стоит только удалить весь текст, как каретка снова становится на левый край. Чувствую, что-то нужно делать не так... По крайней мере на VCL такое можно было сделать (и я делал) перекрытием создания контрола. Блин, ну как же сделать нормальный двунаправленный режим?
-
мда.. я вместо того чтоб найти встроенную RE_TextAlign изобрел велосипед))
а как удаляешь весь текст?
-
собсно кажись понял... если текст в риче был, а потом сделали алигн и стерли его, то он восстанавливается. попробуй так:
RichEdit1.Clear;
RichEdit1.RE_TextAlign := raRight;
вроде не соскакивает обратно
-
Ну да... Правда, это костыли. Сейчас ищу способ сделать это средствами api. Ведь на VCL как-то работает...
-
дык а чем не нравится способ то? по моему ниче не нормального нету в нем
-
Да, пока сделал так. Но вообще я думаю что VCL делает несколько иначе - я же смотрел исходники. Ну да ладно. Похоже, кроме нас с тобой тема больше никого не интересует, так что закрываем :)
-
D[u]fa, слушай сюда :)
Прочитал на Королевстве Делфи ответ на похожий вопрос by Vasily Mulukov:
> К сожалению, у тебя ничего не выйдет - все расширенные свойства окон > и Би-Ди моде поддерживаются только в локализованной (Арабской) версии
> винды.
Так что похоже я делал всё правильно, только вот винда сама не хотела устанавливать эти стили :)
-
Хотя странно... По идее, винда должна же поддерживать всякие тайские языки... Странно это всё
-
Блин, вот как надо-то было:
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, 0, 0);
end;
И всё работает! Подгляел у RxLib
-
т.е после CM_BASE + 60 уже неважно стер текст или нет все работает нормально?
-
> все работает нормально?
Да! Запиши на стикере. Пригодится!