Hi!
Ich bastle gerade an einer Art von "Tabelleneingabe". Dazu möchte ich Gernots GUI verwenden. Bis jetzt funktioniert es gar nicht schlecht, aber so richtig will es noch nicht. Kann mir da irgendwer ein kleines Tutorial dazu geben?
GLG
W.
Zu DDgui?
DDguiPushDialog
DDguiWidget(...)
DDguiButton(...)
while true
ddgui_show(true)
showscreen
hibernate
wend
Tja, soweit habe ich das schon! Problemchen ist eher ein Tabellenfeld zu erzeugen. Am Anfang dachte ich an Textfelder, aber das ist auch irgendwie schwierig umzusetzen. Vor allem, wenn die verschiedenen Zeilen verschieden viele Spalten haben:
test1=1|2|3
test2=1|2|3|4
test3=1|2
usw.
Außerdem müßte ich bei Textfeldern immer den gesamten Satz befüllen, was es auch ziemlich schwierig macht! Was sagst du, wie könnte ich das am Besten machen???
PS.: Was ich vorhabe zu machen, ist sowas in der Art wie eine "Excel" - Tabelle, in die man seine Daten einschreibt und die das System dynamisch in eine Text Datei (unter einem gewissen Format bzw. einer gewissen Formatierung) setzt. Dadurch kann ich es nämlich auch gleich einlesen und weiterbearbeiten. (Den Einleseteil habe ich schon fertig, mir geht es darum alles elegant eingeben zu können!)
Selber eine Input Route schreiben !
Das schon. Rein Graphisch würde ich halt gerne die DDGUI benutzen, da es dort die Textfelder gibt und die halt wirklich praktisch wären...
das Problem an der GUI ist die, das man Spacer benutzen muss, wie in HTML, was nicht vom vorteil ist!
Da wäre eine GUI mit X Y koordinaten besser gewesen für jeden button!
Das ist der hautgrund wieso ich die GUI auch nicht verwende
Nun, ich habe jetzt (ab ca. 18:00 heute) frei und habe vor das Ding dieses Wochenende fertig zu bekommen. Hast du Bock mir zu helfen?
dabei :D
Sehr gut! Schicke dir heute Abend den aktuellen Stand und eine ca. 3-4 Seitige Erklärung dazu! hehehe
Ja ne da versteh ich doch nix!!!
Mach 10 Seiten mit bildern und einen kleinen Video :D
Alles klar Willi bis dann!!
Ja, moment mal: Du kannst in DDgui eigene Steuerelemente machen. Ich meine, dass bei dem Beispiel sogar eins gemacht wird. Da muss man eine CALLBACK überschreiben, und die meckert dann: He, ich kenn den Typ "XXX" nicht - mach Du das mal.
Hab vermutlich heraus gefunden, wie das Ganze läuft. Wenn es so läuft, wie ich denke, dann stelle ich morgen mal den 1. Test online. Vielleicht wird mein Programm ja doch noch was! hehehe
Niemals :D
Du kannst mir ja trotzdem helfen! Ich bekomme die Tabellenstruktur nämlich noch nicht so richtig hin! Da muß ich mir noch was einfallen lassen. Vor allem deshalb, weil ich auch lange Einträge einbauen will. Wenn ich die nun in die Textbox schreibe und der Text länger ist, als die Textbox breit, dann verschwindet der Rest einfach. Mache ich die Textbox aber größer, ist es vorbei mit der Tabellenstruktur. Überleg dir was!!!!!
Da werde ich so nix machen können...
Hab auch keinen Plan wie das bei anderen GUI's so abläuft.
Hab ich mich auch schon gefragt wie man sowas macht ^^
Mach den kurzen text, und wenn man reinklickt mach einen neuen Dialog, der in einem großen Textfeld den Text ändern lässt?
Das wird schon irgendwie hin hauen. Ich teste einfach und falls es nicht hinhauen sollte, stelle ich es einfach schnell online und dann tüfteln wir halt ein bißchen dran run. Irgendwie muß das blöde Ding doch zum Laufen zu bringen sein...
Und wenn ich eine Protierung für *.xls - Dateien selber schreiben muß...
HIIIIIIIIIIIIIIIIIIIIIILFE!
Das funktioniert irgendwie nicht:
// --------------------------------- //
// Project: gldb Eingabe
// Start: Tuesday, October 30, 2007
// IDE Version: 5.062
GLOBAL field_x, field_y, field$[]
field_x = 1
field_y = 1
DIM field$[field_x + 1][field_y + 1]
DDgui_Init()
DDgui_pushdialog(0,0,1023,767)
FOR y_tmp = 1 TO field_y
FOR x_tmp = 1 TO field_x
DDgui_list(field$[y_tmp][x_tmp], "Testlauf lang", 400, 30)
NEXT
NEXT
DDgui_spacer(10000, 30)
DDgui_button("bt_complex", "Bearb.", 0,0)
WHILE TRUE
FOR y_tmp = 1 TO field_y
FOR x_tmp = 1 TO field_x
IF DDgui_get(field$[y_tmp][x_tmp] + "CLICKED") THEN END
NEXT
NEXT
IF DDgui_get("bt_complexCLICKED") THEN END
DDgui_show(FALSE)
SHOWSCREEN
WEND
Was mach ich falsch? Oder denke ich hier gar falsch?
GLG
W.
Ich glaub du bist ein noob ^^
GLOBAL field_x, field_y, field$[]
field_x = 1
field_y = 1
DIM field$[field_x + 1][field_y + 1]
Was zur hölle soll das den ?
dan in den For von von 1 bis 1?
HÖÖÖÖÖÖÖÖÖ
Hi WP,
denke, was fehlt, ist die ID der Listfelder, also der Name dieser Objekte
Probiers mal so:
...
DDgui_pushdialog(0,0,1023,767)
FOR y_tmp = 1 TO field_y
FOR x_tmp = 1 TO field_x
field$[y_tmp][x_tmp] = "ls_" + x_tmp + y_tmp
DDgui_list(field$[y_tmp][x_tmp], "Testlauf lang", 400, 30)
NEXT
NEXT
...
Also die Zeile
field$[y_tmp][x_tmp] = "ls_" + x_tmp + y_tmp
ist hinzugekommen. Damit geben wir jedem List-Eintrag eine eindeutige ID. Bei deinem Beispiel oben fehlt die Benamung der Objekte, deswegen heißen alle gleich, nämlich "" und es wird auch nur einer dargestellt.
Gut, dann hab ich da noch eine Frage! Das mit der ID hab ich inzwischen gesehen... =/ (wie blöd von mir)
Wieso kann ich hier den X-Zähler nicht weiter erhöhen als 1? Irgendwie stimmt was mit DIM nicht, vermute ich mal...
// --------------------------------- //
// Project: gldb Eingabe
// Start: Tuesday, October 30, 2007
// IDE Version: 5.062
GLOBAL field_x, field_y, field$[]
field_x = 1
field_y = 1
DIM field$[field_x + 1][field_y + 1]
DDgui_Init()
DDgui_pushdialog(0,0,1023,767)
FOR y_tmp = 1 TO field_y
FOR x_tmp = 1 TO field_x
y_tmp$ = y_tmp
x_tmp$ = x_tmp
field$[y_tmp][x_tmp] = y_tmp$ + x_tmp$
DDgui_list(field$[y_tmp][x_tmp], "Testlauf lang", INTEGER(1000 / field_x), 30)
NEXT
NEXT
DDgui_spacer(10000, 30)
DDgui_button("bt_complex", "Bearb.", 0,0)
WHILE TRUE
FOR y_tmp = 1 TO field_y
FOR x_tmp = 1 TO field_x
field$[y_tmp][x_tmp] = y_tmp$ + x_tmp$
IF DDgui_get(field$[y_tmp][x_tmp] + "CLICKED") THEN END
NEXT
NEXT
IF DDgui_get("bt_complexCLICKED") THEN END
DDgui_show(FALSE)
SHOWSCREEN
WEND
der steigt dann aus was :D
Weil du kein Redim machst ?!? ^^
So bleibt dein Dim auch immer auf 2 feldern
PS komm ins ICQ du Hund ^^
*ggg*
yep, Schranzor Recht geb!
Entweder die DIM'st gleich auf die gewünschte Größe oder passt dein Array mit REDIM an
Jetzt läuft's... =)
Binde noch ein paar funktionen ein, mal sehen wie's dann läuft!
// --------------------------------- //
// Project: gldb Eingabe
// Start: Tuesday, October 30, 2007
// IDE Version: 5.062
GLOBAL field_x, field_y, field$[]
field_x = 4
field_y = 1
DIM field$[field_x + 1][field_y + 1]
DDgui_Init()
DDgui_pushdialog(0,0,1023,767)
FOR y_tmp = 1 TO field_y
FOR x_tmp = 1 TO field_x
REDIM field$[x_tmp + 1][y_tmp + 1]
y_tmp$ = y_tmp
x_tmp$ = x_tmp
field$[x_tmp][y_tmp] = x_tmp$ + y_tmp$
DDgui_list(field$[x_tmp][y_tmp], "Testlauf lang", INTEGER(1000 / field_x), 30)
NEXT
NEXT
DDgui_spacer(10000, 30)
DDgui_button("bt_complex", "Bearb.", 0,0)
WHILE TRUE
FOR y_tmp = 1 TO field_y
FOR x_tmp = 1 TO field_x
y_tmp$ = y_tmp
x_tmp$ = x_tmp
field$[x_tmp][y_tmp] = x_tmp$ + y_tmp$
IF DDgui_get(field$[x_tmp][y_tmp] + "CLICKED") THEN END
NEXT
NEXT
IF DDgui_get("bt_complexCLICKED") THEN END
DDgui_show(FALSE)
SHOWSCREEN
WEND
Wenn Du 1 mehr DIMst, dann solltest Du acuh:
FOR x = 0 (in Worten: Null) TO field_x
machen...
Ich habe da noch eine Frage:
Ich habe versucht den Wert test in ein Textmodul einzugeben. Normalerweise sollte das der Inhalt davon in text$ stehen, oder? Wenn ich aber nun abfrage, steht da irgendwie gar nichts drin. Wie kommt das? Muß ich zusätzlich was einfügen, damit ich einen Wert erhalte?
Hier ein kleiner Teil der Eingabe:
FUNCTION eingabe:
Local text$
DDgui_text("tx_text", text$, 210, 0)
DDgui_button("bt_complex_main", "OK", 0,0)
WHILE TRUE
IF DDgui_get("bt_complex_mainCLICKED")
IF text$ = "test" THEN END
ENDIF
DDgui_show(FALSE)
SHOWSCREEN
WEND
ENDFUNCTION
Häh?
Ich glaube du schmeist da ein wenig was durcheinander. Du fragst innerhalb der Schleife doch nur ab, ob der Button geklickt wurde. Den Text aus dem Eingabefeld müsstest du aber auch noch auslesen.
Glaube das ging in etwa so:
text$ = DDgui_get$("tx_textTEXT")
In deinem Beispie müsste text$ immer leer sein.
Achso... Das gehört extra rausgelesen? Gut zu wissen, danke! Irgendwie hab ich das durch die Beschreibung der GUI nicht ganz rausbekommen...
PS.: Danke für den Tip! Jetzt funktioniert es super! =)
Eine Frage zu DDGUI_LIST:
Wenn ich etwas mit List ausgewählt habe, ist das Feld immer aktiv geschalten. Wenn ich nun irgendwo drauf klicke, dann deaktiviert sich erst die blaue Markierung. Ist es möglich die Markierung von Anfang an zu deaktivieren und erst dann zu aktivieren, wenn man zum ersten Mal drauf klickt? Und falls ja, wie funktioniert das?
GLG
W.
Ja. Setz' den Selected auf -1:
//! ### list ###
//! idTEXT token1|token2|token3...
//! idCOUNT number of items
//! idSELECT -1(none) 0...n
//! idCLICKED inform about SELECT change
Also: DDGuiSet("ls_listeSELECT", -1)
Super! Danke! Das hilft mir ein ordentliches Stück weiter! =)
So, neue Frage:
Ich hab da so'ne "Textbox" in die ich einen Wert reinlade. Nun möchte ich den Wert, den ich reingeschrieben habe, verändern und wieder rauslesen, aber da habe ich folgende Problemchen:
1. Unverändert ließt sich der Wert (ddgui_getitemtext$ [oder so]) ganz normal ein
2. Ergänze ich den Text, ändert er sich und wird gespeichert.
3. Lösche ich einen Textteil weg (mit der Rücktaste oder Entfernen ist egal), verschwindet der gesamte Text und ich kann den Rest der Eingabe neu schreiben.
Was tun?
GLG
W.
PS.: Programmauszug gibt's morgen (falls nötig)
beispiel, bitte. textbox text mit: ddgui_get("txboxTEXT")
Bist du dieses Wochenende mal im Chat?
Anbei ein (möglicherweise etwas unübersichtlicher da aus dem Zusammenhang [des Gesamtprogrammes] gerissener) Codeauszug:
FUNCTION zelle_bearb: spalten_name$, a_tmp, b_tmp, c_tmp
LOCAL a, tmp$, temp$
DDgui_Init()
DDgui_list("spalte_titel", "Zelle bearbeiten: " + spalten_name$ + "_" + a_tmp + "_" + b_tmp, 1000, 20)
DDgui_spacer(10000, 30)
IF spalten$[a_tmp][b_tmp][c_tmp] = " " THEN spalten$[a_tmp][b_tmp][c_tmp] = ""
DDgui_text("zelle", spalten$[a_tmp][b_tmp][c_tmp], 1000, 20)
DDgui_spacer(10000, 30)
DDgui_button("bt_complex_save", "SAVE", 0,0)
DDgui_button("bt_complex_back", "BACK", 0,0)
WHILE TRUE
IF DDgui_get("bt_complex_saveCLICKED")
a_tmp$ = a_tmp
b_tmp$ = b_tmp
DDgui_set("zelle", spalten$[a_tmp][b_tmp][c_tmp] + "SELECT")
tmp$ = DDgui_getitemtext$("zelle", spalten$[a_tmp][b_tmp][c_tmp])
//DDgui_msg(tmp$ + " " + LEN(tmp$), 0)
IF LEN(tmp$) = 0 THEN tmp$ = " "
FOR a = 0 TO spalten - 1
IF a = c_tmp
temp$ = temp$ + tmp$
ELSE
temp$ = temp$ + spalten$[a_tmp][b_tmp][a]
ENDIF
IF a <> spalten -1 THEN temp$ = temp$ + "|"
NEXT
INIPUT spalten_name$, spalten_name$ + "_" + a_tmp$ + "_" + b_tmp$, temp$
spalte_view(spalten_name$)
ENDIF
IF DDgui_get("bt_complex_backCLICKED")
spalte_view(spalten_name$)
ENDIF
DDgui_set("spalte_titelSELECT", -1)
IF DDgui_get("spalte_titelCLICKED") THEN DDgui_set("spalte_titelSELECT", -1)
DDgui_show(FALSE)
SHOWSCREEN
WEND
ENDFUNCTION
Hi!
Habe noch eine Frage an dich, Gernot!
Wie weit rückt eine Textbox, Listbox oder sonst was von der linken Seite rein, wenn ich sie standartmäßig auf ein Modul setze? Damit meine ich, daß das Ding nicht direkt auf der Kante bzw. auf dem Rand liegt, sondern ein paar Pixel einrückt. Ich frage deshalb, damit ich immer exakt auf die selbe Größe komme, wenn ich die Felder dynamisch einlese. Alias:
(((Gesamtbreite - 100) / Gesamtanzahl der Spalten) - Einrückung) + Knopfbreite 1 + Knopfbreite 2
GLG
W.