Gemeinschafst projekt: rtf änliches komponente !

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
Antworten
Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Schnulli zu deinem komischen editor kann ich nur sagen mit ein wenig vorstellungsvermögen is das ding sowas von überflüssig. Zusammengesetzte komponenten sind meisst ja ziemlich einfach.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Jupp,

und in der rund 10fachen Zeit gebastelt. Laß mal stecken @Christian, ich hab hier so ungefähr 30 von den visuellen Dingern von Hand gebaut, ich weiß wovon ich rede.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ICH HABE ES GELÖST: ich kann jetzt einen Text Markieren und Demarkieren.
Ich muss nur noch etwas an der Geschwindigkeit Pfeilen.

Ich muss es noch etwas Testen... Es kommt mir so vor als es Ruckartig passiert.
Aber ist sieht gut aus.
ich bin jetzt so vorgegangen:
Alle Buchstaben sind Objekte und werden in eine TObjektList gespeichert.

Beim makieren speichere ich in eine Goable Variable den Klick Index in onMouseDown und den EndIndex bei onMouseMove jetzt.

Jetzt wird eine Variabel Sel die für jeden Buchstabe gilt est auf False gesetzt:
ich merke mir den alten End Index das ist der Index wo der Mau Zeiger drauf zeigt. und anschließend werden alle vom ersten klick Index bis zum End Index auf True gesetzt und das Passiert ständig.

Ich müsste es noch optimieren. damit es schneller geht. aber für den Anfang nicht schlecht....
EDIT:
es war nur ein Fehler mit dem OldIndex den ich brauche um alle markierten Elemnte Demakieren
zu können. Ich denke ich bin jetzt auf den richtigen weg.

Es wird lustig wenn gescrollt werden muss... dann muss ich das erste sichtbare Zeichen speichern damit das Markieren nicht zu langsam geht !
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

so ich hänge jetzt mal mein Test-Projekt ran... und dann geht ich ins Bett !

Ach ja beim klicken werden alle Elemente auf False gesetzt !

Ich habe erstmal alles in Form Definiert. Weil es halt nur ein Test ist....
sobald alles klappt und ich weiß was ich möchte Baue ich daraus eine Komponente(meine erste).

jetzt ist es überhaupt kein Problem mehr den text zu ändern.....

und ich denke das das Edittieren eines Textes mit der Tastertur auch sehr stark verinfacht wird.
dort könnte es nur noch Probleme mit der Geschwindigkeit geben wegen dem einfügen an einer beliebigen.
Dateianhänge
rtfTest1.zip
(50.34 KiB) 108-mal heruntergeladen
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10926
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Der Ansatz mit den Buchstaben ist zu verschwenderisch und vor allem zu langsam beim Zeichnen.
Du musst du ja für jeden Buchstaben Canvas.TextOut aufrufen.
Das dürfte dann ganz schön flackern beim Scrollen.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Nicht unbedingt:
was ist wenn im Voraus gezeichnet wird ?
z.b. 50 Zeilen nach oben und unten mehr....

Das Scrollen wird sowieso noch schwierig....

Aber daran habe ich auch schon gedacht.... es müsste irgenwie optimiert werden.
Aber das ist der einizigiste weg wie sowas gemacht werden kann... davon bin ich überzeugt... wie möchtes du bei anderen weg das Problem lösen mit dem Markieren, und den bearbeiten von Texten und ändern von schrift Formatierungen ?
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10926
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Hab ich doch schon gesagt.
Als kleinste Einheit sollte man meiner Meinung nach alles was einen gemeinsamen Textstil hat nehmen. Das kann man dann pro Zeile auch in einem Rutsch TextOut-en. Die Cursor-Zeichen-Relation muss man dann halt bei Bedarf herstellen (Beim markieren, Caret setzen etc.).
Natürlich muss man dabei berücksichtigen, dass so eine Text-Einheit sich auch über mehrere Zeilen erstrecken kann, falls sich der Stil nicht ändert und keine Zeilenümbrüche dazwischen sind.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

das habe ich versucht bei meinem zweiten Ansatzt, ich habe es nicht hinbekommen. Hatte Probleme beim Markieren eines Textes.

Bei größern Texten könnte es Probleme geben bei meinem jetztigen Ansatzt .

Könntes du mal ein Beispiel schreiben ? wie sowas aussehen könnte... nur ganz klein, als text Anwendung....
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10926
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben: Könntes du mal ein Beispiel schreiben ?
Sonst noch Wünsche der Herr? ;-)

Vielleicht mach ich mal bei Gelegenheit ein Grundgerüst für einen Rich Editor.
Das wird aber Wochen oder Monate dauern.
Glaub mir, das Markieren ist nicht das schwierigste Problem dabei.
Ich würde sogar mittlerweile behaupten, einen sauberen, performanten Rich Editor zu schreiben ist etwas vom mühsamsten, was man überhaupt programmieren kann.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Seh ich genauso, wenn du damit anfängst bin ich dabei aber allein fang ich sowas net an. Ich hab auch so genaug zu tun und pluto und schnulli, nehmts mir net übel aber eh ich bei euch mitmach kann ichs auch glei selbst machen (mag sein das ich mich irre).
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10926
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Danke für's Angebot.
Ich glaube nur, dass man sowas anfänglich nicht im Team machen kann, ganz ungeachtet der Fähigkeiten der Mitglieder.
Das ist so eine feinst-und kleinst- Arbeit, da muss erst mal ein Einzelner mit Konzentration und einem gewissen Durchblick die Grundlagen legen. Demokratie ist da nicht gefragt ;-)
Wenn die Basis und die Schnittstellen mal stabil sind, kann man im Team weitere Features einbauen (z.B. RTF und DOC Parser etc.).

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Gut wie ihr meint !

Dann werde ich meine Lösung weiter Erwickeln.

Das ist der beste ansatzt...im Moment. Bis mir was anders einflät

Wir können es noch lange sagen, das es schwer ist so was zu schreiben. Das ist auch garkeine frage

Besonders für große Texte wird es mächtig viele Problem geben...

Ich meine beim Markieren nicht nur das anzeigen das etwa Markiert ist, sondern auch noch das ich den Markierten Teil verändern kann... und bei großen texten wird es so oder so Probleme geben, egal welche Lösung wir auch nehmen werden.

Bis jetzt ist mir noch kein Weg eingefallen wie das bei größern Texten aussehen könnte.

Außer beim Laden... wenn es nur um das anzeigen und Markieren ginge währe es wesentlich leichter, aber wir wollen ein Text zur Laufzeit hinzufügen und ändern/bearbeiten/Edittieren können das macht das ganze so schwer. Und mir geht es jetzt auch nicht darum in erster Line eine Komponente zu Entwickeln die das kann.

Sondern viel mehr erstmal alle Möglichkeiten die wir haben zu testen und die beste(n) zu nehmen.

Dann wissen wir/weiß ich wie die Klasse aussehen muss.
Führer habe ich immer sofort angefangen eine Klasse zu schreiben. Und ich musste X male neu anfangen weil immer irgendwas nicht stimmte. Den Fehler mache ich jetzt nicht mehr !

Also wie währe es wenn wir erstmal alle Lösungen wie wir den Text verwalten auf zählen, ich kenne zwei Lösungen:

1: Jeder Buchstabe ist ein Objekt
hat sehr viele vorteile aber könnte oder ist langsam bei Größern Texten da müssten wir/ich uns etwas überlegen. Wie wir die anzahl der Objekte im speicher auf ein Minimum halten können.

2: wir gruppieren den Text in ihre Konfigurationen. z.b. in einer TStringlist. Pro Zeile wird es dann eine Konfiguration geben. Das verkompliziert einfach alle Punkte !

Das Markieren wird schwiriger das ändern von Text Zeilen/Spalten wird Probleme geben.
Aber bei größern Texten dürfte es keine Probleme geben... bzw. ab einer bestimmten Anzahl von Konfigurationen wird es auch hier Probleme geben.....

Ich denke beide Lösungen haben bei großen Texten, Große Probleme.

Evlt. fallen euch ja noch andere Wege ein. für das Problem.

Und nochmal:
wer sagt, das geht nicht oder Dauert wochen, hat natürlich recht und das weiß auch jeder(und ich auch), aber das bringt nichts !

Keiner ist gezwungen mitzumachen. Das ist ein freiwilliges Projekt.

Den Hinweis das ist schwer wird, habe ich hier schon mind. 1000 mal gelesen.
Was bringt das wenn ihr(eigentlich ist es nur einer, ich möchte ja kein scharf anschauen*G*) das X Male zu wiederholen ?

Also, was haltet ihr von diesem Vorschlag ? Fallen euch noch andere Lösungen ein ?
Es geht jetzt nicht darum eine perfekte klasse zu Entwickeln die genauso arbeitet wie die von Delphi !

Nagut das ist auch ein Ziel aber nicht das Hauptziel. Erstmal müssen wir den Kern der Klasse entwickeln. D.h. mühevolles Rum testen und ausprobieren was der Beste weg ist und aus den erkenntissen können wir dann eine Klasse entwickeln die genauso arbeitet wie die von Delphi oder sogar noch viel besser ist, weil unsere komponente soll einiges Tage sehr viele Dateiformate laden und speichern können.

So ich hoffe keiner sagt mehr, das ist schwer werden wird oder evlt. sogar für uns unmöglich.

Ich weiß worauf ich mich einlasse und ich weiß auch warum ich kein 3D Spiel schreibe(auch wenn ich davon Träume *G*).

Ich weiß genau was ich schaffe und was ich nicht schaffe. Was ich nicht schaffe reduziere ich auf ein minmum, indem ich solange überlege und teste bis es geklappt hat, und zwar so wie ich es mir vorgestellt habt !

Ich finde da ihr anscheind es Besser wisst als ich könntet ihr auch mal "code" liefern !
und ich hoffe jetzt wisst ihr um was es eigentlich erstmal geht.

Sowas braucht einfach zeit und die haben wir ! der eine mehr der anderer weniger oder gar keine !

So viel dazu !

Edit:
ich bin mir sehr sicher, das es genau so auch in z.b. OpenOffice oder ähnlichen Programmen gemacht wird ! alles andere währe viel zu aufwendig, meiner Meinung nach !
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Zum Edit, ich bin mir sicher das es nicht so ist und hab auch ne zeimlich genaue vorstellung wie man das lösen könnte zumindest von den ansätzen her allerdings 1. keine zeit 2. keine lust mich damit zu beschäftigen. mach einfach und quatsch nich jahrhunderte lang drüber du kommst eh immer mit den selben sachen das das nicht geht wissen wir aber du nicht also probiers aus, mach deine erfahrungen und du bist schlauer. hörn tust du eh auf keinen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ihr sagt doch nur das es so nicht geht wie ich es machen möchte !

Und selbst schlägt ihr nur vor es anders zu machen.
Und die schrift Konfiguationen in Gruppen zu verwalten, das sehe ich doch so richtig oder ?
Aber auch hier dürfte irgendwann Schluss sein, oder nicht ?

du brauchst ja keinen code zu schreiben. Ich bin schon zu frieden, wenn du deine/eure Ideen hier posten würdet.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ich kann mich jetzt durch einen Text bewegen mit den Pfeiltasten und kann an beliebiger stelle Text einfügen.

Und dank der ObjektList die ich verwende geht das einfügen fast auto.
Allerdings gibt es noch einige kleiner Fehler die ich noch beheben muss...

Also nochmal: möchte mir jemand von euch ernsthaft helfen ?
(egal wer,sollte nur wissen auf was er/sie sich Einlässt )
MFG
Michael Springwald

Antworten