2010-11-29 5 views
4

Одна из больших точек продаж, которые я видел, когда мне приходилось покупать delphi для моей работы, была возможность поддерживать планшетные ПК. Теперь клиент компании, где я работаю, хочу использовать планшетный ПК. Я пытался найти примеры delphi с планшетным ПК, но я их не нашел. У кого-нибудь есть опыт? Какие-нибудь учебники или примеры?Поддержка планшетного ПК Delphi 2010

Я, похоже, не могу даже принести виртуальную клавиатуру, когда компонент усиливает фокус и скрывает его, когда он теряет его.

+1

Поиск `touch` и` gesture`, это основные функции, поддерживающие программирование планшета. – 2010-11-29 12:24:05

ответ

7

Delphi 2010 представила Delphi отличную поддержку прикосновений и жестов.

Чтобы узнать больше об этом, перейдите на сайт EDN и найдите повторы CodeRage 4. Существует сессия под названием «Руки на жесты в VCL« от Seppy Bloom. Также в CodeRage 5 имеется сессия под названием «Жесткие возможности для новых приложений и текущих проектов» от Vesvolod Leonov.

Глава 6 Марко Канту в "Delphi 2010 Handbook" также охватывает контакт и жест в Delphi.

В конце концов, вы можете проверить Chris Bensen's weblog для некоторых вводных сообщений и демонстрационного исходного кода о поддержке касаний и жестов в Delphi.

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

В Delphi 2010 и более поздних версиях уже доступен keyboard component с сенсорным управлением. Чтобы сделать это видимым или скрыть его при изменении фокуса, вы можете обрабатывать сообщение VCLи отображать клавиатуру, когда управление, получающее фокус, происходит от определенного класса или соответствует некоторым особым условиям. Вот пример кода:

type 
    TForm1 = class(TForm) 
    Edit1: TEdit; 
    Button1: TButton; 
    Memo1: TMemo; 
    TouchKeyboard1: TTouchKeyboard; 
    private 
    procedure ActivateVirtualKeyboard(Control: TWinControl; Keyboard: TTouchKeyboard); 
    procedure CmFocusChanged(var Msg: TCMFocusChanged); message CM_FOCUSCHANGED; 
    public 
    { Public declarations } 
    end; 

/// Implementation 

procedure TForm1.ActivateVirtualKeyboard(Control: TWinControl; Keyboard: TTouchKeyboard); 
var 
    APoint : TPoint; 
begin 
    if Control is TCustomEdit then 
    begin 
    APoint := Control.ClientToScreen(Point(0,0)); 
    APoint := Keyboard.Parent.ScreenToClient(APoint); 
    Keyboard.Left := APoint.X; 
    Keyboard.Top := APoint.Y + (Control.Height); 
    Keyboard.Visible := True; 
    end 
    else 
    Keyboard.Visible := False; 
end; 

procedure TForm1.CmFocusChanged(var Msg: TCMFocusChanged); 
begin 
    ActivateVirtualKeyboard(Msg.Sender, TouchKeyboard1); 
end; 

Код выше вызовов ActivateVirtualKeyboard каждый раз при изменении фокуса. Msg.Sender - это контроль, который получил фокус. ActivateVirtualKeyboard проверяет, является ли элемент управления потомком TCustomEdit (такие компоненты, как TEdit или TMemo, происходят из этого класса). Если элемент управления получен из TCustomEdit, он размещает виртуальную клавиатуру прямо под элементом управления и делает клавиатуру видимой; в противном случае он скрывает клавиатуру.

В образце кода у нас есть редактирование, заметка и кнопка в Form1. Клавиатура должна быть видна для Edit1 и Memo1 и спрятана, когда Button1 имеет фокус.

Расчет для позиции клавиатуры на экране не так уж и умный, и клавиатура может опуститься слишком сильно, если элемент управления с фокусом находится очень близко к нижнему краю формы. Во всяком случае, позиционирование элемента управления на экране выходит за рамки вашего вопроса.

+1

И ДР. Боб Ссылка: http: //www.drbob42.com/examines/examinB6.htm – 2010-12-09 00:37:10

Смежные вопросы