Wie melde ich einen Fehler in Lazarus?

Rund um die LCL und andere Komponenten
Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Wie melde ich einen Fehler in Lazarus?

Beitrag von Lorca »

Hallo zusammen, :)

innerhalb von TCustomGrid habe ich eine mutmaßliche Unschärfe entdeckt.
Wie melde ich das an unsere Kollegen in der Entwicklung?
Geht dies über dieses Forum?

Dies ist KEINE Kritik, sondern ein Versuch meinerseits, diese netten Kollegen die soviel Zeit und Arbeit in Lazarus investieren, ein wenig zu unterstützen. :)


Viele Grüße
Lorca

Socke
Lazarusforum e. V.
Beiträge: 3158
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: Wie melde ich einen Fehler in Lazarus?

Beitrag von Socke »

Lorca hat geschrieben:
Di 28. Sep 2021, 09:17
innerhalb von TCustomGrid habe ich eine mutmaßliche Unschärfe entdeckt.
Wie melde ich das an unsere Kollegen in der Entwicklung?
Geht dies über dieses Forum?
Fehler kannst du im Lazarus Bugtracker auf Gitlab melden. Am besten erstellst du ein Minimalbeispiel, in dem der Fehler auftritt.
Du kannst deine Fragen/Verdacht auch gerne zuerst hier posten - da finden sich immer ein paar versierte Mitglieder, die sich das ansehen. Um eine Korrektur einzureichen geht der Weg aber (fast) immer über den Bugtracker.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von PascalDragon »

Lorca hat geschrieben:
Di 28. Sep 2021, 09:17
Dies ist KEINE Kritik, sondern ein Versuch meinerseits, diese netten Kollegen die soviel Zeit und Arbeit in Lazarus investieren, ein wenig zu unterstützen. :)
So etwas wird auch nicht als Kritik gesehen. Solche Rückmeldungen sind schließlich der Kernpunkt von Open Source Communities (neben der Möglichkeit selbst Hand am Code anlegen zu können). Je nach Situation ist deine Meldung dann entweder ein Bug, ein Feature oder wird schlichtweg zurückgewiesen (im Normalfall mit einer Begründung).
FPC Compiler Entwickler

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von Lorca »

Hallo zusammen,

erst einmal danke schön für eure Antworten.
Nun, dann will ich es hier zuerst probieren.

Die Methode: TCustomGrid.MoveExtend wird von meiner abgeleiteten Klasse TCL_Extended_Grid = CLASS( TStringGrid )
gerufen um eine Synchronisation zwischen einer TTreeView und der besagten TStringGrid zu gewährleisten.

In der neuen Methode: TCL_Extended_Grid.Select_Row( iv_Row : Integer ) : Boolean;
rufe ich dann die Methode: TCustomGrid.MoveExtend auf, um die neue Zeile zu Selektieren.
BEGIN
MoveExtend( False, 0, iv_Row, False );
END;

Ja viele werden jetzt sagen: "Dann ändere doch einfach die Eigenschaft ROW".
Meine Recherchen ergaben jedoch da dies nur bedingt funktioniert.

Und hier liegt m.E. crux:
Meine TStringGrid Komponente hat als erste Spalte ein Hiddenfeld für die ID aus einer DB-Tabelle.
Ein solches non Visible Feld hat naturgemäß die Width = 0.

Somit liefert die Methode: TCustomDrawGrid.SelectCell für diese Fälle IMMER den Wert False , und die letztendlich rufende Methode TCustomGrid.MoveExtend wird sofort beendet ohne die gewünschte neue Selektion durchzuführen.

Bei der Zuweisung von z.B: ROW := 4 bleibt die Row IMMER auf den letzten vom User selektierten Wert.

Nun habe ich die Methode TCustomDrawGrid.SelectCell modifiziert und die Prüfung auf >= gelegt.
also: Result:= (ColWidths[aCol] >= 0 ) and (RowHeights[aRow] >= 0);

Und nun funktioniert es auch wenn die erste Spalte ein Hiddenfeld ist.
Meine neue abgeleitete Klasse geht nun in den Müll, da es jetzt reicht die ROW auf den gewünschten Wert zu setzen.

Der Sinn meines Postings ist das aus dieser Modifikation ein Fixing entsteht. Denn aus meiner Berufserfahrung weiß ich das
die Modifikationen bei einem Update IMMER zu Problemen geführt haben.
Vllt. sind die Kollegen aus der Lazarus Entwicklung willens dieses einmal zu überprüfen, und ggf. entsprechend zu ändern.


Viele Grüße
Lorca
Codeschipsel:
function TCustomDrawGrid.SelectCell(aCol, aRow: Integer): boolean;
begin
Result:= (ColWidths[aCol] > 0) and (RowHeights[aRow] > 0);
if Assigned(OnSelectCell) then OnSelectCell(Self, aCol, aRow, Result);
end;

function TCustomGrid.MoveExtend(Relative: Boolean; DCol, DRow: Integer; ForceFullyVisible: Boolean): Boolean;
BEGIN
Result:=TryMoveSelection(Relative,DCol,DRow);
if (not Result) then Exit;
...
END;

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

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von wp_xyz »

Also ich verstehe jetzt nicht die Details. Aber du willst TCustomGrid.SelectCell ändern, damit etwas in deiner eigenen abgeleiteten Klasse funktioniert. Das ist gefährlich, denn es kann natürlich bei ALLEN Benutzern von TStringGrid/TDrawGrid/TDBGrid irgendein unerwünschtes Verhalten bewirken, das überblicke ich nicht. Daher: Ändere nicht TCustomGrid.SelectCell sondern die Methode die deine abgeleitete Klasse erbt. SelectCell ist virtuell, d.h. dass die Methode deiner Klasse aufgerufen wird, nicht die des Vorfahren TCustomGrid. Nun betreffen evtuelle Nebeneffekte nur deinen eigenen Code.

Code: Alles auswählen

function TCL_Extended_Grid.SelectCell(aCol, aRow: Integer): boolean;  // als "override" deklarieren
begin 
  // Kein Inherited aufrufen! Das würde TCustomgrid.SelectCell ausführen.
  Result:= (ColWidths[aCol] > 0) and (RowHeights[aRow] > 0);
  if Assigned(OnSelectCell) then OnSelectCell(Self, aCol, aRow, Result);
end;

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von Lorca »

Hallo wp_xyz,

Du hast ganz recht mit deinen Worten: "Also ich verstehe jetzt nicht die Details" :)
Aber genau um die Details geht es.

Es geht hier NICHT um meine Programme oder meine Komponenten. Es geht darum, das Hiddenfelder NICHT berücksichtigt werden.
Und da ist es dann völlig egal in welchem Programm, oder bei welchem Entwickler dieser Fehler erscheint.

Fakt ist das der Wert = Null (=0) völlig unberücksichtigt bleibt.

Mein Vorschlag: Wenn es Deine Zeit erlaubt, ziehe eine TStringgrid Komponente auf eine Form, lege 2 Spalten an, die erste als non Visible
die zweite normal sichtbar. Schaufel ein paar Sätze rein und versuche Programm gesteuert die Position der aktuellen Zeile zu verändern in dem du willkürlich die ROW veränderst.

An dieser stelle würde man dann erwarten, das die neue Zeile Selektiert wurde.

Viele Grüße
Lorca
PS: SRY, aber wenn Du es genauer gelesen hättest, dann währe es dir bewusst, das diese neue Komponente nur zum testen war, da ich geschrieben habe das dieses jetzt in den MÜLL gehen kann :)

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von PascalDragon »

Lorca hat geschrieben:
Di 28. Sep 2021, 16:20
Nun habe ich die Methode TCustomDrawGrid.SelectCell modifiziert und die Prüfung auf >= gelegt.
also: Result:= (ColWidths[aCol] >= 0 ) and (RowHeights[aRow] >= 0);
Nein, das ist falsch und wie wp_xyz gesagt hat hätte das Auswirkungen auf alle. Der Punkt ist eben, dass versteckte Zellen nicht selektiert werden können.

Du solltest dein Select_Row eher wie folgt implementieren:

Code: Alles auswählen

procedure TCL_Extended_Grid.Select_Row(iv_Row : Integer): Boolean;
begin
  MoveExtend(False, GetFirstVisibleColumn, iv_Row, False);
end;
FPC Compiler Entwickler

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

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von wp_xyz »

Ich kann bei ColWidths[0] kein Fehlverhalten feststellen - siehe Anhang. Es wäre alles viel einfacher, wenn du hier einfach ein Testprogramm einhängen würdest.
Dateianhänge
hidden_col_select.zip
(2.19 KiB) 52-mal heruntergeladen

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von Lorca »

Hallo zusammen,
Hallo wp_xyz, :)

nun ich habe mir dein Beispiel Programm herunter geladen, angeschaut und gestartet.
Nachdem ich nun meine Modifikation entfernt habe, funktioniert Deine Lösung ebenfalls nicht.
Die erste Zeile der Grid bleibt selektiert. Ob ich nun den Button betätige oder nicht. Die Selektion bleibt auf Zeile 1.

Ich nehme diese Modifikation wieder rein, und es funzt.
Also woran liegt es? Habe ich eine falsche Version? Falsche Einstellungen im Lazarus?

Ich gehe mal davon aus, das Du dein Testprogramm getestet hast bevor du es hoch geladen hast.
Was läuft bei Dir anders als bei mir?
Ich arbeite unter Windows 10 mit Lazarus 2.0.12


Viele Grüße
Lorca

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von sstvmaster »

Also bei mir funktioniert es, die Selektion springt von A1 auf A5 bei Button1 klick. Hier Lazarus 2.0.12 32bit.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

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

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von wp_xyz »

Lorca hat geschrieben:
Mi 29. Sep 2021, 13:46
Nachdem ich nun meine Modifikation entfernt habe, funktioniert Deine Lösung ebenfalls nicht.
Ist nach der Rücknahme der Änderung grid.pas neu übersetzt? Am einfachsten und sichersten geht das, wenn du die IDE neu kompilierst.

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von Lorca »

Hallo wp_xyz,

ja klar, Lazarus wurde neu kompiliert. Sowohl nach der Rücknahme als auch nach der Reaktivierung.
Ich habe 64 Bit Windows 10. Kann es vllt. daran liegen?
Ich werde das mal durchdebuggen. Ich denke es könnte auch an einem der vielen {$IFDEF xxx} Bedingungen liegen

Gruß
Lorca

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

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von wp_xyz »

Lorca hat geschrieben:
Mi 29. Sep 2021, 18:46
Ich habe 64 Bit Windows 10. Kann es vllt. daran liegen?
Ich auch. Das oben gepostete Testprogramm verhält sich sowohl als 64-bit als auch als 32-bit-Anwendung korrekt.

TSchnuckenbock
Beiträge: 71
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von TSchnuckenbock »

Bei mir läuft "wp-xyz" sein Testprojekt auch so wie es soll.

Windows 10 mit 64 Bit und Lazarus 2.3.0 und das Projekt auf "Default" compiliert, was wohl auch 64 Bit ist (lib\x86_64-win64)

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: Wie melde ich einen Fehler in Lazarus?

Beitrag von Lorca »

Herzlichen Dank euch allen, für euren tollen Einsatz.

Leider läuft es bei mir nicht, so wie bei euch.
Ich werde wohl noch einige Zeit brauchen, um zu verstehen was bei mir falsch läuft.


Viele Grüße
Lorca

Antworten