Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 24.06.2011, 21:09 Titel: |
|
|
Code: |
type TextRow
text as string 'enthält die Zeile
index as integer 'Zeilennummer
prevrow as TextRow ptr 'Zeiger auf vorhergehende Zeile, 0 wenn 1.Zeile
nextrow as TextRow ptr 'Zeiger auf nachfolgende Zeile, 0 wenn letzte Zeile
end type
|
Code: |
Type TextLine
V_Next as TextLine Ptr
V_Prex as TextLine Ptr
V_Data as String
End Type
|
...naja bis dahin hatten wir fast den gleichen Gedanken ...
Ich hab dann noch versucht nen Object zu basteln
Und nen Index muß ich mit rein nehmen, da meine Slider beim Scrollen von "draußen" nur eine "Zeilennummer anspringen" kann und keinen Zeiger.
Un diese Sache in ein Zeitproblem: bei jeder Zeilenoperation muß neu durchgezählt werden.... Das muß ich ja jetzt schon berücksichtigen wenn das Ding in die GUI eingebunden wird.
Werd den Code mal näher inspizieren
Danke
Mutton |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 24.06.2011, 21:13 Titel: |
|
|
Durchlaufen musst du das array bei jedem erzeugen und löschen einer weiteren zeilennummer sowieso, um die aktuelle zeilennummer zu ermitteln.
wenn du die aktuelle zeilennummer wissen willst, würde ich sie zwischenspeichern, und in den entsprechenden move , copy / paste, typing, usw. ständig aktualisieren.
wenn du z.B. zeilen löscht, einfach -1 beim CR/LF +1 .. dann hast du eine simple lösugn, die unheimlich schnell is, im vergleich zum umschreiben aller zeilennummern in der LL wenn eine zeile am anfang oder mittig hinzugefügt oder gelöscht wird.
gleiches prinzip läst sich hier auch auf die textgrösse (len(text)) oder die aktuelle position (cursor) im gesammt-text anwenden.
Du kannst auch eine jumpliste erstellen, welche aus einem linearem Ptr Array besteht.
die vergrösserung des arrays kannst du z.B. zyklisch a x50 oder ähnliches realisieren. das sind dann 200Byte für 50 Zeilen.
wenn du dann springen willst, kannst du einfach per rechnung ptrarray(zeilennummer) = LL-Ptr anfahren.
das erhöht natürlich auch den codeumfang bei der bearbeitung im KeyASCII bereich.
Aber, Multiline-textfields sind, wenn an sie "ordentlich" programmiert, nicht ohne und machen viel aufwand
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 24.06.2011, 21:25 Titel: |
|
|
An die Jumpliste dacht ich auch schon, doch die sollte, wie der Text, auch ala LL gestaltet sein, was zumindest die Suchzyklen drückt.
Bin mir aber nicht sicher ob die dadurch anfallenden Vergleichsoperationen denn Geschwindigkeitsvorteil wieder aufrauchen. Von daher ist nen Array als Jumpliste vorzuziehen |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 24.06.2011, 21:36 Titel: |
|
|
Naja... du kannst ein mittelmass annehmen.
quasi eine LL aus Array's ... pro LL z.B. ein array mit 50 Ptr einträge. Dann kannst du z.B. die zeile 200 durch die ausrechnung von zeilennummer \ arraylänge = ll_sprünge rechnen, und musst dann nur 4 sprünge im ll ausführen, anstat 200 und anschliessend mit der reste-rechnung (mod) direkt den eintrag im array anspringen ... kann man natürlich deutlich erhöhen.
aber, es ist eher selten, das mutlilinetexte so gross werden, das derartige sprünge über mehrere hundert LL's nötig werden.
problem beim array ist einfach die grösse. man kann nicht unbeschränkt zeilennumern hinzufügen, udn die (wie auch schon beim text selbst), reallokierung is problematisch.
darum stückeln, und beim anlegen eines neuen array's im LL gleich das kommplete array mit 200 byte erzugen. (ohne redim. Kostet nur massig zeit)
dadurch hast du auch den vorteil, das du beim grosser speicherauslastung nicht das problem bekomen könntest, das dein array nitch mehr expandiert werden kann, wenn das system keinen ausreichend grossen, zusammenhängenden freien speicherbereich mehr zur verfügung stellen kann.
durch die "stückelung" kannst du das meist verhindern, weil kleine zusamenhängende stücke eher frei sind, als grosse.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 24.06.2011, 21:54 Titel: |
|
|
... alter Schwede... Ok genug Hausaufgaben!!!
Ich bedank mich mal artig für diese Lehrstunde...
mfG Mutton |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 24.06.2011, 22:00 Titel: |
|
|
Da fällt mir gerade noch auf, das es noch eine vorteil hätte. Und zwar beim löschen grosser absätze. So braucht man nicht das array umständlich über grössere mengen hin umordnen ( z.B. bei 500 zeilen und dem löschen von 200 zeilen) die 300 übrigen nach vorn verschieben, sondern kann gemütlich einfach die erste LL deallocieren, und spart somit das ganze geschiebe.
NP. HF.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 24.06.2011, 22:09 Titel: |
|
|
Blockoperationen bitte in der nächsten Stunde....
erstma sacken lassen.. diss janze hier |
|
Nach oben |
|
|
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 25.06.2011, 20:50 Titel: |
|
|
Sehr hübsche GUI. Hat mir auf Anhieb gefallen.
Habe aber gleich eine Frage. Ich möchte eine einfache Linie darstellen in einem Programm was deine sGUI nutzt. Allerdings wird diese Linie "verschoben", wenn ich ein Menü öffne, welches sich direkt über der Linie befindet. So schaut mein Code aus:
Code: | Menu (event,1,0,1,"Hilfe")
Menu (event,1,1,0,"Hilfe F1")
Menu (event,1,2,1,"Ueber")
Line (200,20)-(200,768)
MenuOn(event)
Do
event->xSleep(1)
Loop Until event->EXITEVENT |
Wie kann ich also ein Linie zeichnen, ohne dass sie "verschoben" wird? |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 25.06.2011, 22:58 Titel: |
|
|
Kannst du mal einen Screenshot machen? Ich kann mit deinem Beispiel gerade keine LINE-Verschiebung nachbauen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 25.06.2011, 23:12 Titel: |
|
|
Oben Links im Bild. |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 26.06.2011, 13:18 Titel: |
|
|
@Westbeam:
Ich kann es mit deinem Beispiel grad nicht nachvollziehen.
Rein optisch ist es wirklich nen Problem des Menüs, der Hintergrund-Puffer wird an der falschen Position zurückkopiert.
Mal sehen ob ich den Fehler erzwingen kann
Mutton |
|
Nach oben |
|
|
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 26.06.2011, 16:00 Titel: |
|
|
Okay, wäre toll wenn du das beheben könntest, dann könnte ich auch mein kleines Projekt fertigstellen:
Das ist ein kleiner (Stichwort: klein!) GUI-Designer für deine sGUI. Momentan kann man nur Buttons in das Fenster tun, aber das funktioniert ganz gut. Das erstellte Fenster wird als eine .bas Datei abgespeichert, welche man aus dem Designer heraus starten kann.
Ich hätte eine Bitte: Könntest du vielleicht Labels in deine sGUI integrieren? Also einfache Texte, die man in ein Fenster tut. |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 26.06.2011, 18:31 Titel: |
|
|
Schaut sehr gut aus
Aber mit deinem Beispielcode kann ich den Fehler einfach nicht erzwingen
Ist denn der Fehler auch noch im jetzigen Ausbaustadium vorhanden?
vllcht darf ich ja mal in den Code schauen.
Das mit dem Label werd ich einbauen.
Mache allerdings ab morgen ne kleine Urlaubsreise und schnapp ich mir mal nen Buch und lass den Computer Computer sein
Mutton |
|
Nach oben |
|
|
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 26.06.2011, 18:41 Titel: |
|
|
Zitat: | Schaut sehr gut aus Daumen |
Danke
Zitat: | Ist denn der Fehler auch noch im jetzigen Ausbaustadium vorhanden? |
Durchaus
Zitat: | vllcht darf ich ja mal in den Code schauen. |
Ich schick ihn dir gleich per PM.
Zitat: | Mache allerdings ab morgen ne kleine Urlaubsreise und schnapp ich mir mal nen Buch und lass den Computer Computer sein |
Im Urlaub ein Buch? Im Urlaub lieg ich ihn der Hängematte und schlürf Cocktails |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 08.09.2011, 22:32 Titel: |
|
|
... ist jetzt nur mal zu Testzwecken:
(und nein, die "MultiLineTextEingabeUndEditierBox" ist noch nicht mit bei, schlicht wegen Faulheit )
Da ich das UDT ein wenig umgebaut habe (etliche Bezeichner sind anders) und die
Aufteilung in den Includes etwas anders geworden ist(was mehr ne Geschmacksfrage war)
folgende wesentliche Veränderungen:
1.)
alle Control Includes müssen jetzt mit dem Schlüsselwort "ONCE" includiert werden.
Da einige Controls auch das Includieren anderer erfordert und ich dies ab jetzt in der entsprechenden
.bas erledige. So muß man nicht überlegen, was brauche ich denn noch für Sachen...
2.)
Slider.bas geht jetzt auf in TrackBar.bas und ScrollBar.bas
3.)
ScrollBars enthalten jetzt ihre eigenen Arrows!
4.)
GadgetOn/Sleep/Off ist (via OVERLOAD) auch mit 2 Parametern zu füttern: einem Start- und EndControl
So lassen sich mehrere Controls "en Bloc" manipulieren (Vorraussetzung ist natürlich sie wurden hintereinander "geAdded")
5.)
einfaches Label hinzugefügt.
Syntax:
* AddLabel (event as EventHandle ptr,x as integer,y as integer,txt as string,col as integer=TextColor) as Gadget ptr
und dazu
*SetLabelText (gad as Gadget ptr,txt as string)
*SetLabelColor (gad as Gadget ptr,col as integer)
6.)
*Filerequester enthält nun ein ".." Button fürs Wechseln ins übergeordnete Verzeichnis
(..ach und diese "RenameTheButtonHack" müßte jetzt über Gadgetptr->caption laufen, ist ungetestet)
in Ermangelung einer Projektseite im Portal nun ein wenig Webspace
http://www.muttonhead.homepage.t-online.de/data/sGUI_v0.8.3.5.zip |
|
Nach oben |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 08.09.2011, 22:49 Titel: |
|
|
Zitat: | in Ermangelung einer Projektseite im Portal nun ein wenig Webspace |
Wie darf man das denn verstehen? Du hast doch eine Projektseite angelegt. |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 08.09.2011, 23:09 Titel: |
|
|
Neee MOD.
Eigentlich wollte ich es von meinem Webspace runter haben ,weil ich etwas "aufgeräumt" hatte und sGUI mir fürs Weghauen zu schade war hab ichs einfach in den Downloadbereich des Portals gestellt.
Da nun doch ein paar Veränderungen stattfinden, und ich nicht jedesmal im Portal bei nem kleinen Pieps ne neue Download-Version anbieten will, nun doch wieder mein bescheidener Webspace.
War halt so nicht geplant, es sei denn "man" portiert den Download zu einem Projekt im Portal...
Hmmm... clorophyllosophische Gedanken:
Ich verstehe nen Download als "was solides", da weis man was man hat, halt nen "Jodel-Diplom".
Ein Projekt hingegen sieht heut so aus... und morgen so!!!
...
Es geht mir nur darum, gewisse Sachen zu testen (testen lassen), wenn sie funktionieren gehören sie zum Download... |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 22.04.2012, 21:14 Titel: |
|
|
Hallo Freunde !
@Muttonhead
Ich möchte dein sGUI benutzen für mein Schachspiel.
Ich wollte dein Meinung kennen. Hast du Rate mir zu geben ?
Roland |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 22.04.2012, 23:10 Titel: |
|
|
Hallo Francis
Wenn der Loop im Modul "E08Z.bas" der "Mainloop" deines Schachprogrammes darstellt, dann sollten sich dein Schachprogramm und sGUI relativ gut verbinden lassen.
Mich würde es freuen
Mutton |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 23.04.2012, 08:54 Titel: |
|
|
Muttonhead hat Folgendes geschrieben: | Wenn der Loop im Modul "E08Z.bas" der "Mainloop" deines Schachprogrammes darstellt, dann sollten sich dein Schachprogramm und sGUI relativ gut verbinden lassen. |
Gut !
Ich will beginnen sGUI zu studieren.
Roland |
|
Nach oben |
|
|
|