- ImageIndex n: Normal, Button up
- ImageIndex n+1: Disabled
- ImageIndex n+2: Clicked
- ImageIndex n+3: Down, Selected
ImageList&TTreeview und Windows Skalierung
Re: ImageList&TTreeview und Windows Skalierung
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:
- Dateianhänge
-
speedbutton_bitbtn_glyph_replacement.zip
- (31.6 KiB) 46-mal heruntergeladen
-
- 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: ImageList&TTreeview und Windows Skalierung
Dein Beitrag hat sich gerade mit meiner Lösung (letzter Post Seite 1) überschnitten...
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: ImageList&TTreeview und Windows Skalierung
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.
-
- 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: ImageList&TTreeview und Windows Skalierung
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
-
- 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: ImageList&TTreeview und Windows Skalierung
...
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: ImageList&TTreeview und Windows Skalierung
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...
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...
-
- 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: ImageList&TTreeview und Windows Skalierung
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.
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
-
- 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: ImageList&TTreeview und Windows Skalierung
Noch ein kleines Darstellungsproblem im "Bildlisteneditor" (Windows 200%):
VG Markus
VG Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: ImageList&TTreeview und Windows Skalierung
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.
- 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.
-
- 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: ImageList&TTreeview und Windows Skalierung
Ja, das war's. Nach Übersetzen der IDE ist das Drop-Down Feld an der richtigen Stelle.
Dankeschön!
Dankeschön!
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: ImageList&TTreeview und Windows Skalierung
Danke. Die Änderung habe ich jetzt auch in Laz main und fixes_2_2 übernommen.