ImageList&TTreeview und Windows Skalierung

Rund um die LCL und andere Komponenten
wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von wp_xyz »

Ich verstehe schon, dass das lästig ist. Bei Glyph ist das Verhalten immerhin eingebaut. Du könntest die zusammengehörigen Bilder in der Imagelist unmittelbar aufeinander folgend, in derselben Reihenfolge wie beim Glyph, anordnen:
  • ImageIndex n: Normal, Button up
  • ImageIndex n+1: Disabled
  • ImageIndex n+2: Clicked
  • ImageIndex n+3: Down, Selected
Den ImageIndex n könntest du im Tag des Buttons sichern. Dann müsstest du für die entsprechenden Events Handler schreiben, die je nach Zustand den betreffenden ImageIndex setzen. Die Event-Handler sollten natürlich so allgemein geschrieben sein, dass man sie bei allen in Frage kommenden Buttons verwenden kann. Siehe dazu das beigefügte Beispiel, das allerdings nur die Zustände n, n+1 und n+2 verwendet (die Icons von glyfx sind relativ dezent, so dass man die Mouse-Over-Effekt nicht sehr deutlich sieht.).
Dateianhänge
speedbutton_bitbtn_glyph_replacement.zip
(31.6 KiB) 38-mal heruntergeladen

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von MmVisual »

Dein Beitrag hat sich gerade mit meiner Lösung (letzter Post Seite 1) überschnitten...
EleLa - Elektronik Lagerverwaltung - www.elela.de

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

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von wp_xyz »

In der OnPaint-Routine den ImageIndex zu ändern, ist gefährlich, da eine Änderung des Imageindex ein Neuzeichnen des Buttons bewirkt, was wieder den ImageIndex verändert, was wieder ein Neuzeichnen bewirkt... In der Praxis ist die endlose Schleife zwar dadurch unterbunden, dass der Setter des ImageIndex gleich wieder verlassen wird, wenn sich der ImageIndex nicht ändert - aber ich kann dir nicht garantieren, ob das immer und unter allen Umständen so ist und bleibt. Du bist gewarnt und weißt, wo du suchen musst, wenn dein Programm nach dem über-übernächsten Update von Lazarus in einer Totschleife hängt, wenn du mit der Maus über einen bestimmten Button fährst.

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von MmVisual »

Danke für den Hinweis, ist geändert...

Code: Alles auswählen

Procedure TfrmMain.spFilterPaint(Sender: TObject);
Var sp: TSpeedButton;
  i: Integer;
Begin
  If Not (Sender Is TSpeedButton) Then Exit;
  sp := TSpeedButton(Sender);
  If sp.Down Then
    i := 10
  Else If sp.Enabled Then
    i := 9
  Else i := 11;
  If i <> sp.ImageIndex Then
  Begin
    sp.Caption := '';
    sp.Images := imges;
    sp.ImageIndex := i;
  End;
end;   
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von MmVisual »

...
EleLa - Elektronik Lagerverwaltung - www.elela.de

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

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von wp_xyz »

Diese Leute verstehe ich nicht. Denn wenn ihnen die 200% zu klein sind, dann haben auch alle anderen Anwendungen eine zu kleine Schrift. Der natürliche Schritt wäre dann im Betriebssystem die Auflösung höher einzustellen. Wenn der Monitor nicht mehr als 200% erlaubt, können sie unter Windows 10 auch unter "Einstellungen" (Zahnrad) > "Erleichterte Bedienung" > "Text vergrößern" allein die Schrift vergrößern. (Aber Achtung: das erfordert ein sorgfältiges selbstjustierendes Layout mit Hilfe des AnchorEditor - viele Programme kommen damit nicht klar).

Ein separates "Resolution-Override" habe ich daher noch nie ausprobiert. Wahrscheinlich musst du LCL-Scaling komplett ausschalten und alles manuell skalieren. Wie ich kürzlich gelernt haben, gibt es dafür eine Methode ScaleBy(Multiplikator, Divisor), die auch die Kind-Controls mitskaliert. Wenn du unter 96ppi arbeitest, rufst du Form1.ScaleBy(288, 96) auf, um alles in Form1 auf 288ppi (300%) zu skalieren. Ob das mit den ImageListen funktioniert, weiß ich nicht (ich glaube eher nicht). Die Unit uscaledpi ist nicht nötig.

[EDIT]
Dieser Beitrag bezieht sich auf einen nicht mehr vorhandenen Beitrag...

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von MmVisual »

Sorry, ich hatte den Beitrag dann doch nochmal gelöscht, bin nun seit einigen Stunden dran und versuche alles mögliche...
Alle möglichen Leute haben nun mal "Sonderwünsche"... Ist ja auch interessant was zu realisieren.

Wichtig ist auch dass man die Formulareinstellung (Splitter Positionen) nicht im FormCreate ein list, sondern erst in FormShow. Denn im FormDestroy werden die in einer Datei gespeichert und erst im FormShow hat das Formular die richtige Pixels der gespeicherten Werte. Ich bin auch daran zu überlegen ob ich die Speicherung der Pixel-Werte beim FormDestroy nicht besser in die DesignTimePPI zurück rechne.
Wenn das Formular dann richtig läuft kommt diese Baustelle dran.
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von MmVisual »

Noch ein kleines Darstellungsproblem im "Bildlisteneditor" (Windows 200%):
Bild1.png
(34.03 KiB) Noch nie heruntergeladen
VG Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

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

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von wp_xyz »

Bitte mache folgenden Test für mich (weil ich keinen Zugriff auf so eine Riesenauflösung habe):
- Lade die Unit ImageListEditor aus dem Verzeichnis components/ideintf
- Selektiere im Formulareditor das Label "Transparent color"
- Gehe im Objektinspektor zur Property "Anchor".
- Ist akBottom markiert? Bei mir schon - entferne das Häkchen und die Colorbox sollte an die richtige Stelle springen. Wenn ja, übersetze die IDE neu und prüfe, ob der Fehler behoben ist.

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von MmVisual »

Ja, das war's. Nach Übersetzen der IDE ist das Drop-Down Feld an der richtigen Stelle.
Dankeschön!
EleLa - Elektronik Lagerverwaltung - www.elela.de

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

Re: ImageList&TTreeview und Windows Skalierung

Beitrag von wp_xyz »

Danke. Die Änderung habe ich jetzt auch in Laz main und fixes_2_2 übernommen.

Antworten