Maus funktioniert in Win 10 Konsole nicht. [gelöst]

Antworten
thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Maus funktioniert in Win 10 Konsole nicht. [gelöst]

Beitrag von thosch »

Hallo!

Ich habe ein Kosolenprogramm, das die Maus benutzt. Leider erhalte ich die Mausereignisse nicht.

Code: Alles auswählen

 
begin
   repeat
      pollMouseEvent(MouseEv);
      case MouseEv.Buttons of
         ButtonLeft: writeln('BUTTON_DOWN');
         ButtonRight: writeln('BUTTON_UP');
      end;
   until MouseEv.Buttons = ButtonRight;
   writeln('Zurück mit <<ENTER>> ... ');
   Readln;
end.
 


Ich erhalte die Writeln() - Ausgabe nicht. Ich komme auch nicht bis zur Aufforderung "Zurück mit <<ENTER>>". DetectMose zeigt mir richtigerweise eine Maus mit 3 Buttons. Nur kann ich deren Klicks nicht auswerten. Auch die Unit Winmouse führt nicht zum Erfolg. Ich verwende Freepascal 3.0.2 mit Lazarus 1.6.4 unter Windows, da ich unter Linux die Ausgabekonsole nicht zum Laufen kriege.


Was muss ich unter Windows noch machen, damit die Maus funktioniert. Tastatureingaben funktionieren, nur Mauseingaben nicht.

Hier:
viewtopic.php?f=19&t=11085

habe ich einen Bugreport gesendet. Wenn das kein Bug ist, sondern ich nur meine Win10 Konsole noch anpassen muss, dann antwortet bitte hier in diesem Strang.


.
.
Zuletzt geändert von thosch am Fr 29. Sep 2017, 23:15, insgesamt 2-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Maus funktioniert in Win 10 Konsole nicht.

Beitrag von wp_xyz »

thosch hat geschrieben:da ich unter Linux die Ausgabekonsole nicht zum Laufen kriege.

Meinst du damit, dass du in der IDE die Konsolenausgabe nicht siehst? "View" > "Debug Windows" > "Terminal Output" markieren, dann ist es da.

thosch hat geschrieben:Hier:
viewtopic.php?f=19&t=11085

habe ich einen Bugreport gesendet.

Das ist kein Bug-Report, sondern ein (Doppel!-) Post in einem Unterforum, das sich "Bugs" nennt. Kein FPC-Entwickler kriegt diesen Report zu Gesicht. Einen "richtigen" Bug-Report kannst du auf https://bugs.freepascal.org schreiben (auf Englisch). Und füge ein kleines Demoprogramm bei, das den Fehler zeigt.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Maus funktioniert in Win 10 Konsole nicht.

Beitrag von Mathias »

sondern ich nur meine Win10 Konsole noch anpassen muss

Was passiert, wen du dieses Miniprogramm startest ?
Hast du dort ein Mauspfeil ?
Beendet sich dann das Programm, wen du unten links auf Alt-X klickst ?

Code: Alles auswählen

program Project1;
uses
  App;
var
  MyApp: TApplication;
begin
  MyApp.Init;
  MyApp.Run;
  MyApp.Done;
end.

Der Code sollte unter allen OS laufen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: Maus funktioniert in Win 10 Konsole nicht.

Beitrag von thosch »

In der GUI wie das Beispiel oben im vorigen Beitrag funktioniert die Maus. Nur in der Konsole nicht.

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: Maus funktioniert in Win 10 Konsole nicht.

Beitrag von thosch »

wp_xyz hat geschrieben:
thosch hat geschrieben:da ich unter Linux die Ausgabekonsole nicht zum Laufen kriege.

Meinst du damit, dass du in der IDE die Konsolenausgabe nicht siehst? "View" > "Debug Windows" > "Terminal Output" markieren, dann ist es da.


Nein, das mit der gar nicht funktionierenden Konsolenausgabe habe ich ausschließlich unter Linux. Unter Windows kann ich auf der Konsole Tastatureingaben entgegen nehmen und auswerten aber keine Mausereignisse.

wp_xyz hat geschrieben:habe ich einen Bugreport gesendet.

Das ist kein Bug-Report, sondern ein (Doppel!-) Post in einem Unterforum, das sich "Bugs" nennt. Kein FPC-Entwickler kriegt diesen Report zu Gesicht. Einen "richtigen" Bug-Report kannst du auf https://bugs.freepascal.org schreiben (auf Englisch). Und füge ein kleines Demoprogramm bei, das den Fehler zeigt.[/quote]

Ok, wenn sich keine Lösung für mein Problem ergibt, dass werde ich den Bug Report halt da hin senden. Ich hatte wegen des Threadnamens "Bugs" angenommen, dass ich das auch dort machen kann.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Maus funktioniert in Win 10 Konsole nicht.

Beitrag von Mathias »

thosch hat geschrieben:In der GUI wie das Beispiel oben im vorigen Beitrag funktioniert die Maus. Nur in der Konsole nicht.

Wen du damit mein Mini-Programm meinst, dies ist eine Konsolenanwendung.

Und füge ein kleines Demoprogramm bei, das den Fehler zeigt

Ich sehen kein Programm.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: Maus funktioniert in Win 10 Konsole nicht.

Beitrag von thosch »

Mathias hat geschrieben:
thosch hat geschrieben:In der GUI wie das Beispiel oben im vorigen Beitrag funktioniert die Maus. Nur in der Konsole nicht.

Wen du damit mein Mini-Programm meinst, dies ist eine Konsolenanwendung.

Und füge ein kleines Demoprogramm bei, das den Fehler zeigt

Ich sehen kein Programm.


Wie jetzt? Versteh ich nicht. Mein MIni Programm ist ein Konsolenprogramm. Das funktioniert unter Windows nicht, da ja die Maus verwendet wird. Das GUI Programm nach Deinem Vorschlag funzt aber. Ich habe nichts weiter gemacht als auf mein Formular der GUI Anwendung nach Deinem Vorschlag einen Button per Maus aus der Komponentenpalette geholt und auf die Form geklickt. Dann Eventhandler geschrieben. Was soll ich sagen, wie drücke ich das normgerecht aus? In der GUI funktioniert die Maus, das Ereignis wird ausgelöst, wenn ich auf den Button in meinem Formular klicke, den ich da zusätzlich drauf gebracht habe. Zur Entwurfszeit mit der Maus. In der GUI funktioniert es. Aber NICHT in meinem Konsolenprogramm unter Windows 10, wie meinem Miniprogramm in MEINEM ersten Beitrag.

Ich habe allerdings auch ein einfaches Freepascal Programm erzeugt, ohne TApplication zu verwenden. Muss doch auch gehen. Zumal Lazarus in Datei->Neu diese Option anbietet. Oder funktioniert die Konsolenmaus generell NUR in einem Konsolenprogramm mit TApplication???

Ist es jetzt verständlich? Wie drücke ich es andernfalls besser aus? Ich weiß echt nicht mehr weiter. Es ist KEIN Hausaufgabenthread. In der GUI fünktioniert die Maus, aber in einem Konsolenprogramm leider nicht. Was soll ich da bloß machen, damit sie auch in der Konsole funktioniert? Ist KEIN Spam, die Konsolenmaus fünktioniert wirklich nicht!

.

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: Maus funktioniert in Win 10 Konsole nicht.

Beitrag von thosch »

Wenn ich eine Konsolenanwendung mit TApplication erzeuge und in die dann von mir zu implementierende Methode RUN folgendes schreibe:

Code: Alles auswählen

 
procedure TApplication.Run;
begin
   InitMouse;
   repeat
     if PollMouseEvent(MouseEvent) then GetMouseEvent(MouseEvent);
     if MouseEvent.Buttons = MouseLeftButton then writeln('Linke Maustaste gedrückt');
   until MouseEvent.Buttons = MouseRightButton;
   DoneMouse;
end;
 


dann erhalte ich eine SIGSEGV Exception. Wenn ich meine Run Methode innerhalb von DoRun aufrufe, dann reagiert die Konsole nicht auf meine Mausklicks, die Exception bleibt aber dann aus.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Maus funktioniert in Win 10 Konsole nicht. External SIGS

Beitrag von Mathias »

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. :wink:
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.

PS: Hast du dies mal angeguckt ? http://lazarus-ccr.sourceforge.net/docs ... ousex.html
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Maus funktioniert in Win 10 Konsole nicht. External SIGS

Beitrag von Michl »

Code: Alles auswählen

program Example4;
uses
  Mouse;
var
  MouseEvent: TMouseEvent;
begin
  InitMouse;
  repeat
    if PollMouseEvent(MouseEvent) then
    begin
      GetMouseEvent(MouseEvent);
      case MouseEvent.buttons of
        MouseRightButton: Writeln('Button rechts');
        MouseLeftButton: WriteLn('Button links');
      end;
    end;
  until MouseEvent.buttons = MouseRightButton;
  DoneMouse;
end.

Edit: So'n Quatsch, hatte gar nicht gesehen, daß Mathias den Link schon gepostet hatte. Naja dopplet hält besser :wink:
Edit2: Versehntlich gelöscht, daß dieser Code unter Windows 7 funktioniert. Unter Win 10 nicht? Wenn nein, dann sollte dies im Bugtracker gemeldet werden.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: Maus funktioniert in Win 10 Konsole nicht. External SIGS

Beitrag von thosch »

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. :wink:
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.

Mathias hat geschrieben:PS: Hast du dies mal angeguckt ? http://lazarus-ccr.sourceforge.net/docs ... ousex.html

[/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).
Zuletzt geändert von thosch am Fr 29. Sep 2017, 22:58, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Maus funktioniert in Win 10 Konsole nicht. External SIGS

Beitrag von wp_xyz »

Übrigens, bei mir ging die Maus in Mathias' und Michls Demos auch nicht. Das konnte ich jetzt beheben: Systemmenü des Konsolenfensters öffnen, und unter Eigenschaften > Optionen den QuckEdit-Modus abwählen (der ermöglicht direktes Einfügen mit Rechtsklick, ansonsten erhält man bei Rechtsklick ein Kontextmenü, über dem man auch einfügen kann --> also in der Regel verschmerzbar).
Dateianhänge
Win10-Konsole-QuickEdit.png

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: Maus funktioniert in Win 10 Konsole nicht. External SIGS

Beitrag von thosch »

Juhuuuuuuuu, Danke wie verrückt! @wp_xyz!!! Das war es. Den Quick Edit Modus ausschalten und die Maus funktioniert. Problem gelöst! :D

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Maus funktioniert in Win 10 Konsole nicht. [gelöst]

Beitrag von Mathias »

Juhuuuuuuuu, Danke wie verrückt! @wp_xyz!!! Das war es. Den Quick Edit Modus ausschalten und die Maus funktioniert.

Dies ist doch wieder mal typisch Win10. :roll: Unter XP ist es abgewählt und Win10 ist es angewählt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten