Сейчас на форуме: zds, tyns777, JustLife, 2nd, morgot, Rio, CDK123 (+4 невидимых)

 eXeL@B —› Программирование —› Можно ли сделать вертикальное выравнивание? (API)
Посл.ответ Сообщение


Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 08 января 2009 21:40
· Личное сообщение · #1

Можно ли сделать вертикальное выравнивание в эдитах, горизонтальное само собой выставляется в ресурсах, а вот вертикальное, можно ли програмно как-то это сделать?

-----
Лучше быть одиноким, но свободным © $me




Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 08 января 2009 21:48 · Поправил: arnix
· Личное сообщение · #2

DrawText c DT_VCENTER ?

_http://msdn.microsoft.com/en-us/library/ms533909(VS.85).aspx
_http://devoid.com.ua/pascal-delphi/delphi-for-beginners/delphi-vivod- teksta-s-ispolzovaniem-winapi.html




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 08 января 2009 22:40
· Личное сообщение · #3

borov пишет:
DrawText c DT_VCENTER ?

Ну да, предварительно заполнив RECT. Как вариант можно принудительно прописать через TextOut координаты выводимой строки, задав явно место вывода.

-----
Программист SkyNet




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 09 января 2009 12:49
· Личное сообщение · #4

а как сделать выравнивание текста по всей длине того же RECT?




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 09 января 2009 14:02 · Поправил: borov
· Личное сообщение · #5

arnix пишет:
DrawText c DT_VCENTER

чета никак не получается

Вот навалял небольшую тестовую прогу, вробеды все правильно, но не работает

Code:
  1. program test;
  2. uses
  3.   windows,
  4.   messages;
  5. var
  6.   hEdit: HWND;
  7. function MainWndProc(hDlg: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): dword; stdcall;
  8. var
  9.   dc: HDC;
  10.   rec: TRect;
  11. begin
  12.   case uMsg of
  13.     WM_INITDIALOG:
  14.       hEdit := GetDlgItem(hDlg, 1001);
  15.     WM_COMMAND:
  16.       case loword(wParam) of
  17.         1002:
  18.           begin
  19.             dc := GetDC(hEdit);
  20.             GetWindowRect(hEdit, rec);
  21.             DrawText(dc, 'Test', 4, rec, DT_VCENTER or DT_SINGLELINE);
  22.           end;
  23.       end;
  24.     WM_CLOSE:
  25.       PostQuitMessage(0);
  26.   end;
  27.   result := 0;
  28. end;
  29. {$R dlg.res}
  30. begin
  31.   DialogBoxParam(HInstance, '#1000', 0, @MainWndProc, 0);
  32. end.


В аттаче сорцы

-----
Лучше быть одиноким, но свободным © $me





Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 09 января 2009 14:10
· Личное сообщение · #6

забавно, в правке файлы не приаттачуются

borov пишет:
В аттаче сорцы



fda8_09.01.2009_CRACKLAB.rU.tgz - test.7z

-----
Лучше быть одиноким, но свободным © $me





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 09 января 2009 15:40
· Личное сообщение · #7

у до 1002 не доходит никогда

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 09 января 2009 15:50
· Личное сообщение · #8

Isaev пишет:
у до 1002 не доходит никогда


Доходит, нужно нажать на кнопку

borov
Ща посмотрю




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 09 января 2009 16:37
· Личное сообщение · #9

borov пишет:
чета никак не получается

Конечно, так не получится. Все просто, но чуточку посложнее.
Сначала нужно провести подготовительные мероприятия: надо сначала определить размеры области, куда будет выводиться строка(и), подготовить совместимый битмап, получить хендл контекста устройства и затем уже в обработчике WM_PAINT выводить в этот буффер строки по шаблону и потом уже копировать их на саму форму.
Чтобы не быть голословным, вот простейшая прога, выводящая строки по центру формы


55cc_09.01.2009_CRACKLAB.rU.tgz - test v_center drawtext.rar

-----
Программист SkyNet




Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 09 января 2009 16:38
· Личное сообщение · #10

borov

Code:
  1.     WM_COMMAND:
  2.       case loword(wParam) of
  3.         1002:
  4.           begin
  5.             dc := GetDC(HWND(nil));
  6.             GetWindowRect(hEdit, rec);
  7.             OffsetRect(rec, 0, 0);
  8.             ret := DrawText(dc, 'Test', 4, rec, DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX);
  9.           end;
  10.       end;





Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 09 января 2009 23:15
· Личное сообщение · #11

FrenFolio пишет:
выводящая строки по центру формы

я писал:
borov пишет:
вертикальное выравнивание в эдитах,

я имел ввиду текст в эдитах, а не написаное на контроле

-----
Лучше быть одиноким, но свободным © $me



 eXeL@B —› Программирование —› Можно ли сделать вертикальное выравнивание? (API)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати