![Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht](misc/logos/logo.png) |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Muttonhead
![](images/avatars/162291652952d571675a3c2.png)
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 15.07.2014, 16:44 Titel: |
|
|
Hach ja...
Bug
StringGadget.bas Zeile 145:
durch Folgende ersetzen:
Code: | if refgad->event->ASCCODE=46 and instr(TO_GetLineContent(refgad,1),".")=0 then enable=1 'wenn . gedrückt und noch kein . im String ist |
Die INSTR Funktion sucht stattdessen nach"-" was falsch ist.
mal sehen was noch so kommt
Mutton |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Haubitze
Anmeldungsdatum: 14.10.2009 Beiträge: 132
|
Verfasst am: 16.07.2014, 20:09 Titel: Request: Labels inerhalb einer Listbox? |
|
|
Hallo Muttonhead,
ich bin, seit ich sGui gefunden hab, ein echt grosser fan davon.
nun haette ich einen vorschlag/idee fuer die ListBox,
und zwar geht es um Labels inerhalb dieser.
grund dafuer ist das ich gerne eine itemliste erstellen moechte welche
ich aber unterteilen moechte. Labels innerhalb einer ListBox sind dann
natuerlich nicht anklickbar.
also ungefaehr so
Zitat: |
_label
____item
____item
____item
_label
____item
|
waere schoen wenn du dich dieser idee annimmst, ich waehre sehr
dankbar dafuer. ich weis das das sicher viel arbeit sein wird aber ich
hab zZ keine loesung/alternative dafuer gefunden.
salute haubitze |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Muttonhead
![](images/avatars/162291652952d571675a3c2.png)
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 16.07.2014, 20:41 Titel: |
|
|
jetzt muß ich fragen mit welcher Version du arbeitest. Davon hängt es jetzt tatsächlich ab.
Man könnte tatsächlich die Anzahl der führenden Leerzeichen als Indikator für Label/Item nutzen.
Mutton |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Haubitze
Anmeldungsdatum: 14.10.2009 Beiträge: 132
|
Verfasst am: 16.07.2014, 20:47 Titel: |
|
|
hehe die version is ja eher egal, ich steige eh grad auf die aktuelle um da du da ja ein paar sachen verbessert hast.
ich haette da aber eher an ein flag gedacht (0=text,1=label) waere halt ein parameter mehr der standartmaessig auf 0 steht.
fuer das einrucken des textes kann ja der user selber sorgen, wichtig waere
fuer mich das das label sich optisch vom listbox-text unterscheided( evtl so
aussieht wie ein button nur nicht anklickbar ist).
salute
PS: mein beitrag fuer den blinkenden cursor funtzt leider auch nur bei event->xSleep(-1,0) |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Muttonhead
![](images/avatars/162291652952d571675a3c2.png)
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 16.07.2014, 21:11 Titel: |
|
|
Ich kümmer mich, wird aber etwas dauern...
Zitat: | PS: mein beitrag fuer den blinkenden cursor funtzt leider auch nur bei event->xSleep(-1,0) |
naja xSleep heißt ja eigentlich nicht umsonst xSleep
Mutton |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Muttonhead
![](images/avatars/162291652952d571675a3c2.png)
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 17.07.2014, 18:25 Titel: |
|
|
@haubitze:
zum Testen!!!
Es funktioniert, sieht aber noch grauenvoll aus
Die Listbox hat nen neuen Parameter, ist der 0(kann dann auch weggelassen werden) arbeitet die LB so wie bisher(der Filerequester benötigt diese Arbeitsweise). Ist der Parameter 1 kann man Labels und Items definieren
Code: | TO_AppendLine(list, "LBL:Label 1")
TO_AppendLine(list, "ITM:001:Item 1")
TO_AppendLine(list, "ITM:100:Item 2")
TO_AppendLine(list, "ITM:003:Item 3")
|
ein Label beginnt mit "LBL:" und danach dessen Bezeichnung
ein Item beginnt mit "ITM:" anschließend einer dreistelligen ID und nach einem weiteren Doppelpunkt dessen Bezeichnung.
GetListBoxVal() und SetListBoxVal() arbeiten im Modus 0 mit den Zeilenummern, im Modus 1 hingegen mit den IDs der Items
ListBox_Basis.bas:
http://www.freebasic-portal.de/porticula/listboxbasis-bas-1763.html<--diese sollte richtig funktionieren, sorry
ListBox.bas:
http://www.freebasic-portal.de/porticula/listbox-bas-1761.html
Demo_ListBox_2.bas:
http://www.freebasic-portal.de/porticula/demolistbox2-bas-1762.html
Mutton |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Haubitze
Anmeldungsdatum: 14.10.2009 Beiträge: 132
|
Verfasst am: 18.07.2014, 09:05 Titel: |
|
|
Hallo Muttonhead,
sieht doch gut aus und erfuellt meine zwecke voll und ganz, dank dir dafuer.
salute |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Haubitze
Anmeldungsdatum: 14.10.2009 Beiträge: 132
|
Verfasst am: 18.07.2014, 23:55 Titel: |
|
|
hallo Muttonhead,
kann es sein das die MultiLineMessageBox seit neustem buggt?
folgender code zeichnet zwar die box aber nicht den text darin, erst
nach einmaligem RETRUN wird text gezeigt und scheinbar eine zeile
eingefuegt. auch ist mir aufgefallen egal welchen mode ich bei erstellen
eines MLB gadgets setze scheint return eine zeile einzufuegen.
log.bi
Code: |
Type log_t
Public:
Declare Sub set_line(s As String)
Declare function get_line(l As UInteger) As String
max_lines As UInteger
nr_lines As UInteger
new_line As Integer
Private:
str_line(0 To 256) As String
End Type
Sub log_t.set_line(s As String)
If nr_lines<max_lines Then
nr_lines+=1
str_line(nr_lines-1)=s
new_line=TRUE
Else
For i As UInteger=1 To nr_lines-1
str_line(i-1)=str_line(i)
Next
'If s<>"" Then
str_line(max_lines-1)=s
'EndIf
new_line=FALSE
endif
End sub
Function log_t.get_line(l As uinteger) As String
If l>max_lines Then l=max_lines
Return str_line(l)
End Function
Dim Shared clog As log_t
clog.max_lines=255
clog.set_line("CLIENT LOG "+ Date +" "+ Time)
|
code schnipsel
Code: |
Case 2
If clog.new_line=TRUE Then
If clog.nr_lines>TO_GetLines(clog_mlist)-1 then
For i As UInteger=TO_GetLines(clog_mlist)-1 To clog.nr_lines-1
TO_AppendLine(clog_mlist , clog.get_line(i))
Next
'Else
' TO_AppendLine(clog_mlist , clog.get_line(clog.nr_lines-1))
EndIf
Else
For i As UInteger=0 To clog.nr_lines
TO_SetLineContent(clog_mlist, i+1, clog.get_line(i))
Next
EndIf
If GetScrollBarVal(clog_mlist->gad(1))<1 Then
TO_SetCursor(clog_mlist,GetScrollBarVal(clog_mlist->gad(1))+1,GetScrollBarVal(clog_mlist->gad(2)))
Else
TO_SetCursor(clog_mlist,GetScrollBarVal(clog_mlist->gad(1)),GetScrollBarVal(clog_mlist->gad(2)))
EndIf
UpdateMLEB(clog_mlist)
DrawGadget(clog_mlist)
|
in einem anderen fall lade ich den text in die MLB ueber TO_LoadText und das funtzt super.
beides passiert wie bei mir ueblich in einem xSleep(-1,0), da ja im hindergrund in OpenGL gerendert wird.
salute |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Muttonhead
![](images/avatars/162291652952d571675a3c2.png)
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 20.07.2014, 15:58 Titel: |
|
|
@haubitze:
der zweite Codeschnipsel sollte eigentlich funktionieren, ich würde ihn aber vereinfachen...
Code: | TO_ClearText' Text komplett löschen
For
TO_AppendLine()'Deinen Text aus dem Array zeilenweise übertragen
Next
|
hier hab ich mal mehrere Manipulationen hintereinander gepackt und mit sleep "sichtbar" gemacht
Code: | 'Compileroption "-s gui"
#include "sGUI\sGUI.bas"
#include once "sGUI\MultiLineEditBox.bas"
screen 18,32,,&H04
InitGFX
dim as EventHandle ptr event
event=CreateEventHandle
dim as Gadget ptr textedit
textedit=AddMultiLineEditBox(event,10,10,60,20,1)
GadgetOn (textedit)
'zwei Zeilen
TO_AppendLine(textedit,"bla bla")
TO_AppendLine(textedit,"bla bla")
UpdateGadget(textedit)
sleep
'Text weg
TO_ClearText(textedit)
UpdateGadget(textedit)
sleep
'eine neue Zeile
TO_AppendLine(textedit,"bla bla")
UpdateGadget(textedit)
sleep
'noch eine neue Zeile
TO_AppendLine(textedit,"bla bla bla")
UpdateGadget(textedit)
sleep
'zweite Zeile geändert
TO_SetLineContent(textedit,2,":P")
UpdateGadget(textedit)
sleep
do
event->xSleep(1)
loop until event->EXITEVENT
TO_SaveText(textedit,"editierterText.txt")
DestroyEventHandle (event)
end |
Wichtig vielleicht nochmal: wen du eine MLEditbox erstellst, enthielt die bereits die erste Zeile (in der Regel leer). Jetzt ist das anders, sie enthält tatsächlich keine Zeile! GetLines liefert 0! Man muß nun auch nicht mehr die erste Zeile mit SetLineContent setzen, sondern legt einfach mit AppendLine los
Muttonhead |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Haubitze
Anmeldungsdatum: 14.10.2009 Beiträge: 132
|
Verfasst am: 20.07.2014, 16:18 Titel: |
|
|
danke Muttonhead
dein vereinfachter code funtzt super, hatte ich damals wohl
so komisch gemacht weil mir das zeitsparender aussah
nun zeigt mir die MLEB auch den text sofort an
aber warum mein alter code nicht mehr tut bleibt mir trozdem ein
raetsel.
salute |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Muttonhead
![](images/avatars/162291652952d571675a3c2.png)
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
nemored
![](images/avatars/18585278245ddb8b9d8710.png)
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 05.09.2014, 20:50 Titel: |
|
|
Ich sehe, dass sich bei den Bezeichnungen einiges geändert hat. Gut, dass es eine Referenz ... ich meine, ein Changelog ... äh ...
Du verwendest jetzt eine ganze Menge an SHARED-Variablen - damit es keine Konflikte mit dem Programm oder mit anderen Bibliotheken gibt, würde ich befürworten, sie in einen Namespace zu legen. Wer es bequem will, kann ja immer noch USING verwenden. Aber sonst sehe ich da eine gewisse Gefahr von Inkompatibilitäten.
Mehr kann ich noch nicht sagen, muss erst die Fehlermeldungen wegbekommen.
edit: Noch eine Frage - lässt sich für die Combobox ein Scrolling per Mausrad umsetzen?
edit2: Ein optionaler Parameter zur Einstellung der Combobox-Höhe wäre auch nicht schlecht - bei langen Listen scrollt man da ganz schön. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Muttonhead
![](images/avatars/162291652952d571675a3c2.png)
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 06.09.2014, 09:59 Titel: |
|
|
Zitat: | Ich sehe, dass sich bei den Bezeichnungen einiges geändert hat. Gut, dass es eine Referenz ... ich meine, ein Changelog ... äh ... happy
Du verwendest jetzt eine ganze Menge an SHARED-Variablen - damit es keine Konflikte mit dem Programm oder mit anderen Bibliotheken gibt, würde ich befürworten, sie in einen Namespace zu legen. Wer es bequem will, kann ja immer noch USING verwenden.
Aber sonst sehe ich da eine gewisse Gefahr von Inkompatibilitäten.
|
Referenz ist grad in Arbeit, sollte man vielleicht immer parallel zum Programmschreiben machen.
Wenn man sowas am Stück nachträglich versucht, bekommt man lange Zähne.
Changelog: feine Sache ja... Versionspflege ist eine recht stiefmütterlich behandelte Sache...
In der Regel wird einfach wild drauflos geschraubt, an mehreren Baustellen gleichzeitig.
Ursprünglich wollte ich den zusätzlich allozierten Speicher (Images, Textobjekte, SubEventHandles usw) in Listen zentral im
Eventhandle verwalten (eine kleine Übung mit etwas Vererbung), das ist wieder verworfen worden.
Übrig geblieben ist lediglich die Gadgetliste, und die gabs ja schon vorher, nur halt anders.
Stattdessen hab ich nun versucht, dem Gadget UDT einen ordentliche Destruktor zu verpassen. Auch das war nicht so einfach,
da Gadget und Eventhandle sehr verzahnt sind, so incomplete type Sachen...
Sowohl Gadgets als auch EventHandle sollten nun den zur Lauftzeit "nachallozierten" Speicher via entprechende Destruktoren
ordnungsgemäß freigeben. Hab es allerdings in der Entwicklungsphase ein paar mal bis zum Bluescreen geschafft.
Ein Fehler in der Scrollbar hat dazu geführt die interne Mathematik komplett zu überarbeiten, was dummerweise keine Lösung
war, Fehler lag im Updaten, Scrollbar ging von falschen Parametern aus.
Die "aufbereiteten" Systemevent sind aus dem Eventhandle herausgenommen worden und sind im Moment globale Variablen. Die anderen
globalen Variablen sind schon Urgestein und haben Bestandschutz...
Ich werden die Systemeventgeschichte aber wieder in ein globales UDT packen. Im Zusammenhang mit den zusammengesetzten Controls
die eigene Eventhandles und Eventloops(die eigentlich nur durchläufer sein können) wollte ich eine einheitliche "Datenquelle" haben.
Alles in allem, das Prinzip ist das Gleiche, jedoch ist intern etliches anders
Bin allerdings durchaus willig, nochmal zurück zu gehen, mir die v0.8.3 mit den neuen Features auszustatten
Zitat: | edit: Noch eine Frage - lässt sich für die Combobox ein Scrolling per Mausrad umsetzen? |
ist ein neuer Systemevent, mal sehen wie sich das einbauen läßt
Zitat: | edit2: Ein optionaler Parameter zur Einstellung der Combobox-Höhe wäre auch nicht schlecht - bei langen Listen scrollt man da ganz schön. |
beim Klicken auf das Pfeilsysmbol der ComboBox wird ein sog. MiniSelector geöffnet. Das Ding funktioniert analog dem Filerequester oder
der Messagebox. Ich werde das mit dem Parameter in betracht ziehen, im Moment kannst du einfach mal die MiniSelctor.bas öffnen und dort mit der 12.Zeile "l=5"
herumspielen.
Mutton
EDIT:
Im ersten Post sind nochmal der Link zum Preview und (neu!) eine Kurzreferenz zum Preview mit allen Befehlen |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Roland Chastain
![](images/avatars/8562497005e53577a8bbec.jpg)
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 07.09.2014, 08:59 Titel: |
|
|
Hallo Muttonhead!
Danke für sGUI 0.8.4.
Ich kann nicht mehr ClickmapGadget.bas kompilieren.
Wenn du hast Zeit, könntest du bitte das Code ändern?
![lächeln](images/smiles/icon_smile.gif)
Zuletzt bearbeitet von Roland Chastain am 07.09.2014, 13:23, insgesamt einmal bearbeitet |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Muttonhead
![](images/avatars/162291652952d571675a3c2.png)
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Roland Chastain
![](images/avatars/8562497005e53577a8bbec.jpg)
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 07.09.2014, 13:13 Titel: |
|
|
Vielen Dank, Muttonhead! Es ist sehr nett.
Muttonhead hat Folgendes geschrieben: | Ich überlege aber, statt dessen ein Control zu schreiben, welches nicht von einer Bitmap abhängig ist. Die Position in einem rechteckigen Feld zu bestimmen sollte nicht allzu schwer sein ![lächeln](images/smiles/icon_smile.gif) |
Ja, es ist richtig: das Bitmap ist nicht wirklich notwendig. (Aber die Technik ist interessant zu kennen.)
Muttonhead hat Folgendes geschrieben: | Wie bezeichnest du den im Schachprogramm das Feld? |
Wie eine Zeichenkette: "a1", "a2", usw. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Muttonhead
![](images/avatars/162291652952d571675a3c2.png)
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 10.09.2014, 19:59 Titel: |
|
|
http://www.muttonhead.homepage.t-online.de/data/sGUI_v0.8.4_Rev_01.zip
*sGUI komplett in ein Namespace eingebettet
*Mausrad als Event eingebaut
*Listbox,Combobox, MultiLineEditBox und der Filerequester können nun mit dem Rad scrollen. Zum Scrollen muß die Maus allerdings immer über dem Control sein. Ich betrachte das mal als Eigenart dieser GUI
So eine Art Focus halten ist derzeit nicht vorgesehen, bzw ist nur einmal in einem Control realisiert worden
*die Demos überarbeitet(das war wohl sehr unvollständig)
*Combobox, Miniselector ist per zusätzlichen Parameter in Zeilenzahl einstellbar
Mutton |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
nemored
![](images/avatars/18585278245ddb8b9d8710.png)
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 10.09.2014, 23:49 Titel: |
|
|
Sieht schon sehr hübsch aus.
Ich bastle für Mages gerade an einem Karteneditor; er ist noch nicht ganz ausgereift und auch noch nicht dokumentiert, aber ich poste ihn mal als sGUI-Beispiel:
http://users.freebasic-portal.de/nemored/karteneditor.zip
Als Anregung für die ComboBox:
- Ich würde die ComboBox ja nicht nur bei Klick auf den Pfeil öffnen, sondern auch beim Klick auf das Textfeld (mir fehlen gerade die richtigen Begriffe).
- Wenn die ComboBox geöffnet ist und ich auf den Pfeil klicke, würde ich erwarten, dass sie sich wieder schließt - stattdessen öffnet sich die Box nochmal, während ein Klick auf eine andere ComboBox lediglich die vorige schließt; etwas verwirrend.
- Blättern mit den Cursortasten wäre natürlich super.
Muss aber nicht sein.
- Und falls es zu so einer Tastensteuerung kommen sollte, könnte ich mir vorstellen, dass die ComboBox bei ESC und vor allem bei ALT+F4 (Close-Button) verlassen wird - der Close-Button sollte in diesem Fall noch zusätzlich EXITEVENT senden. Im Moment verhindert eine geöffnete ComboBox das Beenden des Programms.
- Rechtsklick zum Schließen der ComboBox wäre auch nicht schlecht.
Aber was ich eigentlich sagen wollte: Super Arbeit! ![Daumen rauf!](images/smiles/icon_thumbup.gif) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Sebastian Administrator
![](images/avatars/563932275488e4d20c5ee9.jpg)
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Roland Chastain
![](images/avatars/8562497005e53577a8bbec.jpg)
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 11.09.2014, 08:49 Titel: |
|
|
Danke, Muttonhead. Es lebe sGUI! ![lächeln](images/smiles/icon_smile.gif) |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|