Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
Hallo,
Ohne Sourcecode da es noch keinen gibt Mein Ziel bei meiner Scrollbox ist, das ich ohne viel Aufwand für den Benutzer das Scrollen ermöglichen möchte.
Ich habe mir jetzt ein System überlegt das mir ganz gut gefällt aber recht komplex ist es aufzubauen. Lange zeit wahr es für mich ein Rätzel wie das ganze bei Webbrowsern und soweiter Funktioniert. Nutzen "die" eine große Hintergrund Grafik ? oder machen die es anders ?
Ich glaube mein System währe für sowas ganz gut geeignet, evtl. nutzen die es auch schon.
Es gibt noch keinen Sourcecode da mir erst alles klar sein muss bevor ich damit anfangen.
Zum System:
Es unterstütz nur Objekte von einer bestimmten Klasse.
Diese Klasse hat ein "paar" Eigenschaften:
PainX, PaintY, PaintW, PaintH:Integer
Diese vier Variablen sollten beim Zeichnen gesetzt werden und könnten später bei den Maus Funktionen hilfreich sein.
Es soll eine art Objekt Manger geben, der sich um das allgemeine zeichnen kümmert. Dort gibt es ein TRect mit dem Sichtfenster. Dieses TRect möchte ich gerne verschieben mit den Scrollbalken oder der Tastertur, je nach dem.
Beim Zeichnen müssen jetzt erstmal alle Objekte gefiltert werden, welche überhaupt im Sichtbereich liegen. Auch die Rand Objekte! Sobald das klar ist, bekommt jedes Objekt ein bereich zu gewiesen. Hierzu muss der "Objekt Manger" die echten Positionen Angaben also Left und Top, die ja außerhalb des Sichtbereiches liegen können umrechnen. Auf die Zeichen Position.
Diese Angaben bekommt dann das entsprechende Objekt. Abhängig von der Position im Sichtfenster wird die Größe des Objekts berechnet bzw. die Fläche die das Objekt nutzen kann.
Das Objekt zeichnet sich dann auf diese Fläche, aber nur den Teil der auch Sichtbar ist vom Objekt. Z.B. Praktisch bei einer Tabelle oder einem TextItem.
Das Objekt enthält einen intern Buffer, um zu verhindern das es zu oft komplett neu gezeichnet werden muss. Es soll nur neu gezeichnet werden, wenn es sich auch etwas verändert hat.
Mit Hilfe dieses Systems müsste es meiner Meinung nach kaum noch Probleme machen eine eigene ListBox, ListView, TreeView, Memo oder was auch immer zu schreiben.
Voraussetzung ist dafür natürlich das alle objekte von einem Bases Objekt sind.
Ob die Interne Scrollbox von der LCL oder VCL das auch so macht weiß ich nicht, aber ich könnte es mir gut vorstellen.
Ich hoffe ich konnte euch das Prinzip wie ich es mir vorstelle ausreichend beschreiben.
Diese Idee habe ich schon seit einigen Tagen. Die Scrollbalken könnte ich auch ganz leicht mit den entsprechenden Daten füttern wie halt
MAX: Das weit entfernteste Objekt,
Page: Die Höhe/Breite des Sichtfensters
Min:0
habe ich was vergessen?
Bevor ich das anfange, wollte ich gerne eure Meinung dazu höhren/lesen. Ich finde das System nicht schlecht, aber es gibt einiges dabei zu beachten.
Evtl. könnten wir die ersten Schritte gemeinsam "entwickeln". z.b. müsste es hiermit auch möglich sein, ohne angaben machen zu müssen, ein Webbrowser zu schreiben oder was auch immer. und das ganze sollte auch schnell genug sein und wenig RAM Fressen. Oder ?
Auch wenn jedes Objekt ein Buffer hat(den ich auch weglassen könnte).
Mein Ziel ist halt das Scrollen für mich ein für alle male zu optimal zu lösen.
Meine Scrollbox sollte dann auch von TCustomControll abgeleitet sein/werden oder so. Oder gibt es bessere Klassen von den ableiten könnte ?
(Ich bin mit einer Rechtschreibprüfung rüber gegangen und hoffe das ich nix übersehen habe)
Edit01:
ich habe heute noch im Lazarus Forum die gleiche Technik vorgestellt:
http://www.lazarusforum.de/viewtopic.php?p=21226#21226 da es ja eigentlich keine Frage ist sondern einfach nur eine Technik. Ich hoffe das stört euch nicht weiter
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Zuletzt geändert von Pluto am Fr Jul 18, 2008 18:46, insgesamt 1-mal geändert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich habe dein Thema mal aus den Projekten hierher verschoben. Denn ich muss ehrlich gestehen, dass ich darin kein eigenständiges Projekt sehe. Es ist ja eher ein Frage/Meinungs/Brainstorming Thema zu einer Komponente deines eigentlichen Projektes. Das ist in meinen Augen kein eigenständiges Projekt und das Projekteforum ist nur für Projekte gedacht. Tschuldige falls das ein bisschen direkt ist.
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
ach so... das wusste ich jetzt nicht. Ich dachte halt das es für die Projekt Sparte gedacht währe, da ich ja auch bald mit der "Entwicklung" anfangen möchte.
Aber dann kann man es ja wieder verschieben oder ?
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Natürlich. Einzelne Themen kann man jederzeit hin und her scheiben. Und das Projekteforum ist auch speziell dazu gedacht eben auch die Entwicklung aufzuzeigen. Also man darf auch schon bei den ersten Überlegungen dort ein Thema eröffnen. Das wird für den ein oder anderen sogar das Intersanteste an einem Projekt sein.
Allerdings ist das Projekteforum für Projekte gedacht. Die sollten einen gewissen Umfang haben. Für kleinere Demonstrationen/Techniken etc etc etc ist das Forum eigentlich nicht gedacht. So etwas wie eine Scrollbox ist für mich persönlich eher aber nur eine Technik und gehört da also nicht direkt hin. Außerdem stellt sich mir die Frage ob diese Komponente nicht auch für deine Canvas Komponenten gedacht ist. Denn wenn, dann würde die Komponente ja auch wieder zu einem anderen Projekt gehören.
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
Naja, Eigentlich wollte ich diese Komponente so schreiben, das ich sie unter Lazarus Problemlos verwenden kann. Mit Canvas natürlich, aber nicht mit meiner "2D Engine".
Evlt. könnte man ja auch erstmal von OpenGL aussehen. Aber das dürfte doch hier egal sein oder erstmal ?
Die Gedanken sind ja die gleichen. Ob ich das nun mit OpenGl oder Canvas mache.
Oder auch beides. Aber du hast recht, es ist letztendlich nur eine Technik.
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Okay. Mir war nicht klar, dass die anderen Komponenten eher eine 2D Engine sind bzw davon abstammen. Nichts destro trotz fehlt für meinen Geschmack da ein bisschen der Umfang.
Aber ich denke technisch ist es egal ob du mit OpenGL oder mit der GDI/Canvas arbeitest. Nur bei OpenGL hat man keine echten Fenster und kann über den Rand hinwegmalen.
Und ich denke ob der komplette Inhalt einer Scrollbox in einem Bild gepuffert wird hängt immer von jeweiligen Fall ab. Aber normal wird so etwas nicht gemacht. Du kannst zwar unter Windows Bilder erstellen die sehr groß sind. Aber wenn sie zu groß sind, dann sind sie nicht mehr hardwarebeschleunigt und damit wäre das Zeichnen um ein vielfaches langsamer. Abgesehen kann man bei einigen Homepages die auch nicht in den Speicher packen. Das wird einfach zu viel.
Typischerweise werden Bilder zum Zeichnen verwendet. Also wenn ein Fenster neu gezeichnet werden muss, dann kann das Fenster ein Bitmap erstellen, sich dort hinein zeichnen und dieses dann auf sich selbst zeichnen. Das ist auch das was die VCL mit DoubleBuffering macht. Aber das Bitmap ist sehr flüchtig und wird wird nur dafür benutzt damit das Fenster beim Aufbau nicht flackert.
Aber ich denke du könntest zeit sparen und Unterkomponenten die komplett außerhalb des sichtbaren bereiches liegen einfach nicht zeichnen. So spontan wüsste ich nicht ob das die ein oder andere Komponente problematisch sehen würde. Aber die dürften normal sowieso nur in das Fenster zeichnen was denen gehört. Und bei vielen Unterkomponenten dürfte das etwas bringen. Bei 10-15 wäre das aber vermutlich auch egal ob sie alle gezeichnet würden oder nur die Hälfte.
Das aber nur so wie einige Anwendungen arbeiten bzw. wie ich denke das sie die Zeichnungen optimieren (der letzte Absatz).
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
Zitat:
Aber ich denke du könntest zeit sparen und Unterkomponenten die komplett außerhalb des sichtbaren bereiches liegen einfach nicht zeichnen
Ja das hatte ich auch vor.
Ich habe ja z.b. sowas vor wie einen Webbrowser zu schreiben. Der Haupt Buffer soll sowieso nur so groß werden wie der Sichtbereich. Alle Objekte sollen einen Intern Buffer habe.
Die Größe des Buffers der Objekte hängt von der Fläche wo diese Objekte gezeichnet werden.
Wenn ich mein System richtig einschätzte dürfte damit sehr sehr viel Ram gespart werden.
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
Ich habe vor einiger Zeit angefangen das Prinzip umzusetzen. Das klappt sogar. Ich kann auch schon mehrer Unterschiedliche Scroll Bereiche erstellen.
Meine ScrollBox bedeutet für mich sehr viel, weil damit beseitige ich ein für alle mal, für mich und für andere das Scroll Problem.
Diese Klasse/Komponente ist für Viele weitere Komponenten die Grundlagen. wie ich schon hier :
viewtopic.php?t=7704 beschrieben habe währen folgende Komponente überhaupt kein großes Problem mehr für mich:
ListBox, ListView, TreeView, Memo, RichEdit, Edit, MainMenu, PopupMenu
Sogar ein Web Browser währe damit recht einfach.
Das mag alles etwas überheblich klingen. Evlt. kommen noch ein paar böse Überraschungen zu Tage. Aber im Großen und Ganzen, wahr bisher bei allen Projekte meistens das Scrollen das größte Problem für mich. Auch bei Spiele Projekte. Die könnten jetzt auch auf der Scrollbox basieren.
Ich weiß, dieses Forum beschäftigt sich eigentlich mehr mit OpenGL und meine sachen sind etwas OpenGL Fremd. Aber leider werden meine fragen zum Thema Sollen in anderen Foren nicht so "Toll" beantwortet wir hier. Allerdings habe ich auch diese Scroll Technik und die Probleme auch noch nicht in vielen Foren beschrieben höchstens in zwei...
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Mitglieder in diesem Forum: Bing [Bot] und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.