Maus abfrage

C

ChH

Hallo!

Ich habe einen Quellcode bekommen, um die Maus abzufragen...

Dummerweise kann ich annaehernd gar kein Delphi...

kann mir das hier jemand in C umsetzen?

Thx schonmal,

ChH / Lin Li

[edit] Das Programm ist fuer einen Roboter, der seine Bewegungen abtasten soll!!! Ich benutze dafuer zwar das Board einer Maus, habe aber keine Windows-Schnittstellen sondern kann nur diesen direkten Weg gehen !!!!! [/edit]

Code:
unit Maus;

interface

uses PORTINC,
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    dx: TLabel;
    x: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  end;

var
  Form1: TForm1;
  Din, Xges, Yges: Integer;
implementation

{$R *.DFM}


procedure TForm1.FormCreate(Sender: TObject);
begin
  OpenCom(pchar('com2:1200,N,8,2'));
  Timer1.Interval := 100;
  Timer1.Enabled := true;
  RTS(1);             {Stromversorgung}
  Xges:=0; Yges:=0;
  Din := ReadByte;    {1.Byte verwerfen}
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var b1,b2,b3,x,y,li,re: Integer;
begin
  B1 := ReadByte;
  if B1=-1 then exit;
  Edit1.Text := FloatToStr(B1);
 B2 := ReadByte;
  Edit2.Text := FloatToStr(B2);
 B3 := ReadByte;
  Edit3.Text := FloatToStr(B2);
 x:= B2 And 63+64*(B1 and 3);
 if x> 128 then x:=x-256;
 y:= B3 And 63+16*(B1 and 12);
 if y> 128 then y:=y-256;

  Edit4.Text := FloatToStr(x);
  Edit5.Text := FloatToStr(y);
  li := (B1 and 32) div 32;
  re := (B1 and 16) div 16;
  Edit6.Text := FloatToStr(li);
  Edit7.Text := FloatToStr(re);
  Xges:=Xges+x;
  Yges:=Yges+y;
  Edit8.Text := FloatToStr(Xges);
  Edit9.Text := FloatToStr(Yges);
 end;

end.
 

Das will ich ja auch nich...

ich hab naemlich nich vor, meinen roboter mit windows-formularen zu bestuecken...

ich will so n schoenes schwarzes fenster, das alle rueckmeldungen einfach irgendwie auflistet... wie is egal, nur man muss es verstehen koennen...

[edit] ausserdem will ich das programm nur VERSTEHEN (es wuerde also reichen, wenn du mir den fuer das auslesen der maus wichtigen teil uebersetzt)

ChH
 
Code:
/* SERIELLE KOMMUNIKATION (Polling) */
/* Programmierung des UART 16500    */
/* (C) 1998 by Walter Waldner       */

#include <stdio.h>
#include <conio.h>
#include <dos.h>

// Die folgenden Adressen gelten für COM1
// Für COM2 ist 0x100 zu den Adressen zu addieren

#define LEITUNGSSTEUERREG 0x2FB
#define LEITUNGSSTATUSREG 0x2FD
#define HALTEREG          0x2F8
#define BAUDRATENREG      0x2F8
#define MODEMSTEUERREG    0x2FC
#define INTERRUPTAKTIV    0x2F9

void main()
{
  unsigned char status,zeichen;
  unsigned int  offset;
  int com_port,loopback;
  int baudrate,teiler;

  clrscr();
  printf("Serielle Kommunikation (Polling)\n\n");
  printf("Welches COM-Port soll verwendet werden (1,2)? ");
  scanf("%d",&com_port);
  if (com_port == 2) offset = 0;
  else               offset = 0x100;
  printf("Baudrate wählen:\n");
  printf("1=2400 2=4800 3=9600 4=19200 5=38400: ");
  scanf("%d",&baudrate);
  printf("Loopback aktivieren (0=nein, 1=ja)? ");
  scanf("%d",&loopback);

  // DLAB (Divisor Latch Access Bit auf 1 setzen
  // DLAB ist das MSB des Leitungssteuerregisters
  outportb(LEITUNGSSTEUERREG+offset,0x80);
  // Baudrate setzen, LSByte zuerst
  switch(baudrate)
  {
    case 1: teiler = 0x30; break;
    case 2: teiler = 0x18; break;
    case 3: teiler = 0x0C; break;
    case 4: teiler = 0x06; break;
    case 5: teiler = 0x03; break;
  }
  outportb(BAUDRATENREG+offset,teiler);
  outportb(BAUDRATENREG+offset+1,0x00);
  // Leitungssteuerregister setzen
  // 8 bit / even parity / 1 stopbit
  outportb(LEITUNGSSTEUERREG+offset,0x1B);
  // Modemsteuerregister setzen
  if (loopback == 1)
    outportb(MODEMSTEUERREG+offset,0x13);
  else
    outportb(MODEMSTEUERREG+offset,0x03);
  // Interrupts deaktivieren
  outportb(INTERRUPTAKTIV+offset,0x00);

  clrscr();
  while (1)
  {
    status = inportb(LEITUNGSSTATUSREG+offset);
    // Ist Zeichen im Eingangsregister ?
    if ((status & 0x01) != 0)
    {
      // Zeichen am Bildschirm darstellen
      zeichen = inportb(HALTEREG+offset);
      if (zeichen==13) printf("\n");
      else             printf("%c",zeichen);
    }
    // Ist Zeichen im Tastaturbuffer ?
    if (kbhit())
    {
      zeichen=getch();
      if (zeichen == 27) break;
      // Warten auf Freiwerden des Halteregisters
      do
      {
	status = inportb(LEITUNGSSTATUSREG+offset);
      } while ((status & 0x20) == 0);
      // Zeichen senden
      outportb(HALTEREG+offset,zeichen);
    }
  }
}

was willst du denn davon übersetzt haben?
ich denke du kannst c?
 
ich will n verdammtes board einer maus ueber nen seriellen port ansprechen, und daraus dann den abstand in IRGENDWELCHEN zahlen wissen, den ich mich bewegt hab...


und keinen seriellen port aufm pc ansprechen, sondern auf nem MULTIBOARD... son viech, was in meinen robotern drinnen is, und die setuert.


dazu brauch ich den teil von meinem delphi-code der die 3 bytes aus der maus ausliest und verwertet in ne anstaendige sprache (C99 / Deutsch / Englisch ;) ) uebersetzt... und nix anderes....


Danke trotzdem... *deprimiert-ist*

ChH

[edit]was ich noch vergessen hab: MEIN ROBOTER HAT KEINEN MONITOR!!!
 
Zurück