TMultiButton, ein Button mit einem integrierten Button
Re: TMultiButton, ein Button mit einem integrierten Button
Ja, jetzt sehe ich es auch. Ratlos...
Re: TMultiButton, ein Button mit einem integrierten Button
Die ImageIndexPropertyEditor scheint für deine Komponente die ImageListe nicht zu finden. Gespickt von einer der JVCL-Komponenten habe ich folgenden Code angepasst:
Damit funktioniert es. Im Anhang habe ich die Komponente damit ergänzt, sowie auch den von fliegermichl richtigerweise bemängelten nil-Check für FImageList eingefügt und das Notification- und Change-Handling für die ImageList aktiviert: Notification verhindert, dass die Komponente abstürzt, wenn die ImageListe vom Formular gelöscht wird, und das in SetImages eingebaute Change-Handling updatet die Komponente, wenn in die ImageListe (die ja selbständig ist und von der Komponente nichts weiß) Bilder eingefügt bzw. daraus gelöscht werden. Das geht über eine Zwischenklasse, FImageListChangeLink, die beide betroffenen Komponenten kennt.
Code: Alles auswählen
uses
PropEdits, GraphPropEdits;
type
TTestImageImageIndexPropertyEditor = class(TImageIndexPropertyEditor)
protected
function GetImageList: TCustomImageList; override;
end;
function TTestImageImageIndexPropertyEditor.GetImageList: TCustomImagelist;
begin
Result := TTestImage(GetComponent(0)).Images;
end;
- Dateianhänge
-
ImageListTest-wp-2.zip
- (7.7 KiB) 173-mal heruntergeladen
Zuletzt geändert von wp_xyz am Di 1. Jun 2021, 23:01, insgesamt 1-mal geändert.
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: TMultiButton, ein Button mit einem integrierten Button
Hallo wp_xyz,
ich habe es natürlich gleich probiert. Ja das geht!!! Mal wieder herzlichen Dank für deine Unterstützung. Da hätte ich noch sehr lange herumprobiert um irgendwas hin zu murksen was dann halt irgendwie geht..
Ich mach mich dann mal dran meinen MultiButton etwas umzubauen.
PS. dachte mir gleich das du nicht sehr lange ratlos bist
Viele Grüße
Bernd
Edit: Wer es testen möchte sollte in der Destroy noch "FImageListChangeLink.Free;" hinzufügen.
ich habe es natürlich gleich probiert. Ja das geht!!! Mal wieder herzlichen Dank für deine Unterstützung. Da hätte ich noch sehr lange herumprobiert um irgendwas hin zu murksen was dann halt irgendwie geht..
Ich mach mich dann mal dran meinen MultiButton etwas umzubauen.
PS. dachte mir gleich das du nicht sehr lange ratlos bist

Viele Grüße
Bernd
Edit: Wer es testen möchte sollte in der Destroy noch "FImageListChangeLink.Free;" hinzufügen.
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: TMultiButton, ein Button mit einem integrierten Button
Hallo an Alle,
ich habe dank vieler Tipps und Anregungen meinen MultiButton nun ein weiteres Mal erneuert. Die Imagelist ist aus der Komponente herausgenommen und muss nun separat auf die Form gelegt werden. Im ersten Beitrag habe ich die Release 9 hochgeladen. Mit dabei sind vier Testprojekte. Getestet und entwickelt habe ich unter Linux Mint 64bit. Die Testprojekte habe ich native unter Win XP (32bit) und Win10 (64bit) kompiliert und kurz getestet. Linux 32bit und FreeBSD (64bit) habe ich crosskompiliert und in der VM ausgeführt. Es schien alles zu funktionieren. Wer möchte kann gerne mal testen und sowohl positive wie auch negative Rückmeldung geben, oder einfach auch nur seine Meinung zu der Komponente sagen.
Naja und so kann er aussehen (die Icons sind von hier https://commons.wikimedia.org/wiki/Tango_icons oder aus dem Lazarus Ordner): Viele Grüße
Bernd
ich habe dank vieler Tipps und Anregungen meinen MultiButton nun ein weiteres Mal erneuert. Die Imagelist ist aus der Komponente herausgenommen und muss nun separat auf die Form gelegt werden. Im ersten Beitrag habe ich die Release 9 hochgeladen. Mit dabei sind vier Testprojekte. Getestet und entwickelt habe ich unter Linux Mint 64bit. Die Testprojekte habe ich native unter Win XP (32bit) und Win10 (64bit) kompiliert und kurz getestet. Linux 32bit und FreeBSD (64bit) habe ich crosskompiliert und in der VM ausgeführt. Es schien alles zu funktionieren. Wer möchte kann gerne mal testen und sowohl positive wie auch negative Rückmeldung geben, oder einfach auch nur seine Meinung zu der Komponente sagen.
Naja und so kann er aussehen (die Icons sind von hier https://commons.wikimedia.org/wiki/Tango_icons oder aus dem Lazarus Ordner): Viele Grüße
Bernd
- Dateianhänge
-
- Menüband.png (90.77 KiB) 6495 mal betrachtet
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: TMultiButton, ein Button mit einem integrierten Button
Noch ein kurzer Nachtrag:
Bin eben auf die Idee gekommen das Widgetset auf qt5 umzustellen und musste feststellen das hier offenbar rgb zu bgr im Vergleich zu gtk2 vertauscht ist. Ich habe es nun noch mit if def abgefragt. Deshalb jetzt die Version 9.1.
Viele Grüße
Bernd
Bin eben auf die Idee gekommen das Widgetset auf qt5 umzustellen und musste feststellen das hier offenbar rgb zu bgr im Vergleich zu gtk2 vertauscht ist. Ich habe es nun noch mit if def abgefragt. Deshalb jetzt die Version 9.1.
Viele Grüße
Bernd
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: TMultiButton, ein Button mit einem integrierten Button
Also spätestens jetzt sollte man getmem bitten, den Multibutton in den OPM aufzunehmen.
Top!
Top!
Re: TMultiButton, ein Button mit einem integrierten Button
Ich hätte noch ein paar Anmerkungen:
- Es befinden sich im Quellcode noch einige deutsche Kommentare und deutsche Bezeichner (AlphaBlende). Vor einer breiten Veröffentlichung im OPM würde ich diese ins Englische übersetzen, um anderssprachliche User nicht auszuschließen.
- Generell: Der Button hat sehr viele Einstellmöglichkeiten. Wenn mir jetzt die Defaulteinstellung nicht gefällt, muss ich sehr viele Änderungen vornehmen, und wenn ich viele solche Buttons im Projekt habe, an vielen Stellen wiederholen - kein Wunder, wenn da etwas vergessen wird. Mir schwebt da sowas wie ein TMultiButtonStyleManager vor, eine eigene Komponente, in der man zentral alle Grundeinstellungen vornimmt (also alles außer z.B. Caption, ImageIndex, ...). TMultiButton bekommt ein Property StyleManager und holt sich seine Einstellungen von dem StyleManager. Wenn der StyleManager an den MultiButton angeschlossen ist, kopiert der Manager alle Properties in den MultiButton und aktualisiert auch den MultiButton, wenn sich eine der Einstellungen im StyleManger ändert. Die Properties im MultiButton sind in diesem Fall wirkungslos; sie werden nur benötigt, wenn kein StyleManager angeschlossen ist. Oder man könnte sich auch vorstellen, dass Einstellungen, die von denen des StyleManagers abweichen, auch weiterhin nicht mehr von diesem synchronisiert werden (wobei sich aber das Problem ergibt, wie man mit dem Fall umgeht, dass man zuerst die Einstellungen des MultiButton ändert, dann den StyleManager anschließt und sich wundert, warum die Einstellungen des StyleManagers nicht übernommen werden).
- Nochmals High-DPI: Die Paletten-Icons der Komponente sind nicht mitgeliefert, und ich bin nicht in die Details gegangen. Aber hast du daran gedacht, diese in drei Auflösungen anzulegen und in die Resource zu schreiben? Das 24x24 Grundbild trägt den Namen der Komponente und entspricht der 100%-Auflösung. Dann brauchst du noch ein Bild in 150% (36x36) - das trägt den Zusatz "_150" am Ende das Dateinamens, sowie ein Bild in 200% (48x48) mit Zusatz "_200". Die IDE sorgt dann dafür, dass je nach Bildschirmpixeldichte das Icon in der richtigen Größe in der Komponenten-Palette verwendet wird.
- Du fügst die Komponente in die Palette "Standard" ein. Du kannst das natürlich machen wie du willst, aber ich sehe die Paletten "Standard", "Additional" und "Common Controls" als die für die Delphi-Komponenten an, und würde da nicht nach einer Fremdkomponente suchen. Entweder du spendierst dem Button eine eigene Lasche (ok - für ein, zwei (mit StyleManager) ist eine eigene Lasche vielleicht übertrieben), oder du packst sie in "Misc".
- Es befinden sich im Quellcode noch einige deutsche Kommentare und deutsche Bezeichner (AlphaBlende). Vor einer breiten Veröffentlichung im OPM würde ich diese ins Englische übersetzen, um anderssprachliche User nicht auszuschließen.
- Generell: Der Button hat sehr viele Einstellmöglichkeiten. Wenn mir jetzt die Defaulteinstellung nicht gefällt, muss ich sehr viele Änderungen vornehmen, und wenn ich viele solche Buttons im Projekt habe, an vielen Stellen wiederholen - kein Wunder, wenn da etwas vergessen wird. Mir schwebt da sowas wie ein TMultiButtonStyleManager vor, eine eigene Komponente, in der man zentral alle Grundeinstellungen vornimmt (also alles außer z.B. Caption, ImageIndex, ...). TMultiButton bekommt ein Property StyleManager und holt sich seine Einstellungen von dem StyleManager. Wenn der StyleManager an den MultiButton angeschlossen ist, kopiert der Manager alle Properties in den MultiButton und aktualisiert auch den MultiButton, wenn sich eine der Einstellungen im StyleManger ändert. Die Properties im MultiButton sind in diesem Fall wirkungslos; sie werden nur benötigt, wenn kein StyleManager angeschlossen ist. Oder man könnte sich auch vorstellen, dass Einstellungen, die von denen des StyleManagers abweichen, auch weiterhin nicht mehr von diesem synchronisiert werden (wobei sich aber das Problem ergibt, wie man mit dem Fall umgeht, dass man zuerst die Einstellungen des MultiButton ändert, dann den StyleManager anschließt und sich wundert, warum die Einstellungen des StyleManagers nicht übernommen werden).
- Nochmals High-DPI: Die Paletten-Icons der Komponente sind nicht mitgeliefert, und ich bin nicht in die Details gegangen. Aber hast du daran gedacht, diese in drei Auflösungen anzulegen und in die Resource zu schreiben? Das 24x24 Grundbild trägt den Namen der Komponente und entspricht der 100%-Auflösung. Dann brauchst du noch ein Bild in 150% (36x36) - das trägt den Zusatz "_150" am Ende das Dateinamens, sowie ein Bild in 200% (48x48) mit Zusatz "_200". Die IDE sorgt dann dafür, dass je nach Bildschirmpixeldichte das Icon in der richtigen Größe in der Komponenten-Palette verwendet wird.
- Du fügst die Komponente in die Palette "Standard" ein. Du kannst das natürlich machen wie du willst, aber ich sehe die Paletten "Standard", "Additional" und "Common Controls" als die für die Delphi-Komponenten an, und würde da nicht nach einer Fremdkomponente suchen. Entweder du spendierst dem Button eine eigene Lasche (ok - für ein, zwei (mit StyleManager) ist eine eigene Lasche vielleicht übertrieben), oder du packst sie in "Misc".
Re: TMultiButton, ein Button mit einem integrierten Button
Wenn ich den Verlauf hier sehe, Respekt, super Arbeit!
Nur als Anregung, wäre es nicht besser, da die Source ja verfügbar ist, diese Arbeit per Versionskontrolle offiziell zu pflegen (z.B. SourceForge, GitHub etc.)? Dann könnte man besser bei möglichen Problemen Ursachen finden. Auch Patches sind dann recht einfach erstellbar.
Nur als Anregung, wäre es nicht besser, da die Source ja verfügbar ist, diese Arbeit per Versionskontrolle offiziell zu pflegen (z.B. SourceForge, GitHub etc.)? Dann könnte man besser bei möglichen Problemen Ursachen finden. Auch Patches sind dann recht einfach erstellbar.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 758
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: TMultiButton, ein Button mit einem integrierten Button
Hallo Bernd,
ich muss leider ein Problemchen melden. Im Projekt "TestProjekt2_Menueband" bekomme ich einen Fehler in PointInEllipse
Jetzt muss ich gleich dazu sagen, es ist extrem problematisch diesen Fehler zu reproduzieren,
ich habe es aber schon 6 mal hinbekommen.
Nachdem der Fehler aufgetreten war, habe ich das Programm erneut gestartet und alles ist okay.
Irgendwann nach dem x ten Start tauchte der Fehler aber wieder auf und nun habe ich festgestellt,
das der Übergabeparameter aRect in PointInEllipse anscheinend komplett auf 0 steht.
Die x und y Werte sind jedoch initialisiert.
Übergabeparameter x = 50 y=28
Übergabeparameter x = 53 y=23
aRect ist komplett 0 Was habe ich genau gemacht :
Ich bin quasi alle Buttons durchgegangen:
Neu
unteren Neu Button
Öffnen
unteren Öffnen Button
Schließen
unteren Schließen Button
Speichern
Unteren Speichern Button
Speichern Unter
unteren Speichern Unter Button
Exportieren
unteren Exportieren Button
Drucken
unteren Drucken Button
Info
unteren Info Button
dann alle "Laufwerkstasten" ein mal klicken
dann die Fahnen nacheinander,
bei der 2ten oder 3 Fahne passierte dann der Fehler
Ob das mit der Reihenfolge so zusammenhängt kann ich nicht sagen, zumindest reproduzierbar, wenn auch nicht immer, war es bei mir in dieser Reihenfolge.
Nach erneutem Start des Programms habe ich es dann aber nicht mehr hinbekommen.
So habe ich Lazarus verlassen und das Projekt aus dem Explorer neu in Lazarus geladen und dann konnte ich den Fehler wieder reproduzieren.
Jetzt habe ich das nochmal ausprobiert außerhalb der IDE, also direkt die .exe aufgerufen
und hier trat der Fehler auch auf: Ich denke mal es wird sicher schwierig das zu ergründen...
Ansonsten wieder Super Chick die Oberfläche.
Achja, ich habe Windows 10 64Bit und Lazarus 2.08 FPC 3.04
-----
ein erneuter Versuch: Nur die Buttons der Reihe nach durchgeklickt und es tritt wieder bei der 3 Fahne ein Fehler Fehler auf,
Nochmal probiert, Ja wieder.
Jetzt ist es direkt nach dem 2ten Fahnenklick aufgetreten., also nach dem Starten nur die ganz rechte Fahne, dann die daneben und bum...
Siro
ich muss leider ein Problemchen melden. Im Projekt "TestProjekt2_Menueband" bekomme ich einen Fehler in PointInEllipse
Jetzt muss ich gleich dazu sagen, es ist extrem problematisch diesen Fehler zu reproduzieren,
ich habe es aber schon 6 mal hinbekommen.
Nachdem der Fehler aufgetreten war, habe ich das Programm erneut gestartet und alles ist okay.
Irgendwann nach dem x ten Start tauchte der Fehler aber wieder auf und nun habe ich festgestellt,
das der Übergabeparameter aRect in PointInEllipse anscheinend komplett auf 0 steht.
Die x und y Werte sind jedoch initialisiert.
Übergabeparameter x = 50 y=28
Übergabeparameter x = 53 y=23
aRect ist komplett 0 Was habe ich genau gemacht :
Ich bin quasi alle Buttons durchgegangen:
Neu
unteren Neu Button
Öffnen
unteren Öffnen Button
Schließen
unteren Schließen Button
Speichern
Unteren Speichern Button
Speichern Unter
unteren Speichern Unter Button
Exportieren
unteren Exportieren Button
unteren Drucken Button
Info
unteren Info Button
dann alle "Laufwerkstasten" ein mal klicken
dann die Fahnen nacheinander,
bei der 2ten oder 3 Fahne passierte dann der Fehler
Ob das mit der Reihenfolge so zusammenhängt kann ich nicht sagen, zumindest reproduzierbar, wenn auch nicht immer, war es bei mir in dieser Reihenfolge.
Nach erneutem Start des Programms habe ich es dann aber nicht mehr hinbekommen.
So habe ich Lazarus verlassen und das Projekt aus dem Explorer neu in Lazarus geladen und dann konnte ich den Fehler wieder reproduzieren.
Jetzt habe ich das nochmal ausprobiert außerhalb der IDE, also direkt die .exe aufgerufen
und hier trat der Fehler auch auf: Ich denke mal es wird sicher schwierig das zu ergründen...
Ansonsten wieder Super Chick die Oberfläche.
Achja, ich habe Windows 10 64Bit und Lazarus 2.08 FPC 3.04
-----
ein erneuter Versuch: Nur die Buttons der Reihe nach durchgeklickt und es tritt wieder bei der 3 Fahne ein Fehler Fehler auf,
Nochmal probiert, Ja wieder.
Jetzt ist es direkt nach dem 2ten Fahnenklick aufgetreten., also nach dem Starten nur die ganz rechte Fahne, dann die daneben und bum...
Siro
Zuletzt geändert von siro am So 6. Jun 2021, 13:59, insgesamt 1-mal geändert.
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: TMultiButton, ein Button mit einem integrierten Button
Hallo zusammen,
vielen Dank für die Rückmeldungen!
@Siro: Ich habe es jetzt unter Windows10 und Linux x mal probiert, bei mir kommt es leider nicht. Aber wenn es immer bei der Flagge kam dann hat es mich zuerst mal gewundert das da die PointInEllipse überhaupt aufgerufen wird. Ich habe da in der Case-Abfrage bei mbsCircle die Function für die Ellipse, statt der für deinen Kreis hinterlegt. Das habe ich jetzt angepasst. Das kann aber nicht der Grund für die Division durch Null sein, deshalb habe ich in der MouseMove noch eine Abfrage auf Hotspot.width<=0 eingebaut. Eventuell wird da ab und an der MessageButton nicht rechtzeitig berechnet? Ich hänge mal meinen Test (9.2)an. Wenn du möchtest kannst du es ja bei Gelegenheit mal testen.
Ansonsten Danke für die positiven Antworten.
@fliegermichl:
An so was wie den OPM habe ich als "Hobby-Akrobat" ehrlich gesagt noch nicht gedacht. Da spricht aus meiner Sicht zwar nichts dagegen, jedoch bin ich mir bei weitem nicht sicher ob nicht noch irgendwo, in irgendeiner Konstellation ein Wurm drin ist. Ich glaube auch nicht das ich mit meinem Wissen auf jedes Fehlverhalten immer eine Antwort haben werde.
@michl:
Ja sicherlich. Ich lese auch hier im Forum die Beiträge zu SourceForge und GitHub schon länger mit Interesse. Ich konnte mich aber noch nicht aufraffen. Ich nehme es mir mal für den nächsten Winter vor. Ich denke aber das ist mit Nullahnung schon ein Pfund.
@wp_xyz:
Kurzum du hast mit allem Recht. Die Paletten-Icons habe ich schlicht vergessen. Kann ich bei der nächsten Version aber hinzufügen. Die Idee mit dem TMultiButtonStyleManager fasziniert mich, auch wenn ich da bestimmt länger dran knobeln werde. Ich dachte bis jetzt an eine Funktion wie "alles auf Systemfarben setzen", habe aber gemerkt das das unter verschiedenen OS gar nicht so leicht geht. Jedenfalls habe ich wieder viel zum Nachdenken!
Viele Grüße
Bernd
vielen Dank für die Rückmeldungen!
@Siro: Ich habe es jetzt unter Windows10 und Linux x mal probiert, bei mir kommt es leider nicht. Aber wenn es immer bei der Flagge kam dann hat es mich zuerst mal gewundert das da die PointInEllipse überhaupt aufgerufen wird. Ich habe da in der Case-Abfrage bei mbsCircle die Function für die Ellipse, statt der für deinen Kreis hinterlegt. Das habe ich jetzt angepasst. Das kann aber nicht der Grund für die Division durch Null sein, deshalb habe ich in der MouseMove noch eine Abfrage auf Hotspot.width<=0 eingebaut. Eventuell wird da ab und an der MessageButton nicht rechtzeitig berechnet? Ich hänge mal meinen Test (9.2)an. Wenn du möchtest kannst du es ja bei Gelegenheit mal testen.
Ansonsten Danke für die positiven Antworten.
@fliegermichl:
An so was wie den OPM habe ich als "Hobby-Akrobat" ehrlich gesagt noch nicht gedacht. Da spricht aus meiner Sicht zwar nichts dagegen, jedoch bin ich mir bei weitem nicht sicher ob nicht noch irgendwo, in irgendeiner Konstellation ein Wurm drin ist. Ich glaube auch nicht das ich mit meinem Wissen auf jedes Fehlverhalten immer eine Antwort haben werde.
@michl:
Ja sicherlich. Ich lese auch hier im Forum die Beiträge zu SourceForge und GitHub schon länger mit Interesse. Ich konnte mich aber noch nicht aufraffen. Ich nehme es mir mal für den nächsten Winter vor. Ich denke aber das ist mit Nullahnung schon ein Pfund.
@wp_xyz:
Kurzum du hast mit allem Recht. Die Paletten-Icons habe ich schlicht vergessen. Kann ich bei der nächsten Version aber hinzufügen. Die Idee mit dem TMultiButtonStyleManager fasziniert mich, auch wenn ich da bestimmt länger dran knobeln werde. Ich dachte bis jetzt an eine Funktion wie "alles auf Systemfarben setzen", habe aber gemerkt das das unter verschiedenen OS gar nicht so leicht geht. Jedenfalls habe ich wieder viel zum Nachdenken!
Viele Grüße
Bernd
- Dateianhänge
-
- multibutton.pas
- (83.05 KiB) 179-mal heruntergeladen
-
- Beiträge: 758
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: TMultiButton, ein Button mit einem integrierten Button
Ich wunderte mich auch warum er PointInEllipse aufruft. Ich habe mal einen BreakPoint direkt drauf gesetzt.
Ja, er landet dort und dann tritt der Fehler auf.
Bei deiner neuen Version kommt er da anscheinend nicht mehr an.
Sieht gut aus.
Ja, er landet dort und dann tritt der Fehler auf.
Bei deiner neuen Version kommt er da anscheinend nicht mehr an.
Sieht gut aus.
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
-
- Beiträge: 726
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: TMultiButton, ein Button mit einem integrierten Button
Sieht gut aus.
Edit: Lizenz hatte ich falsch verstanden, es ist okay.
Edit: Lizenz hatte ich falsch verstanden, es ist okay.
Re: TMultiButton, ein Button mit einem integrierten Button
Hi Jungs,
bin wieder zurück aus dem - computerlosen - Urlaub
Ich sehe, da hat sich einiges getan am Button, Respekt! Werde mein Projekt gleich mal nachziehen auf die letzte Version.
Auf frohes Werkeln ... bis zu den nächsten Ferien
HG, Armin.
P.S. ich schließe mich Siros Anregung, ein SVN oder GIT zu machen, gere an. Wenn Dir (Bernd) das zu mühsam ist, ich habe ein GIT am Start, und biete Dir gerne an, dort eine Heimat für den Button einzurichten. Aber ein Git ist in 10 Minuten gemacht ... gut, GIT gehört Microsoft, passt mir auch nicht, aber was solls. Nachdem sie sich schon meinen Rechner unter den Nagel gerissen haben - Windows 10 kommt einer Enteignung der Hardware ziemlich nahe - sollen sie halt den Rest auch noch haben. Wer bin ich kleiner Krabbler um gegen einen Milliardenkonzern anzustänkern.
Nur meinen Hund, den bekommen sie nicht!
Ich hätte auch noch ein SVN bei SourceForge, aber irgendwie haben ich den Eindruck, SVN geht zunehmend den Bach runter, jedenfalls muss ich meistens erklären, warum ich "noch" SVN habe und "immer noch" kein GIT.
HG, Armin.
bin wieder zurück aus dem - computerlosen - Urlaub

Auf frohes Werkeln ... bis zu den nächsten Ferien

HG, Armin.
P.S. ich schließe mich Siros Anregung, ein SVN oder GIT zu machen, gere an. Wenn Dir (Bernd) das zu mühsam ist, ich habe ein GIT am Start, und biete Dir gerne an, dort eine Heimat für den Button einzurichten. Aber ein Git ist in 10 Minuten gemacht ... gut, GIT gehört Microsoft, passt mir auch nicht, aber was solls. Nachdem sie sich schon meinen Rechner unter den Nagel gerissen haben - Windows 10 kommt einer Enteignung der Hardware ziemlich nahe - sollen sie halt den Rest auch noch haben. Wer bin ich kleiner Krabbler um gegen einen Milliardenkonzern anzustänkern.
Nur meinen Hund, den bekommen sie nicht!
Ich hätte auch noch ein SVN bei SourceForge, aber irgendwie haben ich den Eindruck, SVN geht zunehmend den Bach runter, jedenfalls muss ich meistens erklären, warum ich "noch" SVN habe und "immer noch" kein GIT.
HG, Armin.
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: TMultiButton, ein Button mit einem integrierten Button
Hallo Armin,
na da hoffe ich mal du hast dich gut erholt. Meine computerfreie Zeit (Urlaub) beginnt am Freitag. Vielen Dank für dein Angebot mit Git. Ich denke aber über kurz oder lang muss ich den Schritt wohl wagen und mich damit selber beschäftigen.
Über das von Siro geschilderte Problem habe ich noch etwas nachgedacht. Leider kann ich es auch nach längerem Testen bei mir nicht nachstellen. Wenn es bei den Fahnen kommt hängt es aber damit zusammen das der MessageButton noch nicht berechnet wurde und in der MouseMove bereits die PointIn.. aufgerufen wird, was dann eine Division durch Null (weil Hotspot noch leer ist) verursacht. In der Komponente befindet sich die Property CalculateAlthoughInvisible (berechnen obwohl unsichtbar). Die ist dafür gedacht das falls der MessageButton erst zur Laufzeit sichtbar wird, er bereits beim Start des Programmes die richtige Größe hat. Diese Eigenschaft wird nun beim Setzen von ShowMsgButtonInGroup automatisch gesetzt. Das bedeutet beim Starten des Programmes wird in dem Fall der Hotspot des MessageButtons definitiv berechnet und steht immer zur Verfügung. Nachteil: wenn man dann das Design des Buttons nochmal um schmeist und ShowMsgButtonInGroup wieder weg nimmt muss man halt die aktivierte Eigenschaft CalculateAlthoughInvisible falls gewünscht wieder deaktivieren.
Ich hoffe damit ist das Problem sicher behoben. In der Anlage für jeden der es Testen möchte die optimierte Version 9.3.
Sofern ich nichts übersehen habe sind nun alle deutschen Kommentare durch englische ersetzt. Auch habe ich drei Paletten-Icons in den passenden Größen eingefügt und die Komponente in die Palette "Misc" verschoben.
Viele Grüße und Danke für alle Rückmeldungen
Bernd
na da hoffe ich mal du hast dich gut erholt. Meine computerfreie Zeit (Urlaub) beginnt am Freitag. Vielen Dank für dein Angebot mit Git. Ich denke aber über kurz oder lang muss ich den Schritt wohl wagen und mich damit selber beschäftigen.
Über das von Siro geschilderte Problem habe ich noch etwas nachgedacht. Leider kann ich es auch nach längerem Testen bei mir nicht nachstellen. Wenn es bei den Fahnen kommt hängt es aber damit zusammen das der MessageButton noch nicht berechnet wurde und in der MouseMove bereits die PointIn.. aufgerufen wird, was dann eine Division durch Null (weil Hotspot noch leer ist) verursacht. In der Komponente befindet sich die Property CalculateAlthoughInvisible (berechnen obwohl unsichtbar). Die ist dafür gedacht das falls der MessageButton erst zur Laufzeit sichtbar wird, er bereits beim Start des Programmes die richtige Größe hat. Diese Eigenschaft wird nun beim Setzen von ShowMsgButtonInGroup automatisch gesetzt. Das bedeutet beim Starten des Programmes wird in dem Fall der Hotspot des MessageButtons definitiv berechnet und steht immer zur Verfügung. Nachteil: wenn man dann das Design des Buttons nochmal um schmeist und ShowMsgButtonInGroup wieder weg nimmt muss man halt die aktivierte Eigenschaft CalculateAlthoughInvisible falls gewünscht wieder deaktivieren.
Ich hoffe damit ist das Problem sicher behoben. In der Anlage für jeden der es Testen möchte die optimierte Version 9.3.
Sofern ich nichts übersehen habe sind nun alle deutschen Kommentare durch englische ersetzt. Auch habe ich drei Paletten-Icons in den passenden Größen eingefügt und die Komponente in die Palette "Misc" verschoben.
Viele Grüße und Danke für alle Rückmeldungen
Bernd
- Dateianhänge
-
multibutton.pas.zip
- (14.04 KiB) 185-mal heruntergeladen
Re: TMultiButton, ein Button mit einem integrierten Button
Hi Bernd,
Houston ... ich hab da ein paar Probleme mit dem MultiButton. Im Zusammenhang mit High-DPI und WIndows 10.
Problem 1 (Mini-Problem zum Aufwärmen): der Speedbutton reagiert richtig auf das Verstellen der Anzeigeskalierung zur Laufzeit, das klappt sogar wenn ich (in einer Dual-Monitor Konfig) das laufende Programm zwischen einer 100% und einer 150% Anzeige hin und herschiebe. Der Multibutton reagiert nicht, er ändert sich erst wenn das Programm neu gestartet wird.
Problem 2 (Demo-Projekt hängt an): das Auswählen des geeignetsten Icons aus der ImageList arbeitet nicht, oder ich finde nicht heraus wie ich es richtig konfigurieren muss. Der Speedbutton machts richtig und geht bei Skalierung=150% vom 16 Pixel Icon auf das 24 Pixen Icon, der Multibutton rechnet das 16x16 Image groß. Beide verwenden die selbe ImageList, da sollten sich doch eigentlich beide gleich verhalten?
Zum Testen verwende ich einen 96Dpi Schirm und schalte unter WIndows bei den Anzeigeeinstellungen zwischen 100% und 150% um. Ich bekomme allerdings exakt das selbe Verhalten wenn ich das Programm rübernehme auf mein Laptop, das hat einen High-Dpi Schirm mit 140Dpi.
Verwendete Versionen:
Lazarus 2.0.12, Windows 10 21H1/Windows 7, MultiButton 1.1.9.3 aus dem Forenbeitrag oben.
Zum Problem von Siro: leider kann ich dazu keinen nützlichen Beitrag liefern, ich verwende den Button jetzt schon ca. 4 Wochen produktiv, und hatte keinen einzigen Absturz. Ich verwende allerdings nur den "äußeren" Button.
Houston ... ich hab da ein paar Probleme mit dem MultiButton. Im Zusammenhang mit High-DPI und WIndows 10.
Problem 1 (Mini-Problem zum Aufwärmen): der Speedbutton reagiert richtig auf das Verstellen der Anzeigeskalierung zur Laufzeit, das klappt sogar wenn ich (in einer Dual-Monitor Konfig) das laufende Programm zwischen einer 100% und einer 150% Anzeige hin und herschiebe. Der Multibutton reagiert nicht, er ändert sich erst wenn das Programm neu gestartet wird.
Problem 2 (Demo-Projekt hängt an): das Auswählen des geeignetsten Icons aus der ImageList arbeitet nicht, oder ich finde nicht heraus wie ich es richtig konfigurieren muss. Der Speedbutton machts richtig und geht bei Skalierung=150% vom 16 Pixel Icon auf das 24 Pixen Icon, der Multibutton rechnet das 16x16 Image groß. Beide verwenden die selbe ImageList, da sollten sich doch eigentlich beide gleich verhalten?
Zum Testen verwende ich einen 96Dpi Schirm und schalte unter WIndows bei den Anzeigeeinstellungen zwischen 100% und 150% um. Ich bekomme allerdings exakt das selbe Verhalten wenn ich das Programm rübernehme auf mein Laptop, das hat einen High-Dpi Schirm mit 140Dpi.
Verwendete Versionen:
Lazarus 2.0.12, Windows 10 21H1/Windows 7, MultiButton 1.1.9.3 aus dem Forenbeitrag oben.
Zum Problem von Siro: leider kann ich dazu keinen nützlichen Beitrag liefern, ich verwende den Button jetzt schon ca. 4 Wochen produktiv, und hatte keinen einzigen Absturz. Ich verwende allerdings nur den "äußeren" Button.
- Dateianhänge
-
HighDPI.zip
- (1.18 MiB) 168-mal heruntergeladen