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

Ein Slider, mal testen

Beitrag von wennerer »

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:
Slider_Test.png
Slider_Test.png (33.55 KiB) 2009 mal betrachtet
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 :D ).
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
Release7.zip
(16.02 KiB) 2-mal heruntergeladen
Zuletzt geändert von wennerer am So 16. Aug 2020, 10:00, insgesamt 2-mal geändert.

Winni
Beiträge: 355
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 »

Hallo!

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

sstvmaster
Beiträge: 345
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: OS: Windows 10 | Lazarus: 2.0.8 + Fixes + Trunk 32bit
CPU-Target: 32Bit
Wohnort: Dresden

Re: Ein Slider, mal testen

Beitrag von sstvmaster »

Danke passt, zumindest unter trunk.

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

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,
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) 29-mal heruntergeladen

sstvmaster
Beiträge: 345
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: OS: Windows 10 | Lazarus: 2.0.8 + Fixes + Trunk 32bit
CPU-Target: 32Bit
Wohnort: Dresden

Re: Ein Slider, mal testen

Beitrag von sstvmaster »

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.
LG Maik

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 »

Wobei aColor hätte mir schon einfallen können!
:D
Muss ich definitiv dran arbeiten.
Grüße
Bernd

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 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
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...

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

Re: Ein Slider, mal testen

Beitrag von wp_xyz »

Schön. Einen ähnlichen gibt es im Industrial-Package auf CCR: https://sourceforge.net/p/lazarus-ccr/s ... rialstuff/

Warf
Beiträge: 1479
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Ein Slider, mal testen

Beitrag von Warf »

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

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 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

slidercomponent.pas
(28.12 KiB) 36-mal heruntergeladen


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...

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 »

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

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 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:

slidercomponent.pas
(33.32 KiB) 26-mal heruntergeladen


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...

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,
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

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 »

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

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 »

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
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Antworten