Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi [Demo] Schwenkfenster (TCustomPanningWindow) (https://www.delphipraxis.net/154359-%5Bdemo%5D-schwenkfenster-tcustompanningwindow.html)

WladiD 8. Sep 2010 10:54


[Demo] Schwenkfenster (TCustomPanningWindow)
 
Liste der Anhänge anzeigen (Anzahl: 5)
Hallo alle zusammen,

einigen von Euch dürfte die Schwenk-Funktion, die durch klicken des Mausrads ausgelöst wird, aus Browsern bekannt sein. Ob sie nun sinnvoll ist oder nicht ist Geschmackssache, ich für meinen Teil finde sie bei langen Listen nützlich um sich einen Überblick zu verschaffen, ohne dabei das Rad zum glühen zu bringen.

Jedenfalls wollte ich soetwas selbst in meinem Programm einbauen und bin per Zufall auf die Eigenschaft TMouse.PanningWindow, TMouse.PanningWindowClass und die abstrakte Klasse TCustomPanningWindow der VCL (Delphi 2010) gestossen. Super, dachte ich mir und wollte ein paar Beispiele ansehen, die diese Klasse implementieren und verwenden. Doch Google hat nichts brauchbares finden können. "Learn by try and error" war also angesagt.

Nach einigen Stunden war das erste Erfolgserlebnis da und wenig später eine (für mich) brauchbare Lösung, die ich Euch hier als Demo präsentieren möchte.

Anhang 32053


PanningWindow - Unit

Anhang 32057


Verwendung

Theoretisch können damit alle TControl-Objekte geschwenkt werden, die horizontale und/oder vertikale Standard-Scrollbalken verwenden. Dafür muss lediglich der gewünschten Instanz das Element [csPannable] an die Eigenschaft TControl.ControlStyle hinzugefügt werden. Der Eigenschaft Mouse.PanningWindowClass muss zuvor die spezifische Klasse zugewiesen werden.

Delphi-Quellcode:
implementation

uses
  PanningWindow;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Mouse.PanningWindowClass:=TPanningWindow;
  // Wenn es etwas zu scrollen gibt...
  Form1.ControlStyle:=Form1.ControlStyle + [csPannable];
  // hier weitere Komponenten, die scrollbar sind nach dem
  // Schema Control.ControlStyle:=Control.ControlStyle + [csPannable]
end;
Voraussetzungen

Funktionsfähig ab Delphi 2009 (wegen anonymen Methoden).

Die PanningWindow-Unit verwendet folgende Third-Party-Units, die alle OpenSource sind:
mfg

blackfin 8. Sep 2010 10:56

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Stylisch! :thumb:

mkinzler 8. Sep 2010 11:02

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Hast du vor, die Komponente zu Veröffentlichen?

WladiD 8. Sep 2010 11:28

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Zitat:

Zitat von mkinzler (Beitrag 1048164)
Hast du vor, die Komponente zu Veröffentlichen?

Hallo mkinzler,

eine richtige Komponente ist es ja nicht, sondern nur eine Klasse, die an Mouse.PanningWindowClass zugewiesen wird. Um daraus eine Komponente zu machen müsste man einen Wrapper schreiben was an sich kein Problem wäre, wenn TControl.ControlStyles published wäre...man müsste so oder so per handgeschriebem Code den gewünschten Komponenten ControlStyle+[csPannable] hinzufügen, wodurch die TPanningWindow als put&play-Komponente obsolet wird.

Oder der Wrapper müsste eine Liste verwalten mit Komponenten, die scrollbar sein sollen, was jedoch wiederrum ein unnötiger Verwaltungsaufwand wäre...hmmm...ich glaube, ich lasse es vorerst als eine Single-Class-Lösung.

mfg

himitsu 8. Sep 2010 11:32

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
mkinzler meinte auch mehr, hast du vor es so zu veröffentlich, daß es auch Andere in eigenen Programmen verwenden können?

Aktuell haben wir (anscheinend) nur die Demo (EXE) und Links zu nötigen Komponenten, aber nicht deine Klasse.

blackfin 8. Sep 2010 11:34

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Zitat:

Aktuell haben wir (anscheinend) nur die Demo (EXE) und Links zu nötigen Komponenten, aber nicht deine Klasse.
Der hat's versteckt :

Zitat:

Um diesen Post nicht unnötig in die Länge zu ziehen, habe ich meine Implementierung der TCustomPanningWindow-Klasse als Source im TMemo in die Demo-EXE eingebunden: einfach nach rechts unten scrollen.
:)

stahli 8. Sep 2010 11:36

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Echt cool :thumb:
Muss man sich mal merken, falls es mal an einer Stelle nützlich sein kann.

WladiD 8. Sep 2010 12:49

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Sorry Leute,

ich habe mkinzler wohl missverstanden. Der Eröffnungspost wurde soeben überarbeitet und enthält jetzt die Unit und Code-Schnipsel für dessen Verwendung.

Ich galube hier irgendwo gelesen zu haben, dass große Quelltexte in Beiträgen unerwünscht sind, daher habe ich sie zuvor in die Demo-Exe eingefügt.

mfg

mkinzler 8. Sep 2010 12:50

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Man kann auch die Quelldateien (Pas) direkt anhängen oder in ein Archiv verpacken

himitsu 8. Sep 2010 12:56

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
@WladiD: Es ist nur unpraktisch, wenn "große Quelltexte" mitten im Beitrag stehn.
Als Anhang machen sie sich besser.

Also das Memo in der EXE ... "unten rechts" war nichts.
Man muß in der Mitte suchen und dort war ich beim Testen wohl nicht vorbeigekommen. :stupid:

SirThornberry 8. Sep 2010 13:02

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Kannst du das ganze vielleicht auch in einem gängigen Format anhängen? Zum Beispiel zip, rar oder tar.gz?

WladiD 8. Sep 2010 13:04

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Zitat:

Zitat von SirThornberry (Beitrag 1048191)
Kannst du das ganze vielleicht auch in einem gängigen Format anhängen? Zum Beispiel zip, rar oder tar.gz?

Soeben als rohe PAS-Datei angehängt.

mleyen 8. Sep 2010 13:05

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Du findest echt rar/tar.gz gängiger als .7z? :shock:

Namenloser 8. Sep 2010 13:07

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Zitat:

Zitat von SirThornberry (Beitrag 1048191)
Kannst du das ganze vielleicht auch in einem gängigen Format anhängen? Zum Beispiel zip, rar oder tar.gz?

Ist 7zip denn kein gängiges Format? Dazu ist es noch OpenSource, im Gegensatz zu RAR, wo man sich eher beschweren könnte, weil ein propritäres Tool vorausgesetzt wird.

Zur Unit: Sieht gut aus :thumb:

WladiD 8. Sep 2010 13:13

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Zitat:

Zitat von mleyen (Beitrag 1048194)
Du findest echt rar/tar.gz gängiger als .7z? :shock:

Ich hoffe das artet jetzt nicht zu einer Diskusion über Pros und Cons für irgendwelche Formate aus. Ich denke in dieser Zielgruppe dürfte jeder 7z kennen.

7z Pros
  • Offener Standard
  • Bietet bis Dato die beste Komprimierung (stärker als RAR)
  • Der Client kann fast jedes bekannte Format entpacken (auch RAR und tar.gz)
  • Der Client ist für fast jede Plattform vorhanden

mfg

SirThornberry 8. Sep 2010 13:23

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Mein Problem war das beim Klick auf den Downloadlink die Endung .zip gewählt wurde. Mit der richtigen Endung funktionierts jetzt auch, der Archivmanager hatte aus irgend einem Grund ein Problem mit der nicht korrekten Endung.
Wofür genau braucht man das? Ist es nicht praktischer auf das Drehen am Mausrad zu reagieren?
Aber interessant ist das ganze auf jeden Fall, bisher kannte ich das nicht.

Nersgatt 8. Sep 2010 13:34

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Stylisch, finde ich sehr schön. :thumb:
Schade, dass die User meines Programmes sowas nicht bedienen können. Die bekommen nicht mal einen Rechtsklick hin. :wiejetzt:

WladiD 8. Sep 2010 13:41

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Zitat:

Zitat von SirThornberry (Beitrag 1048202)
Wofür genau braucht man das? Ist es nicht praktischer auf das Drehen am Mausrad zu reagieren?
Aber interessant ist das ganze auf jeden Fall, bisher kannte ich das nicht.

Das ist auf jeden Fall als AddOn- bzw. Nice-To-Have-Feature zu verstehen, es soll nicht das Rad-Drehen ersetzen. Probier es mal ein paar Tage in deinem Browser aus, vor allem bei langen Seiten ist es ideal um sich einen Überblick zu verschaffen. Während jede Rad-Drehung ein Sprung um Wert Delta ist, ist diese Art des scrollens flüssiger.

mfg

SirThornberry 8. Sep 2010 13:42

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Meine Browser unterstützen es nicht (Opera + Iceweasel) :wink:

mleyen 8. Sep 2010 13:43

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Dann drück das Mausrad in der Delphi-IDE, ist schon praktisch um auch seitwärts scrollen zu können. :)

WladiD 8. Sep 2010 13:46

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Zitat:

Zitat von mleyen (Beitrag 1048207)
Dann drück das Mausrad in der Delphi-IDE :)

Da ist es nicht zu gebrauchen, da der Scrollvorgang nicht auf Pixeln basiert, sondern auf Zeilen und daher nicht flüssig ist.

rapante 8. Sep 2010 14:41

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Super Sache, schade nur, dass es erst ab D2009 funktioniert :(

himitsu 8. Sep 2010 14:43

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Firefox, der IE, MSOffice, der Acrobat Reader, selbst Notepad und mein D2010, sowie einiges Anderes auch können sowas.


Es gibt auch einige Maustreiber, bzw. die Programme dazu, welche sowas ebenfalls unterstützen.

Bei meiner Logitech kann ich jedenfalls auch sowas als Funktion für die Mitteltaste auswählen. (wenn SetPoint installiert ist und die Funktion nennt sich AutoScroll oder Universal Scroll ... weiß nur grad nicht was was ist)
Aber ich nutze hierfür einfach die 2 Zusatztasten über und unter meinem Scrollrad und hab die Mitteltaste eine Mitteltaste sein lassen :angel2:


Nur den Mauszeiger/Pfeil sieht man auf dem Screenshot nicht, aber den Ausgangspunkt konnte ich fotografieren. :stupid:

Aphton 8. Sep 2010 18:38

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Hier mal der erste Verbesserungsvorschlag:
Wenn das Mausrad geklickt wird, soll der Doppelpfeil erscheinen und man soll scrollen können -> Funktioniert auch.
Wenn das Mausrad gedrücktgehalten wird, soll - nur SOLANGE das Mausrad gedrückt ist - gescrollt werden.

MfG

Matze 8. Sep 2010 19:03

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Sehr nett. :thumb:

Zitat:

Zitat von Aphton (Beitrag 1048261)
Wenn das Mausrad gedrücktgehalten wird, soll - nur SOLANGE das Mausrad gedrückt ist - gescrollt werden.

Ich habe es auch erst gedrückt gehalten und als ich endlich das TMemo gefunden hatte, habe ich das Mausrad losgelassen, die Maus bewegt und schon war das Memo wieder weg. *g*
Ich habe auch erwartet, dass es dann anhält. Demnach: Ich bin auch dafür. ;)

WladiD 8. Sep 2010 20:30

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Zitat:

Zitat von Aphton (Beitrag 1048261)
Wenn das Mausrad gedrücktgehalten wird, soll - nur SOLANGE das Mausrad gedrückt ist - gescrollt werden.

Hallo Aphton,

danke für den Verbesserungsvorschlag.

Diesen habe ich sofort umgesetzt und sowohl die Demo als auch die Unit im 1. Post aktualisiert.

mfg

Matze 8. Sep 2010 20:49

AW: [Demo] Schwenkfenster (TCustomPanningWindow)
 
Das ging aber flott!
Nun verhält sich deine Demo genau so, wie ich es von anderen Programmen her kenne.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz