Ein Slider, mal testen

Zur Vorstellung von Komponenten und Units für Lazarus
wennerer
Beiträge: 191
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Ein Slider, mal testen

Beitrag von wennerer »

So ich habe nun mal versucht die letzten Feinheiten einzubauen.
Dank Siro läuft es jetzt meiner Meinung nach richtig Rund. Deshalb nochmal im Anhang die Dateien.

Viele Grüße
Bernd
Dateianhänge
Release2b.zip
(135.59 KiB) 26-mal heruntergeladen

Winni
Beiträge: 332
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.06, fpc 3.04
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Ein Slider, mal testen

Beitrag von Winni »

Hi!
Ich bin jetzt endlich dazu gekommen, Deinen Slider in der Version 2b zu testen.

Sehr schön, sehr stabil und viele zusätzliche Möglichkeiten.

Um ein vollwertiger Ersatz für den TTaskbar zu sein, fehlen noch drei Funktionalitäten:

* Das Umdrehen oder Spiegeln der Skala: Max nach links und Min nach rechts. Das ist manchmal notwendig z.B. bei technischen Lösungen.

* Der Slider muss auch "hochkant", also vertikal gehen. Stell Dir vor, jemand möchte Deinen Slider für 16 Kanäle eines Mischpults benutzen.
Das ist horizontal nicht möglich (bzw. extrem unüblich ....)

* Für's Design sollte man entscheiden können, ob die Skala links oder rechts angezeigt wird.

Aber echt gut bisher.

Um neuen Benutzern den Zugang zu erleichtern, solltest Du Dir noch mal die Begrifflichkeiten im TTaskbar ansehen und die übernehmen.

Grüße von
Winni

PS.: Getestet unter Linux64, gtk2, Laz 2.06, fpc 3.04

wennerer
Beiträge: 191
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Ein Slider, mal testen

Beitrag von wennerer »

Hallo Winni,
vielen Dank für's testen und für deine Rückmeldung. Mit deinen Anmerkungen hast du natürlich vollkommen recht. Vor allem bei der Namensvergabe muss ich wohl tatsächlich mal ins spicken gehen, das finde ich selber grausam :D . Ich hab mir auch den Slider in Industrial (wie von wp-xyz angesprochen) jetzt mal angesehen. Da kann ich wohl auch einiges abschauen.
Viele Grüße
Bernd

wennerer
Beiträge: 191
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Ein Slider, mal testen

Beitrag von wennerer »

Hallo,
ich habe nun mal versucht alle Anregungen um zusetzten und hoffe meine Bezeichnungen und die Anordnung im OI sind jetzt etwas eingängiger.
Der Slider kann jetzt von Horizontal auf Vertikal umgeschaltet werden, ebenso ist ein Reversed möglich.
Natürlich ist im Anhang ein kleines Testprogramm dabei. Falls jemand Lust und Zeit hat freue ich mich über Kritik.

Winni schrieb:
Um ein vollwertiger Ersatz für den TTaskbar zu sein, fehlen noch ....

Das kann natürlich nicht mein Ziel sein. Ich wollte hiermit nur mein Wissen erweitern und das ist mir auf jeden Fall geglückt! :D

Bildschirmfoto.png
Bildschirmfoto.png (39.48 KiB) 740 mal betrachtet
Dateianhänge
Release3.zip
(139.55 KiB) 21-mal heruntergeladen

siro
Beiträge: 388
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 10
CPU-Target: 64Bit
Wohnort: Berlin

Re: Ein Slider, mal testen

Beitrag von siro »

Hallo Wennerer,
die Komponente wächst und das sieht doch schon sehr gut aus.

Kleinigkeit: wegen der Übersichtlichkeit
Methoden / Proceduren würe ich nicht zu lang machen,
da fällt die Orientierung etwas(sehr) schwer. 1152 Zeilen für paint :wink:

Deine paint Methode würde ich zumindest für Horizontal und Vertikal
in 2 separate Proceduren packen.

Das schöne an dem Lazarus Editor ist nämlich, dass man in der obersten Zeile (die ist dann blau hinterlegt) sieht in
welcher Procedure man sich grade befindet.
Wenn Du dass nun aufteilst in 2 verschiedene paint proceduren, ist die Orientierung auch für Dich bei Änderungen wieder eindeutig.

Das muss man natürlich nicht machen, aber momentan sieht man nur, beim editieren, dass man sich in der procedure paint befindet,
ob der angezeigte Code grade für den Horizontalen oder Vertikalen Slider zuständig ist, weis man nicht.

So in etwa könnte es dann aussehen:

Code: Alles auswählen

 
TSliderComponent = class (TCustomControl)
  private
  .
  .
  protected
  .
  .  // diese beiden sind nur innnerhalb der Komponente sinnvoll daher würde ich sie in den protected Bereich schieben
  procedure PaintHorizontal;
  procedure PaintVertical;
  .
  .
  public
  procedure Paint; override;    // das eigentliche Paint würde ich auch weiterhin im public Bereich lassen
  .
  property
  .
  .
end;
 
procedure TSliderComponent.PaintHorizontal;
begin
  // der entsprechend Code
end;
 
procedure TSliderComponent.PaintVertical;
begin
  // der entsprechend Code
end;
 
// die eigentliche Paint Methode nun aufteilen damit es übersichtlicher wird:
procedure TSliderComponent.Paint;
begin
  if FOrientation = scHorizontal then PaintHorizontal
                                 else PaintVertical;
end;
 
 


Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

wennerer
Beiträge: 191
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Ein Slider, mal testen

Beitrag von wennerer »

Hallo Siro,
du weißt gar nicht wie oft ich in der Paint Procedure rauf und runter gescrollt habe. Das mit dem Aufteilen in zwei oder mehrere Proceduren ist für mich ein sehr wertvoller Tipp. Mag zwar nur eine Kleinigkeit sein aber gerade solche Kleinigkeiten können dir das Leben leichter oder schwerer machen!
Ich werde es auf jeden Fall beherzigen (auch in zukünftigen Projekten) und noch einbauen.
Vielen Dank
Bernd

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

Re: Ein Slider, mal testen

Beitrag von wp_xyz »

Ich würde das Paint noch weiter unterteilen: Malen des Untergrunds, des Sliders, der Markierungen usw. Du hast doch eh schon diverse Hilfeobjekte angelegt, die die für sie zuständige Zeichenaufgaben übernehmen können. Dazu müsste z.B. TTrack eine Methode "Draw(ACanvas: TCanvas; ARect: TRect)" zur Verfügung stellen - dann kann sich die Schiebebahn auf dem canvas des aufrufenden Objekts (TSliderComponent) im angegebenen Rechteck selbst zeichnen und TSliderComponent.Paint muss für diesen Teil nur noch Track.Draw(Canvas, R) aufrufen. Genauso für die anderen Hilfsobjekte.

wennerer
Beiträge: 191
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Ein Slider, mal testen

Beitrag von wennerer »

Hallo wp_xyz,
das geht natürlich nochmal einen ganzen Schritt weiter (in Richtung Professionalität). Finde ich aber wirklich sehr interessant und elegant. Ich werde mich daran auf jeden Fall versuchen. Werde aber bestimmt etwas Zeit für die Umsetzung benötigen. :)
Vielen Dank
Bernd

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4222
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Ein Slider, mal testen

Beitrag von af0815 »

wennerer hat geschrieben:...das geht natürlich nochmal einen ganzen Schritt weiter (in Richtung Professionalität)...

Vielleicht mal an ein Quellcoderepository wie GIT oder SVN denken :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wennerer
Beiträge: 191
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Ein Slider, mal testen

Beitrag von wennerer »

Hallo af0815,
du hast da ein Thema angesprochen von dem ich mit Fug und Recht behaupten kann ich habe nicht mal Prospektwissen.
Ich habe natürlich schon mal Google und Wikipedia bemüht, habe aber außer allgemeine Beschreibungen nichts für mich greifbares gefunden. Gibt es irgendwo eine Beschreibung bzw. Anleitung für SVN oder GIT die (für jemanden ohne Vorwissen) mal die grundlegenden Funktionen beschreibt?
Viele Grüße
Bernd

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4222
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Ein Slider, mal testen

Beitrag von af0815 »

google: git tutorial deutsch

Da findet man doch was. sogar jede Menge. Ev. Git durch Quellcodeverwaltung ersetzen, wenn man es allgemeiner haben will.

ZB. https://www.atlassian.com/de/git
https://boolie.org/git-github-anfaenger-tutorial/
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wennerer
Beiträge: 191
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Ein Slider, mal testen

Beitrag von wennerer »

Hallo
Da kommt ja echt jede Menge. War offensichtlich mit den falschen Suchbegriffen unterwegs. Werde ich so nach und nach mal lesen und probieren.
Danke!
Bernd

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 620
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.7 FPC 3.04)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Ein Slider, mal testen

Beitrag von fliegermichl »


wennerer
Beiträge: 191
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Ein Slider, mal testen

Beitrag von wennerer »

Hallo,
ich melde mich mit meiner Komponente mal wieder.

Siro schrieb:
Kleinigkeit: wegen der Übersichtlichkeit
Methoden / Proceduren würe ich nicht zu lang machen,
da fällt die Orientierung etwas(sehr) schwer. 1152 Zeilen für paint
Hab ich mir zu Herzen genommen und versucht umzusetzen. Hab jetzt immerhin ca. 450 Zeilen weniger! Und die Fehlersuche gestaltet sich auch einfacher. Vielleicht hat noch mal jemand Zeit den Code durch zusehen. Wo würde ein Programmierer jetzt noch ansetzen um den Code zu verbessern?

wp_xyz schrieb:
Dazu müsste z.B. TTrack eine Methode "Draw(ACanvas: TCanvas; ARect: TRect)" zur Verfügung stellen - dann kann sich die Schiebebahn auf dem canvas des aufrufenden Objekts (TSliderComponent) im angegebenen Rechteck selbst zeichnen und TSliderComponent.Paint muss für diesen Teil nur noch Track.Draw(Canvas, R) aufrufen.
Darüber habe ich länger nach gedacht und leider noch nicht so umgesetzt. Wenn ich das richtig verstehe müsste ich zum Beispiel beim Verschieben des Knopfes das Rechteck zumindest so groß machen wie der Bereich ist wo der Knopf war und wo er jetzt ist? Gibt's da in den Demos ein kleines Beispiel wo nur ein Teil des Canvas aktualisiert wird?

Und noch eine Frage:
Kann man einer Komponente eine andere Komponente hinzufügen. Zur Laufzeit sollte man die ja problemlos erzeugen können. Aber wie bringt man die dann in den ObjektInspektor? Mein Plan wäre noch ein Label oben anzufügen um eine Caption einzublenden :D

Viele Grüße Bernd
Dateianhänge
Release4.zip
(140.14 KiB) 14-mal heruntergeladen

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 620
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.7 FPC 3.04)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Ein Slider, mal testen

Beitrag von fliegermichl »

wennerer hat geschrieben:
Sa 2. Mai 2020, 23:18
Und noch eine Frage:
Kann man einer Komponente eine andere Komponente hinzufügen. Zur Laufzeit sollte man die ja problemlos erzeugen können. Aber wie bringt man die dann in den ObjektInspektor?
Klar,

Code: Alles auswählen

type
 TMyComponent = class ( TWinControl )
 private
  fLabel : TLabel;
 published
  property CaptionLabel : TLabel read fLabel write fLabel;
 end;
Wenn Deine Komponente dann in der LCL installiert ist, erscheint die Property CaptionLabel auch im Objektinspektor.

Viele Grüße
Michael

Antworten