OnMouseUp unter Windows und Linux
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
OnMouseUp unter Windows und Linux
Lazarus ist nicht gleich Lazarus, so durfte ich feststellen. Unter Linux werden die Events anders aufgerufen als unter Windows.
Das betrifft das Mouse-Event
OnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Unter Windows ist bei Klick mit der rechten Maustaste das:
Button = mbRight
Shift = []
Unter Linux ist bei Klick mit der rechten Maustaste das:
Button = mbRight
Shift = [ssRight]
Wiso erhalte ich unter Linux was anderes als unter Windows?
Gruß Markus
Das betrifft das Mouse-Event
OnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Unter Windows ist bei Klick mit der rechten Maustaste das:
Button = mbRight
Shift = []
Unter Linux ist bei Klick mit der rechten Maustaste das:
Button = mbRight
Shift = [ssRight]
Wiso erhalte ich unter Linux was anderes als unter Windows?
Gruß Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: OnMouseUp unter Windows und Linux
Da ich kein Windows habe kann ich es nicht testen...
Aber sollte dem wirklich so sein, würde ich dieses Verhalten als Bug einstufen, da könntest du einen entsprechenden Report schreiben.
Aber sollte dem wirklich so sein, würde ich dieses Verhalten als Bug einstufen, da könntest du einen entsprechenden Report schreiben.
--
Just try it
Just try it
- af0815
- Lazarusforum e. V.
- Beiträge: 6835
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: OnMouseUp unter Windows und Linux
Hast du ein kleines Beispielprogramm ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: OnMouseUp unter Windows und Linux
Aus dem Grund sollte man [ssShift, ssCtrl, ssAlt]*Shift gegen [] prüfen und nicht Shift.MmVisual hat geschrieben: Das betrifft das Mouse-Event
OnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Unter Windows ist bei Klick mit der rechten Maustaste das:
Button = mbRight
Shift = []
Unter Linux ist bei Klick mit der rechten Maustaste das:
Button = mbRight
Shift = [ssRight]
Wiso erhalte ich unter Linux was anderes als unter Windows?
Gruß Markus
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: OnMouseUp unter Windows und Linux
Hier ein Beispiel, mein gesamter Code hat etwa 20000 Zeilen.
(Bei einem TSpeedButton ist es das gleiche.)
>> Aus dem Grund sollte man [ssShift, ssCtrl, ssAlt]*Shift gegen [] prüfen und nicht Shift.
Wiso soll ich etwas multiplizieren?
Code: Alles auswählen
procedure TfrmMain.grdMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var i: Integer;
it: TMenuItem;
q: TDataSet;
p: TPoint;
begin
stBar.Panels[1].Text := 'grdMouseUp'; // Debug-Ausgabe damit ich wusste warum/wann der unter Linux ein Exit macht
If Not (Sender Is TDBGrid) Then Exit;
stBar.Panels[1].Text := 'grdMouseUp1';
If Not (Button = mbRight) Then Exit;
stBar.Panels[1].Text := 'grdMouseUp2';
If (Not (Shift = [])) And (Not (Shift = [ssRight])) Then Exit; // Doppelte Shift-Abfrage wegen Linux/Windows
stBar.Panels[1].Text := 'grdMouseUp3';
If Not Assigned(TDBGrid(Sender).DataSource) Then Exit;
stBar.Panels[1].Text := 'grdMouseUp4';
q := TDBGrid(Sender).DataSource.DataSet;
If Not Assigned(q) Then Exit;
stBar.Panels[1].Text := 'grdMouseUp5';
If Not q.Active Then Exit;
stBar.Panels[1].Text := 'grdMouseUp6';
If q.Fields.Count <= 0 Then Exit;
stBar.Panels[1].Text := 'grdMouseUp7';
If Not (grdBauteil.MouseToGridZone(X, Y) = gzFixedCols) Then Exit;
stBar.Panels[1].Text := 'grdMouseUp8';
ErrMessagesAdd('grdMouseUp');
// Rechtsklick auf Titelleiste
popTbl.Items.Clear;
For i := 0 To q.Fields.Count - 1 Do
Begin
it := TMenuItem.Create(Self);
it.Caption := q.Fields[i].DisplayLabel;
it.Checked := q.Fields[i].Visible;
it.Tag := Integer(q.Fields[i]);
it.OnClick := @mnTbl;
popTbl.Items.Add(it);
end;
p.x := X;
p.Y := Y;
p := TDBGrid(Sender).ClientToScreen(p);
popTbl.PopUp(p.x, p.y);
ErrMessagesRemove();
end;
>> Aus dem Grund sollte man [ssShift, ssCtrl, ssAlt]*Shift gegen [] prüfen und nicht Shift.
Wiso soll ich etwas multiplizieren?
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: OnMouseUp unter Windows und Linux
Hast du schon einmal Zeichenketten addiert? Man kann sie aneinanderhängen, daher ist 'a'+'b' auch ein anderer Operator als 1+2.MmVisual hat geschrieben:>> Aus dem Grund sollte man [ssShift, ssCtrl, ssAlt]*Shift gegen [] prüfen und nicht Shift.
Wiso soll ich etwas multiplizieren?
http://www.freepascal.org/docs-html/ref ... 180009.8.5
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: OnMouseUp unter Windows und Linux
Wieder was gelernt
Dann könnte ich es so machen:

Dann könnte ich es so machen:
Code: Alles auswählen
If Not ((Shift >< [ssRight]) = []) Then Exit;
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: OnMouseUp unter Windows und Linux
Solange keine weiteren Modifier dazukommen (num lock wird z.B. auch betrachtet)MmVisual hat geschrieben:Wieder was gelernt![]()
Dann könnte ich es so machen:Code: Alles auswählen
If Not ((Shift >< [ssRight]) = []) Then Exit;
das mit dem * ist schon die genauere Version, da du damit den Zustand von allen Modifiern vergleichst, die du betrachtest
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: OnMouseUp unter Windows und Linux
Ja, stimmt. Mein Vorschlag geht nicht, denn wenn in Shift kein ssRight drin ist, dann wird da eines rein gemacht.
Es muss so aussehen:
ssNum und ssCaps sind nicht in Shift enthalten, auch nicht wenn diese gedrückt sind.
Es muss so aussehen:
Code: Alles auswählen
If Not ((Shift - [ssRight]) = []) Then Exit;
EleLa - Elektronik Lagerverwaltung - www.elela.de