Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Таблица символов

Автор myst, сентября 12, 2009, 14:27

0 Пользователи и 1 гость просматривают эту тему.

myst

Вот из-за таких вещей Delphi надо давно закопать, да поглубже.

wienski

Цитата: Валентин Н от сентября 22, 2009, 10:41
А почему у меня отображаются деванагари, грузинский итд, но в переключателе расладок их нет.

Т.е. могу видеть, но не могу напечатать. Чо за тупняк?
У вас стоят необходимые шрифты и кодировки, но нет языкового пакета, который содержит в себе раскладки и методы ввода.

arseniiv

Цитата: myst от сентября 22, 2009, 11:48
Вот из-за таких вещей Delphi надо давно закопать, да поглубже.
Ну, знаете ли! Эта запись ведь и в си передаётся! И в других языках, поддерживающих импорт из DLL. У меня там не сразу запись для клавиатуры, а общая с полем dword и пересечением полей для записей клавиатуры, мыши и аппаратной.

Вот спасибо за ссылку! :up: Всё описано. Не то что в поставленной вместе с 7 версией старушенции

myst

Цитата: Валентин Н от сентября 22, 2009, 10:41
А почему у меня отображаются деванагари, грузинский итд, но в переключателе расладок их нет.

Т.е. могу видеть, но не могу напечатать. Чо за тупняк?
Да, это тяжёлый случай — ж от п не отличать. :D

myst

Цитата: arseniiv от сентября 22, 2009, 11:52
Вот спасибо за ссылку! :up: Всё описано. Не то что в поставленной вместе с 7 версией старушенции
Так Вы до сих пор пользовались, тем поделием, что шла с Delphi? Я её выбросил на помойку ещё в 2001 году. MSDN — наше всё. :)

myst

Цитата: arseniiv от сентября 22, 2009, 11:52
Ну, знаете ли! Эта запись ведь и в си передаётся! И в других языках, поддерживающих импорт из DLL. У меня там не сразу запись для клавиатуры, а общая с полем dword и пересечением полей для записей клавиатуры, мыши и аппаратной.
Не понял посыла. Я про то, что в Delphi постоянно приходится ковыряться в иле — добавлять стандартные(!) структуры, прототипы функций Win32 API.

arseniiv

Да нет, не приходится. То, что нет этой константы, меня очень удивило. Дельфи 7 написана после появления XP. А так все структуры там есть, и функции, а вот в той старой справке не было... А вот в VB приходилось всё импортировать... (Да, я и на VB сидел год... Ужасно вспоминать!)

Всё теперь работает, но КПД низкий. Иногда символы чуть ли не через один приходят. Надо будет разобраться с активацией окон

myst

Цитата: arseniiv от сентября 22, 2009, 12:06
А так все структуры там есть, и функции, а вот в той старой справке не было...
А вот не верю насчёт все, не верю. :)

arseniiv

Ну, я и не гарантирую... Если бы меня попросили написать компилятор Delphi. Я бы просто отказался... Языковые средства мне нравятся, а поддержка - что поделать, она всё время никуда не годится у большого количества языков...

Results is:
Послано: 304
Принято: 189
КПД: 62,17%

Это я вместо SetActiveWindow(0) сделал свой тот дескриптор, сохранённый. Теперь попробую с нулём и сравним. Недолёт сообщений наверно потому, что пока нажимается ячейка таблицы, активно окно поей программы, и сообщения могут пытаться попасть в таблицу, а она их не принимает.

arseniiv

С передачей 0 то же самое, в пределах статистической ошибки:
Послано: 428
Принято: 249
КПД: 58,18%

Так что надо что-то сделать, чтоб окна друг другу не мешали

myst

Цитата: arseniiv от сентября 22, 2009, 12:14
Это я вместо SetActiveWindow(0) сделал свой тот дескриптор, сохранённый.
Какой тот?

arseniiv

Жду совета по утихомириванию окон... Может, их переключать в определённом порядке надо?

Кстати, этой полезной функцией, как написано в MSDN, можно всякие другие нестандартные вводы, как и у Тайльнемера, делать. У меня есть программа для ввода символов движением мыши, но она недоработанная... Кстати, может есть аналогичные?

myst

Цитата: arseniiv от сентября 22, 2009, 12:53
Так что надо что-то сделать, чтоб окна друг другу не мешали
Прежде чем посылать нажатие, надо переключить фокус ввода на нужное окно.

myst

Цитата: arseniiv от сентября 22, 2009, 13:22
Жду совета по утихомириванию окон... Может, их переключать в определённом порядке надо?
Я уже предлагал сделать через WM_CHAR/WM_SETFOCUS.

arseniiv

Да я переключаю! SetActiveWindow, притом это удобно тем, что окно как было активным, так и остаётся после нажатия. Во время нажатия ему приходится становиться неактивным. Добавлю ещё SetFocus

myst

Цитата: arseniiv от сентября 22, 2009, 14:10
SetActiveWindow, притом это удобно тем, что окно как было активным, так и остаётся после нажатия.
Вы понимаете, что вызов этой функции с NULL — хак?

arseniiv

Понимаю, в чём именно дело: символы вставляются по нажатию мыши. По нажатию же возвращается и активность окна программы. Т.е. если она активировалась быстрее, получает сообщение она. Вроде бы? Что сделать, чтобы она так и оставалсь не активной, можно как-либо отменить активацию при прихождении сообщения WM_SETFOCUS?

procedure TfrmMain.WMSetFocus(var Msg: TWMSETFOCUS);
begin
  if Params.CaretEnter then begin
    Msg.Result := 0;
    Windows.SetFocus(Msg.FocusedWnd);
  end;
end;

не помогае...

arseniiv

Цитата: myst от сентября 22, 2009, 14:47
Вы понимаете, что вызов этой функции с NULL — хак?
Да я уже нормально вызываю, с дескриптором деактивировавшего окна.

Как это делает Экранная клавиатура, в MSDN случайно не написано? :??? Она даже деактивирует себя при движении мыши по клиентской области, и не активируется при нажатии мыши

myst

Цитата: arseniiv от сентября 22, 2009, 14:52
не помогае...
:o Что Вы такое делаете?
Схема, которую я предложил, не работает?

arseniiv

Какая? Вы так много уже сказали, что я не знаю, какая из... ::)

myst

Цитата: arseniiv от сентября 22, 2009, 15:37
Какая? Вы так много уже сказали, что я не знаю, какая из... ::)
Написал много, но схема была одна. :)
Рисую ещё раз:
1. В палитре выбирается символ.
2. Окно палитры получает фокус.
3. Окно палитры получает сообщение WM_SETFOCUS.
4. Обработчик WM_SETFOCUS запоминает дескриптор окна, потерявшего фокус.
5. Обработчик WM_MBUTTONUP отправляет сообщение WM_CHAR на запомненный дескриптор окна.
5.1. Фокус ввода переключается обратно на запомненный дескриптор.
Примерно так.

Алексей Гринь

Цитата: arseniiv от сентября 22, 2009, 14:52
then begin
{

Пока дельфятник со всеми его крутыми формочками напишет «then begin»...
肏! Τίς πέπορδε;

arseniiv

Цитата: Алексей Гринь от сентября 22, 2009, 16:09
{
Видел.
Цитата: Алексей Гринь от сентября 22, 2009, 16:09
Пока дельфятник со всеми его крутыми формочками напишет «then begin»...
Разведите холивар в другой теме, пожалуйста. Ну что за злостный оффтоп!

Отмечу сделанное:
Цитата: myst от сентября 22, 2009, 15:45
1. В палитре выбирается символ.
2. Окно палитры получает фокус.
3. Окно палитры получает сообщение WM_SETFOCUS.
4. Обработчик WM_SETFOCUS запоминает дескриптор окна, потерявшего фокус.

5. Обработчик WM_MBUTTONUP отправляет сообщение WM_CHAR на запомненный дескриптор окна.
5.1. Фокус ввода переключается обратно на запомненный дескриптор.
Примерно так.
Просто у меня посылается по нажиманию, а не отпусканию мыши...

myst

Цитата: arseniiv от сентября 22, 2009, 16:16
Просто у меня посылается по нажиманию, а не отпусканию мыши...
По отпусканию лучше: есть шанс передумать. :)

arseniiv

А если я нажму на одном, а отпущу на другом?? :negozhe:

Эх, ладне. Даже экранная клавиатура это использует. Придётся ввести контроль уезжания мыши во время нажатия...

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр