Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2011, 02:05   #1
N0iD
Пользователь
 
Аватар для N0iD
 
Регистрация: 05.05.2010
Сообщений: 50
Радость Компонент Wacom - Delphi Tablet Component 1.3

Доброго времени суток, находясь в долгих поисках компонента для работы с графическим планшетом, был успешно найден на просторах интернета. Я думаю многие обрадуются этому дабы не лазить в доках по работе с драйверами планшетов. Собственно данный компонент был опробован с Wacom и Genius планшетами. В состав идет две демки, Одна показывает силу нажатия,а вторая показывает как рисовать.
При компилинге второй демки, там где нужно рисовать, вылазиет на строке "Open(AContext, True);" ошибка: "[Error] MappingUnit.pas(118): Too many actual parameters".

Прошу помощи, как это исправить. И было бы хорошо если бы выложили рабочий вариант второго примера, а именно из папки "Mapping".
Вложения
Тип файла: zip Delphi_Tablet_Component_v.1.3.zip (129.8 Кб, 70 просмотров)

Последний раз редактировалось N0iD; 11.02.2011 в 03:04.
N0iD вне форума Ответить с цитированием
Старый 11.02.2011, 02:19   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Прошу помощи, как это исправить

было:
Код:
    Open(AContext, true);
стало:
Код:
    Open(AContext);
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 11.02.2011, 02:28   #3
N0iD
Пользователь
 
Аватар для N0iD
 
Регистрация: 05.05.2010
Сообщений: 50
По умолчанию

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

Например взять Photoshop, там имеется одновременная работа и с планшетным пером и мышью (обыкновенное рисование), исходя из этого смею предположить что не имея планшета, линию можно провести и мышью, только толщина не будет изменяться.
N0iD вне форума Ответить с цитированием
Старый 11.02.2011, 02:44   #4
N0iD
Пользователь
 
Аватар для N0iD
 
Регистрация: 05.05.2010
Сообщений: 50
По умолчанию

Вот на всякий случай код демки.
//------------------------------------------

Код:
unit MappingUnit;

interface

uses
  Windows, Messages, Classes, Controls, Forms, Tablet, WintabConsts,
  Dialogs, Buttons, StdCtrls;

type
  TMainForm = class(TForm)
    Tablet: TTablet;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    procedure WMExitSizeMove(var Message: TMessage); message WM_EXITSIZEMOVE;
    procedure WMGetMinMaxInfo(var Message: TMessage); message WM_GETMINMAXINFO;
  public
    MapToWindow: Boolean;
    procedure SetMapping(ClientRect: TRect);
  end;

  { Application-specific packet structure. Setting the context
    PktData variable will define what data to retrieve. }
  TMyPacket = record
    Cursor: Integer;
    Buttons: Integer;
    Coords: TPoint;
    Pressure: Integer;
  end;
  PMyPacket = ^TMyPacket;

const
  lcPktData = PK_CURSOR or PK_BUTTONS or PK_X or PK_Y or PK_NORMAL_PRESSURE;
  lcOptions = CXO_SYSTEM or CXO_MESSAGES or CXO_CSRMESSAGES;
  lcBtnMask = SBN_LCLICK or SBN_RCLICK or SBN_LDBLCLICK or SBN_RDBLCLICK;

var
  MainForm: TMainForm;
  ContextHandle: THandle;

implementation

{$R *.DFM}

{ This method sets the input mapping to the ClientRect being passed }
procedure TMainForm.SetMapping(ClientRect: TRect);
var
  TabletX, TabletY: TAxis;
  AContext: TLogContext;
  NewRect, PhysRect: TRect;

  function MapRectangles(A, B, C: TRect): TRect;
  var
    HA, HB, HC, WA, WB, WC, L, T: Integer;
  begin
    WA := A.Right - A.Left;
    WB := B.Right - B.Left;
    WC := C.Right - C.Left;
    HA := A.Bottom - A.Top;
    HB := B.Bottom - B.Top;
    HC := C.Bottom - C.Top;

    WA := WA * WB div WC;
    HA := HA * HB div HC;

    L := WA * C.Left div WB;
    T := HA * (B.Bottom - C.Bottom) div HB;

    Result.Left := -L;
    Result.Right := WA;
    Result.Top := A.Top - T;
    Result.Bottom := A.Top + HA;
  end;

begin
  if not Tablet.Present then Exit;
  AContext := Tablet.Context;
  WTInfo(WTI_DEVICES, DVC_X, @TabletX);
  WTInfo(WTI_DEVICES, DVC_Y, @TabletY);

  PhysRect := Rect(0, 0, TabletX.Max, TabletY.Max);

  NewRect := MapRectangles(PhysRect, Screen.DesktopRect, ClientRect);

  with AContext do
  begin
    InOrgX := NewRect.Left;
    InOrgY := NewRect.Top;
    InExtX := NewRect.Right;
    InExtY := NewRect.Bottom;
  end;
  Tablet.Context := AContext;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var
  AContext: TLogContext;
  Pressure: TAxis;
begin
  MapToWindow := False;
  with Tablet, AContext do
  begin
    if not Present then
    begin
      ShowMessage('No digitizer present on system.');
      Exit;
    end else
    DefaultContext(AContext);
  	Options := Options or lcOptions;
  	PktData := lcPktData;
    BtnDnMask := lcBtnMask;
    BtnUpMask := BtnDnMask;
    MsgBase := WT_DEFBASE;
    PacketSize := SizeOf(TMyPacket);
    Open(AContext, True);     //<---------------- (Трабл)

  end;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  WTClose(ContextHandle);
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
  SetMapping(BoundsRect);
  MapToWindow := True;
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
  SetMapping(Screen.DesktopRect);
  MapToWindow := False;
end;

procedure TMainForm.WMExitSizeMove(var Message: TMessage);
begin
  if MapToWindow then SetMapping(BoundsRect);
end;

procedure TMainForm.WMGetMinMaxInfo(var Message: TMessage);
begin
  if MapToWindow then SetMapping(BoundsRect);
end;

end.

Грешил на кривизну рук. Проверял на Delphi 6 и 7

Последний раз редактировалось N0iD; 11.02.2011 в 02:48.
N0iD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Компонент-предок, компонент-родитель amico Помощь студентам 1 23.09.2015 21:20
Компонент rx ZvEr_HaCkEr Общие вопросы Delphi 2 17.07.2010 11:37
Компонент Ky3Heu, Общие вопросы Delphi 7 02.04.2009 11:59
Компонент Terran Компоненты Delphi 2 16.12.2007 17:42