TListView und Symbole, Darstellung fehlerhaft (Windows)

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.

TListView und Symbole, Darstellung fehlerhaft (Windows)

Beitragvon Mathias » 30. Jul 2017, 17:10 TListView und Symbole, Darstellung fehlerhaft (Windows)

Wen man die ListView mit neuen Einträgen aktualisieren will, ist die Darstellung unter Windows fehlerhaft.

Klammert man diese Zeiles aus, welche die Symbole auf den Canvas schreibt, ist die Darstellung unter nativen Windows richtig, aber dies ist nur ein bebastel.
Code: Alles auswählen
  for i := 0 to ImageList1.Count - 1 do begin
    //ImageList1.Draw(Canvas, i * 16, 0, i);
  end;   

Startet man das Programm aber mit Wine, dann bliebt die Darstellung fehlerhaft.

Für weitere Detail bitte hier weiter lesen: viewtopic.php?f=11&t=10911&start=68

Ab hier gibt es ein kleines ListView-Demo: viewtopic.php?f=11&t=10911&start=79


Unter Linux funktioniert alles einwandfrei.
Dateianhänge
ListView.tar.gz
(128.63 KiB) 14-mal heruntergeladen
Zuletzt geändert von Mathias am 31. Jul 2017, 16:04, insgesamt 1-mal geändert.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4351
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon compmgmt » 30. Jul 2017, 17:17 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

Zu erwähnen ist noch, dass es unter der Lazarus 1.6.0/FPC 3.0.0 noch funktioniert hat, erst unter Lazarus 1.6.4/FPC 3.0.2 tritt der Fehler auf.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 351
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon wp_xyz » 30. Jul 2017, 19:47 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

Nach dem Neubefüllen der ImageList braucht diese offenbar ein neues Handle. Dazu einfach "ImageList1.Handle;" aufrufen, z.B. nach ImageList1.EndUpdate
wp_xyz
 
Beiträge: 3006
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 30. Jul 2017, 20:14 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

wp_xyz hat geschrieben:Nach dem Neubefüllen der ImageList braucht diese offenbar ein neues Handle. Dazu einfach "ImageList1.Handle;" aufrufen, z.B. nach ImageList1.EndUpdate

Unter Nativen Windows funktioniert dein Tip, aber unter Wine geht es immer noch nicht, anscheinend macht dies etwa das selbe wie Canvas-Draw.

Noch etwas geht unter Windows nicht, wen man die List View in der Breite verändert, wird die Symbol-Anordnung nicht automatisch der ListView angepasst.
Unter Linux funktioniert auch dies Fehlerfrei.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4351
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 30. Jul 2017, 20:56 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

Versuch mal, die ImageList vom Listview zu lösen (Listview1.LargeImages := nil) und gleich darauf dann wieder zu verbinden (Listview1.LargeImages := ImageList1).
wp_xyz
 
Beiträge: 3006
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 30. Jul 2017, 20:58 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

wp_xyz hat geschrieben:Versuch mal, die ImageList vom Listview zu lösen (Listview1.LargeImages := nil) und gleich darauf dann wieder zu verbinden (Listview1.LargeImages := ImageList1).

Diese Idee hatte ich auch schon, aber leider ohne Erfolg. :cry:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4351
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon compmgmt » 31. Jul 2017, 05:50 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

wp_xyz hat geschrieben:Nach dem Neubefüllen der ImageList braucht diese offenbar ein neues Handle. Dazu einfach "ImageList1.Handle;" aufrufen, z.B. nach ImageList1.EndUpdate
wp_xyz hat geschrieben:Versuch mal, die ImageList vom Listview zu lösen (Listview1.LargeImages := nil) und gleich darauf dann wieder zu verbinden (Listview1.LargeImages := ImageList1).
Es geht ja nicht darum, jetzt eine Lösung für dieses Problem zu finden, sondern zu erwähnen, dass es ein Bug ist und behoben werden sollte. Denn unter Lazarus 1.6.0/FPC 3.0.0 hat noch alles wunderbar funktioniert

Mathias hat geschrieben:Unter Nativen Windows funktioniert dein Tip, aber unter Wine geht es immer noch nicht, anscheinend macht dies etwa das selbe wie Canvas-Draw.
Das wird wahrscheinlich an Wine liegen, da kannst du sehr wenig machen. Denn die Idee hinter Wine ist ja, Windows-Programme unter Linux lauffähig zu machen. Also muss Wine sich an die Programme und an Windows anpassen und nicht umgekehrt ;) (Außer unter 1.6.0 hat noch alles ohne Probleme funktioniert, dann liegt es natürlich an Lazarus)
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 351
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon wp_xyz » 31. Jul 2017, 12:08 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

compmgmt hat geschrieben:Es geht ja nicht darum, jetzt eine Lösung für dieses Problem zu finden, sondern zu erwähnen, dass es ein Bug ist und behoben werden sollte. Denn unter Lazarus 1.6.0/FPC 3.0.0 hat noch alles wunderbar funktioniert

Dann ist das hier die falsche Stelle. Die Entwickler der LCL lesen üblicherweise nicht das deutsche Forum. Schreibe einen Report in den Bug-Tracker und füge ein Demo-Projekt bei, dann ist alles sauber dokumentiert, und es wird sich jemand darum kümmern.
wp_xyz
 
Beiträge: 3006
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 31. Jul 2017, 16:20 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

Dann ist das hier die falsche Stelle. Die Entwickler der LCL lesen üblicherweise nicht das deutsche Forum. Schreibe einen Report in den Bug-Tracker und füge ein Demo-Projekt bei, dann ist alles sauber dokumentiert, und es wird sich jemand darum kümmern.

Ich habe es gerade hochgeladen.

https://bugs.freepascal.org/view.php?id=32229

Ich habe folgende Fehlerbeschreibung mit Google übersetzt:
Code: Alles auswählen
Wen man bei TListView die Darstellung vsIcon oder vsSmallIcon wählt und und die TListView mit einer ImageList  verknüpft wird am Anfang noch alles korrekt dargestellt. änder man aber die ImageList zur Laufzeit, dann gibt es eine fehlerhafte Darstellung. Mit der Vorgängerversion von Lazarus trat der Fehler nicht auf.
Siehe Demo im Anhang.
 
Unter Linux ist die Darstellung einwandfrei.
 
Mehr Information im deutschen Forum. viewtopic.php?f=19&t=10942&p=96968#p96968
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4351
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 31. Jul 2017, 22:19 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

Mathias, jetzt habe ich mich doch mit diesem Fehler befasst, obwohl ich es eigentlich gar nicht wollte. Die schuldige Revision habe ich gefunden. Entferne bitte vorübergehend in Datei imglist.inc, Prozedur TCustomImageList.Clear das mit einem {$IFDEF WINDOWS} umgebene "DestroyReference", prüfe dein Testprogramm unter Wine und schreibe das Ergebnis als Kommentar an deinen Bug-Report, insbesondere wenn der Fehler weiterhin besteht.

Code: Alles auswählen
procedure TCustomImageList.Clear;
begin
  if FCount = 0 then Exit;
  if HandleAllocated
  then TWSCustomImageListClass(WidgetSetClass).Clear(Self);
  {$ifdef windows}
//  DestroyReference; //Issue #0029905: images added after clear aren't shown if width or height changed   // <--- DIESE ZEILE ENTFERNEN
  {$endif}
  SetLength(FData, 0);
  FAllocCount := 0;
  ClearOverlays;
 
  FChanged := True;
  FCount := 0;
  Change;
end;
wp_xyz
 
Beiträge: 3006
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 1. Aug 2017, 15:53 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

prüfe dein Testprogramm unter Wine und schreibe das Ergebnis als Kommentar an deinen Bug-Report, insbesondere wenn der Fehler weiterhin besteht.

Unter nativen Windows scheint es zu funktionieren, aber in Wine kommen zwar jetzt die Symbole, aber so wie es scheint, wird irgend ein Offset nicht auf Null gesetzt. (Siehe Anhang)
Ich habe noch die Beispiele mit TreeView und StringGrid ausprobiert, dort scheint es zu funktionieren. Das man bei Stringrid Iconen einfügen kann, war mir bis jetzt nicht bekannt.
Dateianhänge
Bildschirmfoto vom 2017-08-01 16-48-53.png
Bildschirmfoto vom 2017-08-01 16-49-01.png
Bildschirmfoto vom 2017-08-01 16-49-05.png
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4351
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 1. Aug 2017, 20:57 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

Das sieht so aus, als ob zwar die Bilder selbst gelöscht, aber der Zähler für die enthaltenen Bilder nicht auf Null zurückgesetzt wird.
wp_xyz
 
Beiträge: 3006
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 1. Aug 2017, 21:36 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

Was noch komisch ist, wieso geht es nur in Wine nicht ?

Ich habe den Code gerade noch mit Delphi 6 getestet, dort funktioniert es in Wine. Somit wäre Wine eigentlich unschuldig.

Zwischen Linux und Windows gibt es noch einen Unterschied.
Unter Windows wird der Text zentriert zwischen dem Icon geschrieben, bei Linux ist er linksbündig.
Siehe Anhang.
Dateianhänge
Bildschirmfoto vom 2017-08-01 22-39-05.png
Zuletzt geändert von Mathias am 1. Aug 2017, 22:30, insgesamt 1-mal geändert.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4351
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 1. Aug 2017, 22:25 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

Du hast 2x Windows geschrieben. Ich nehme an, Wine ist das linke Bild?

Also ich bezweifle, ob die Wine-Probleme gefixt werden, die möglicherweise auch noch von der Linux-Distribution abhängen... Aber das generelle Windows-Problem, dass die Icons plötzlich verschwinden, muss natürlich behoben werden.
wp_xyz
 
Beiträge: 3006
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 1. Aug 2017, 22:29 Re: TListView und Symbole, Darstellung fehlerhaft (Windows)

Das Bild links ist Linux nativ.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4351
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Lazarus - Bugs



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried