Ein Slider, mal testen
-
- Beiträge: 524
- 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
Ein Slider, mal testen
Hallo Forum,
mit meinem Werk werde ich vermutlich vielen von euch ein Lächeln auf das Gesicht zaubern, aber dessen ungeachtet stelle ich hier meine Komponente vor.
Es ist ein Schieberegler. Ja gibt's natürlich schon aber ich wollte mich einfach mal damit beschäftigen. Außerdem habe ich bis dato keinen Slider gefunden der sich schön schmal machen lässt und farblich viele Möglichkeiten bietet. Er ist nur für die Waagrechte gedacht und besitzt als einziges Ereignis auch nur ein OnChange. Ich habe aber bei einem Schieberegler auch noch kein anderes Ereignis benutzt.
So kann er aussehen: Wer Lust und Zeit hat kann ihn gerne mal testen. Im Anhang befindet sich ein Packages zum Installieren (Icon wird in Standard angelegt). Ebenso ist ein kleines Testprogramm dabei. Über Kritik würde ich mich freuen (ich halte auch vernichtende Kritik aus ).
Ich hab es in Linux und Windows kompiliert. Hatte keine Probleme, aber natürlich wie immer alles auf eigene Gefahr!
Viele Grüße
Bernd
PS: Nochmal allen die hier meine Fragen geduldig beantwortet haben vielen Dank.
Edit:Hier die neueste Version.
mit meinem Werk werde ich vermutlich vielen von euch ein Lächeln auf das Gesicht zaubern, aber dessen ungeachtet stelle ich hier meine Komponente vor.
Es ist ein Schieberegler. Ja gibt's natürlich schon aber ich wollte mich einfach mal damit beschäftigen. Außerdem habe ich bis dato keinen Slider gefunden der sich schön schmal machen lässt und farblich viele Möglichkeiten bietet. Er ist nur für die Waagrechte gedacht und besitzt als einziges Ereignis auch nur ein OnChange. Ich habe aber bei einem Schieberegler auch noch kein anderes Ereignis benutzt.
So kann er aussehen: Wer Lust und Zeit hat kann ihn gerne mal testen. Im Anhang befindet sich ein Packages zum Installieren (Icon wird in Standard angelegt). Ebenso ist ein kleines Testprogramm dabei. Über Kritik würde ich mich freuen (ich halte auch vernichtende Kritik aus ).
Ich hab es in Linux und Windows kompiliert. Hatte keine Probleme, aber natürlich wie immer alles auf eigene Gefahr!
Viele Grüße
Bernd
PS: Nochmal allen die hier meine Fragen geduldig beantwortet haben vielen Dank.
Edit:Hier die neueste Version.
- Dateianhänge
-
- Release8.zip
- (16.62 KiB) 144-mal heruntergeladen
Zuletzt geändert von wennerer am Di 11. Mai 2021, 20:13, insgesamt 3-mal geändert.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Ein Slider, mal testen
Hallo!
Ich wollte es gerade mal probieren.
Bei Kompilieren kommt folgendes Gemecker:
Bitte überarbeiten.
Aber nicht entmutigen lassen.
Der aktuelle TTrackbar ist eine Krankheit, wenn man den unter Linux und Windows benutzen will.
In beiden Fälle jede Menge Macken.
Also: Bau bitte was Nettes und Alltagstaugliches!
Winni
Ich wollte es gerade mal probieren.
Bei Kompilieren kommt folgendes Gemecker:
Code: Alles auswählen
probiermal.pas(11,2) Fatal: Cannot find LazarusPackageIntf used by ProbierMal. Check if package FCL is in the dependencies of package ProbierMal.
Bitte überarbeiten.
Aber nicht entmutigen lassen.
Der aktuelle TTrackbar ist eine Krankheit, wenn man den unter Linux und Windows benutzen will.
In beiden Fälle jede Menge Macken.
Also: Bau bitte was Nettes und Alltagstaugliches!
Winni
-
- Beiträge: 576
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 2.2.6
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Ein Slider, mal testen
Danke passt, zumindest unter trunk.
Eine Anmerkung, bitte versuche alle Variablen und Bezeichner in Englisch zu halten.
Alt:
Neu:
Und was ist SetSlotColorExt ? Oder du schreibst es aus.
Mach weiter so.
Eine Anmerkung, bitte versuche alle Variablen und Bezeichner in Englisch zu halten.
Alt:
Code: Alles auswählen
procedure TSliderComponent.SetSlotColorExt(const Farbe:TColor);
begin
if Farbe = FSlotColorExt then exit;
FSlotColorExt:=Farbe;
Invalidate;
end;
Neu:
Code: Alles auswählen
procedure TSliderComponent.SetSlotColorExt(const aColor:TColor);
begin
if aColor=FSlotColorExt then exit;
FSlotColorExt:=aColor;
Invalidate;
end;
Und was ist SetSlotColorExt ? Oder du schreibst es aus.
Mach weiter so.
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)
Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)
-
- Beiträge: 524
- 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: Ein Slider, mal testen
Hallo,
Danke schon mal für die Rückmeldungen.
Hab das Package blöder Weiße in einer Trunk gemacht, da passt definitiv was nicht. Ich hab es jetz noch mal in der Stable gemacht.
Jetzt sollte es problemlos gehen.
Ja, ich weiß. Mir fällt bloß immer nichts ein.
Ext soll für Extrafarbe stehen. Wie gesagt da fehlen mir oft die Ideen.
Gruß
Bernd
Danke schon mal für die Rückmeldungen.
Hab das Package blöder Weiße in einer Trunk gemacht, da passt definitiv was nicht. Ich hab es jetz noch mal in der Stable gemacht.
Jetzt sollte es problemlos gehen.
Eine Anmerkung, bitte versuche alle Variablen und Bezeichner in Englisch zu halten.
Ja, ich weiß. Mir fällt bloß immer nichts ein.
Und was ist SetSlotColorExt ? Oder du schreibst es aus.
Ext soll für Extrafarbe stehen. Wie gesagt da fehlen mir oft die Ideen.
Gruß
Bernd
- Dateianhänge
-
- Release02.zip
- (258.43 KiB) 225-mal heruntergeladen
-
- Beiträge: 576
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 2.2.6
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Ein Slider, mal testen
Hallo Bernd,
mir geht es mit den Namen/Benennung auch immer so, mir fällt auch nicht gleich was passendes ein.
Vielleicht hat einer unserer Profi's hier im Forum noch ein paar Tipps und Tricks.
Danke nochmal für deine Arbeit.
mir geht es mit den Namen/Benennung auch immer so, mir fällt auch nicht gleich was passendes ein.
Vielleicht hat einer unserer Profi's hier im Forum noch ein paar Tipps und Tricks.
Danke nochmal für deine Arbeit.
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)
Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)
-
- Beiträge: 524
- 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: Ein Slider, mal testen
Wobei aColor hätte mir schon einfallen können!
Muss ich definitiv dran arbeiten.
Grüße
Bernd
Muss ich definitiv dran arbeiten.
Grüße
Bernd
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Ein Slider, mal testen
Hallo Bernd,
ich habe eben deinen Slider auch grad mal ausprobiert.
Das sieht doch schon recht gut aus, optisch hübscher als meine eigene Kreation.
Kleinigekeiten:
Bei vielen Änderungen im Objektinspektor fehlt das "Invalidate"
wenn man zum Beispiel Scale.ShowScale ändert sieht man es zunächst nicht,
ebenso wenn man den Interval ändert oder auch die Farbe....
Bei jeglicher optischen Änderung muss ein Invalidate rein, damit man es sofort sieht.
edit: Das geht aber garnicht so ohne weiters, wie ich grad sehe.....
Frage: wozu oder wann benötigt man 3 Knöpfe auf einem Schieber ?
Siro
ich habe eben deinen Slider auch grad mal ausprobiert.
Das sieht doch schon recht gut aus, optisch hübscher als meine eigene Kreation.
Kleinigekeiten:
Bei vielen Änderungen im Objektinspektor fehlt das "Invalidate"
wenn man zum Beispiel Scale.ShowScale ändert sieht man es zunächst nicht,
ebenso wenn man den Interval ändert oder auch die Farbe....
Bei jeglicher optischen Änderung muss ein Invalidate rein, damit man es sofort sieht.
edit: Das geht aber garnicht so ohne weiters, wie ich grad sehe.....
Frage: wozu oder wann benötigt man 3 Knöpfe auf einem Schieber ?
Siro
Zuletzt geändert von siro am Mo 13. Apr 2020, 01:36, 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...
Re: Ein Slider, mal testen
Schön. Einen ähnlichen gibt es im Industrial-Package auf CCR: https://sourceforge.net/p/lazarus-ccr/s ... rialstuff/
-
- Beiträge: 1913
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Ein Slider, mal testen
Sieht gut aus. Ich hatte vor jahren mal in meinem minimal-style components was ähnliches gemacht: https://github.com/Warfley/LazMSC allerdings ist mir relativ schnell aufgefallen das es sehr viel mehr Arbeit ist als man denkt solche Komponenten zu machen sodass sie sich natürlich anfühlen.
Z.B. dein Slider ist kein TWinControl, kann also keinen Fokus haben. Normalerweise haben solche interaktiven Komponenten einen fokus, sodass du z.b. mit tab die komponente auswählen kannst und mit Pfeiltasten die dann einstellen kannst.
Natürlich ist das eine kleinigkeit, aber das sind so die kleinigkeiten die solche komponenten sich natürlich anfühlen lassen. Ich hatte bei meinen MSC komponenten set damals auch nicht drauf geachtet, und z.b. auch Buttons auf TGraphicControl aufgebaut, doch wenn man dann mal eine Form mit lauter solchen Controls hat und benutzt merkt man dann doch das irgendwas einfach nicht stimmt.
Was anderes ist, das Komponenten anders gezeichnet werden wenn sie den Fokus haben oder wenn nicht. All die Kleinigkeiten halt
Lass dich davon natürlich nicht abbringen, ich kann dir aber empfehlen auch solche kleinigkeiten mal anzuschauen. Vor allem benutz bei Controls mit denen man Interagiert TWinControl und schau dir mal an was TWinControl so kann, das ist sowas wie Key-Events, fokus, etc.
Außerdem, so als allgemeines Feature, das das teil eine Option hat Horizontal oder Vertikal zu zeichnen. Sollte nicht sehr viel aufwand sein, und manchmal braucht man einfach einen Vertikalen Slider
Z.B. dein Slider ist kein TWinControl, kann also keinen Fokus haben. Normalerweise haben solche interaktiven Komponenten einen fokus, sodass du z.b. mit tab die komponente auswählen kannst und mit Pfeiltasten die dann einstellen kannst.
Natürlich ist das eine kleinigkeit, aber das sind so die kleinigkeiten die solche komponenten sich natürlich anfühlen lassen. Ich hatte bei meinen MSC komponenten set damals auch nicht drauf geachtet, und z.b. auch Buttons auf TGraphicControl aufgebaut, doch wenn man dann mal eine Form mit lauter solchen Controls hat und benutzt merkt man dann doch das irgendwas einfach nicht stimmt.
Was anderes ist, das Komponenten anders gezeichnet werden wenn sie den Fokus haben oder wenn nicht. All die Kleinigkeiten halt
Lass dich davon natürlich nicht abbringen, ich kann dir aber empfehlen auch solche kleinigkeiten mal anzuschauen. Vor allem benutz bei Controls mit denen man Interagiert TWinControl und schau dir mal an was TWinControl so kann, das ist sowas wie Key-Events, fokus, etc.
Außerdem, so als allgemeines Feature, das das teil eine Option hat Horizontal oder Vertikal zu zeichnen. Sollte nicht sehr viel aufwand sein, und manchmal braucht man einfach einen Vertikalen Slider
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Ein Slider, mal testen
Hallo Bernd,
es fehlt noch der Focus:
Wenn man eine Komponente anklickt, bekommt sie normalerweise den Focus, wird also als aktuelle Eingabe markiert.
Deine Komponente bekommt zur Zeit nie den Focus. Das kann sie auch nicht, da sie von TGraphicControl abgeleitet ist,
dazu müstest Du sie von TCustomControl ableiten, dann geht das auch...
Zudem muss TabStop in die Proptertys
Normalerweise kann man mit der TAB Taste zu den einzelnen Komponenten auf dem Formular wechseln.
Lege mal diverse Komponenten aufs Formular und drücke die TAB Taste, dann wirst Du sehen, dass dein Slider ausgelassen wird.
Ich habe mal in deinem Code einiges geändert, damit man auch den Focus bekommt und sieht.
Habe alle Stellen markiert mit Siro. dann findest Du schneller die Änderungen
Siro
für die Tastensteuerung müstest Du dann dann noch folgendes einbauen:
es fehlt noch der Focus:
Wenn man eine Komponente anklickt, bekommt sie normalerweise den Focus, wird also als aktuelle Eingabe markiert.
Deine Komponente bekommt zur Zeit nie den Focus. Das kann sie auch nicht, da sie von TGraphicControl abgeleitet ist,
dazu müstest Du sie von TCustomControl ableiten, dann geht das auch...
Zudem muss TabStop in die Proptertys
Normalerweise kann man mit der TAB Taste zu den einzelnen Komponenten auf dem Formular wechseln.
Lege mal diverse Komponenten aufs Formular und drücke die TAB Taste, dann wirst Du sehen, dass dein Slider ausgelassen wird.
Ich habe mal in deinem Code einiges geändert, damit man auch den Focus bekommt und sieht.
Habe alle Stellen markiert mit Siro. dann findest Du schneller die Änderungen
Siro
für die Tastensteuerung müstest Du dann dann noch folgendes einbauen:
Code: Alles auswählen
protected
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure CNKeyDown (var Message: TLMKeyDown); message CN_KEYDOWN;
// ---------- Die Tastensteuerung:
procedure TSliderComponent.KeyDown(var Key: Word; Shift: TShiftState);
var pix1:Double; p:TPoint;
begin
if Key = VK_LEFT then begin
// Schieber nach links
end;
if Key = VK_RIGHT then begin
// Schieber nach rechts
end;
if Key = VK_HOME then begin
// Schieber links an Anfang
end;
if Key = VK_END then begin
// Schieber rechts ans Ende
end;
inherited;
end;
//--------------------------------------------------------
// Damit der Fokus bei Cursortasten nicht an andere Komponenten weitergegeben wird,
// werden die Tasten hier lediglich abgefangen und als bearbeitet markiert
// indem das Message.result auf 1 gesetzt wird.
// Alle Tasten welche die Komponente für sich beansprucht müssen in
// die case Auswahl mit aufgeführt werden.
procedure TSliderComponent.CNKeyDown(var Message: TLMKeyDown);
begin
with Message do begin
Result := 1; { wir gehen davon aus daß die Message verarbeitet wird }
case CharCode of
VK_LEFT : ; // Cursor Left
VK_RIGHT : ; // Cursor Right
VK_HOME : ; // Cursor Home
VK_END : ; // Cursor End
// VK_TAB : ; // hebelt TabStop aus.......Tab soll aber den Focus weiter reichen
else begin
Result := 0; { message wurde nicht verarbeitet }
end; {else}
end; { case }
end; { with }
inherited; // Vorgaenger immer aufrufen, jedoch mit dem entsprechendem Result
end;
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
-
- Beiträge: 524
- 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: Ein Slider, mal testen
Danke an Alle Rückmeldungen!
Mit dem Invalidate kämpf ich seit Anfang an (und hab es noch nicht im Griff ).
Das mit dem Fokus hatte ich bis jetzt leider gar nicht auf dem Schirm.
@Siro: Ich werde versuchen deine Erklärungen erst richtig zu verstehen und dann umzusetzen. Werd ich wohl aber etwas brauchen.
Viele Grüße
Bernd
Mit dem Invalidate kämpf ich seit Anfang an (und hab es noch nicht im Griff ).
Das mit dem Fokus hatte ich bis jetzt leider gar nicht auf dem Schirm.
@Siro: Ich werde versuchen deine Erklärungen erst richtig zu verstehen und dann umzusetzen. Werd ich wohl aber etwas brauchen.
Viele Grüße
Bernd
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Ein Slider, mal testen
Hallo Bernd,
ich hab mal etwas an deiner Komponente gebastelt.
Jetzt funktioniert das mit dem Invalidate auch
und die Tastensteuerung sowie Fokus geht auch.
Ich hoffe, ich konnte Dir damit etwas weiterhelfen.
Die Feinheiten überlasse ich nun Dir.
Anbei der aktuelle Source-Code:
Siro
Als Frage in die Runde: funktioniert dieser Code auch auf einem Linux System Ich habe nur Windows
ich hab mal etwas an deiner Komponente gebastelt.
Jetzt funktioniert das mit dem Invalidate auch
und die Tastensteuerung sowie Fokus geht auch.
Ich hoffe, ich konnte Dir damit etwas weiterhelfen.
Die Feinheiten überlasse ich nun Dir.
Anbei der aktuelle Source-Code:
Siro
Als Frage in die Runde: funktioniert dieser Code auch auf einem Linux System Ich habe nur Windows
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
-
- Beiträge: 524
- 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: Ein Slider, mal testen
Hallo Siro,
vielen Dank. Das ist ja mal richtig cool. An dem Invalidate hätte ich mir die Zähne ausgebissen!
Bei TScale hatte ich aber noch einen Fehler drin:
Jetzt komm ich in der Sache schon wieder einen großen Schritt weiter.
Viele Grüße Bernd
vielen Dank. Das ist ja mal richtig cool. An dem Invalidate hätte ich mir die Zähne ausgebissen!
Bei TScale hatte ich aber noch einen Fehler drin:
Code: Alles auswählen
published
property LineColor : TColor Read FLineColor Write SetLineColor default clblack;
property MarkColor : TColor Read FMarkColor Write FMarkColor default clnavy;
property Interval : integer Read FInterval Write FInterval default 2;
property ShowScale : boolean Read FShowScale Write FShowScale default false;
end;
Code: Alles auswählen
published
property LineColor : TColor Read FLineColor Write SetLineColor default clblack;
property MarkColor : TColor Read FMarkColor Write SetMarkColor default clnavy;
property Interval : integer Read FInterval Write SetInterval default 2;
property ShowScale : boolean Read FShowScale Write SetShowScale default false;
end;
Jetzt komm ich in der Sache schon wieder einen großen Schritt weiter.
Viele Grüße Bernd
-
- Beiträge: 524
- 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: Ein Slider, mal testen
Als Frage in die Runde: funktioniert dieser Code auch auf einem Linux System Ich habe nur Windows
Ja, ich habe Linux Mint 19.3 Cinnamon 64bit.
Gruß
Bernd
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Ein Slider, mal testen
Ich sehe grade, die Procedure KeyDown, kannst Du komplett löschen,
da wird nix getan, das war ein Restbestand aus meinem Slider.
Also weg damit:
// procedure KeyDown(var Key: Word; Shift: TShiftState); override; // Siro
da wird nix getan, das war ein Restbestand aus meinem Slider.
Also weg damit:
// procedure KeyDown(var Key: Word; Shift: TShiftState); override; // Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...