Mathias hat geschrieben:Mit meinem kleinen FreeVision-Programm wollte ich gucken, ob überhaupt Mausfunktionen in der Konsole unterstützt werden.
Wen es dort schon nicht funktioniert hätte, dann hätte dein OS schon Probleme mit der Maus in der Konsole gehabt.
Weil die Konsole ist etwas ganz anderes als eine GUI alla LCL.
Die Konsole ist vergleichbar mit MS-DOS.
Ich hoffe du verstehst was ich meine.
Dies sieht man auch gut, wen man Text ausgeben will.
Konsole: Write/Writeln.
GUI: Canvas.TextOut.
Das habe ich verstanden. Unter Windows gibt es ein Konsolenfenster, das die Ausgaben einer Konsolenanwendung anzeigt. Auch Windows 10 besitzt so eine Konsole (Eingabeaufforderung). Ich glaube allerdings nicht, dass die noch auf DOS basiert.
Ich kann dort aber nach wie vor Textkommandos eingeben, um das Verhalten von Windows zu steuern oder Dateien anzuzeigen oder Programme aufzurufen, ....
Für Tastatureingaben und AUsgaben mit Write/Writeln funktioniert das unter Windows, nur eben leider nicht für die Maus. FPC 3.0.2. Mit dem Go32 Compiler in der DOS BOX habe ich das noch nicht getestet.
Ich habe mein Konsolenprogramm unter Windows für Windows übersetzt. Das Linux Programm unter Linux, das heißt jeweils mit Target = Default. Daher gehe ich stillschweigend davon aus, das unter Linus Lazarus so vorkonfiguriert ist, das für Linux übersetzt wird, das Compilat hat keine Dateierweiterung unter Linux. Unter nWindows bekomme ich eine Exe. Sollte also die jeweils richtige Zielplattform sein.
Ich will mein Programm plattformübergreifend halten, deshalb teste ich auch auf beiden Plattformen. Linux und Windows.
[/quote]
Ja, soeben getestet. Mausposition bleibt auf (0,0), egal wie ich die Maus bewege, mit oder ohne gedrückte Maustasten links oder rechts.
Ich habe das Beispiel noch mal neu geschrieben. Nicht ganz wie @Michl, sondern so:
Code: Alles auswählen
program Maustest;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils, CustApp, Mouse
{ you can add units after this };
type
{ TMouseApplication }
TMouseApplication = class(TCustomApplication)
private
fromMouse: TMouseEvent;
protected
procedure DoRun; override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure Run;
procedure WriteHelp; virtual;
end;
{ TMouseApplication }
procedure TMouseApplication.DoRun;
var
ErrorMsg: String;
begin
// quick check parameters
ErrorMsg:=CheckOptions('h', 'help');
if ErrorMsg<>'' then begin
ShowException(Exception.Create(ErrorMsg));
Terminate;
Exit;
end;
// parse parameters
if HasOption('h', 'help') then begin
WriteHelp;
Terminate;
Exit;
end;
{ add your program here }
// stop program loop
Terminate;
end;
constructor TMouseApplication.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
StopOnException:=True;
InitMouse;
end;
destructor TMouseApplication.Destroy;
begin
DoneMouse;
inherited Destroy;
end;
procedure TMouseApplication.Run;
begin
//DoRun;
repeat
if PollMouseEvent(fromMouse) then GetMouseEvent(fromMouse);
if fromMouse.buttons = MouseLeftButton then writeln('Linke Maustaste gedrückt!');
until fromMouse.buttons = MouseRightButton;
//writeln('Zurück mit Enter ...');
//Readln;
Terminate;
end;
procedure TMouseApplication.WriteHelp;
begin
{ add your help code here }
writeln('Usage: ', ExeName, ' -h');
end;
var
Application: TMouseApplication;
begin
Application:=TMouseApplication.Create(nil);
Application.Title:='My Mouse Application';
Application.Run;
Application.Free;
end.
Das Sourceforge Beispiel mit GetMouseX, GetMouseY habe ich dann anstelle der obigen Run Methode getestet. Die Mausposition bleibt da (0,0).