|
|
SGT_FW
by Aku_Aku. 06/17/25 15:37
|
|
|
|
|
|
|
|
Eingabefeld für Texte & Zahlen
#351307
12/23/10 14:49
12/23/10 14:49
|
Joined: Nov 2008
Posts: 46
DrBong
OP
Newbie
|
OP
Newbie
Joined: Nov 2008
Posts: 46
|
Hallo leute, ich hab ein kleines Programm geschrieben, es ist sogut wie fertig aber ich habe ein kleines problem mit dem Eingabefeld.... und zwar, es soll möglich sein in dem eingabefeld 400 zeichen rein zu schreiben die in einem dem entsprechen großen string gespeichert werden.. ABER das eingabefeld ist für 400 zeichen eindeutig zu klein deswegen wird es einfach aus dem eingabefeld weiter raus geschrieben... wie kann ich das ändern, das sich der text nachhinten verschiebt und nur das was im eingabefeld steht sichtbar ist ?
STRING* Text_1 = "#400";
PANEL* pW3_1 =
{
pos_x = 33;
pos_y = 32;
layer = 2;
bmap = Window3;
flags = OVERLAY | SHOW;
on_click = eText_1;
}
TEXT* tText_1 =
{
pos_x = 53;
pos_y = 35;
layer = 3;
font = fArial_2;
string = Text_1;
flags = SHOW;
}
function eText_1()
{
sys_message("[Enter]");
wait(1);
inkey(Text_1);
}
So ungefehr sieht mein code aus, ich komm wirklich nicht mehr weiter... ihr habt mir schon öffters geholfen und ich hoffe ihr werdet es auch dieses mal, ich bedank mich schon im vorraus Mfg, DrBong
|
|
|
Re: Eingabefeld für Texte & Zahlen
[Re: DrBong]
#351309
12/23/10 15:12
12/23/10 15:12
|
Joined: Jul 2010
Posts: 283 Germany
jenGs
Member
|
Member
Joined: Jul 2010
Posts: 283
Germany
|
Also ein Textfeld mit Zeilenumbruch zu schreiben ist ziemlich einfach. Aber soweit ich dich verstehe, willst du das Verhalten eines standart Editfields aus Windows nachahmen. Das ist leider sehr schwierig, weil gs in sachen Texteingabe nur grundlegende funktionen bereitstellt. Du kannst z.B den Text, der den String darstellt mit text.size_x horizontal begrenzen. Das Problem: Der String wird einfach nur in der Darstellung eingekürzt, man kann ihn jedoch nicht Horizontal skrollen. Problem 2: Das Ganze funktioniert nur mit Truetype fonts. Möglichkeit 2 (die aber nicht funktioniert  Man könnte seinen Text auf einer Targetmap rendern und diese dann als ein Panel->window element darstellen und dementsprechend skrollen. Leider folgendes Problem: Die targetmap wird nicht geupdated, das heißt, Eingaben werden nicht richtig dargestellt, da der Hintergrund (der alte Text) nicht geleert wird. Weiteres Problem: Texte auf Targetmaps sehen zum kotzen aus. Ich hoffe ich hab dich jetzt nicht mutlos gemacht. LIBGUI, ein von einem user erstelltes Gui system enthält eine leichte annäherung an ein Editfield. Leider kann man dort z.B. nicht mit dem Cursor herumwandern, sondern nur hinzufügen und löschen. Ich glaube er hat sogar das Skrollen implementieren können, bin mir aber nicht sicher.
|
|
|
Re: Eingabefeld für Texte & Zahlen
[Re: jenGs]
#351313
12/23/10 15:35
12/23/10 15:35
|
Joined: Nov 2008
Posts: 46
DrBong
OP
Newbie
|
OP
Newbie
Joined: Nov 2008
Posts: 46
|
LIBGUI, ein von einem user erstelltes Gui system enthält eine leichte annäherung an ein Editfield. Leider kann man dort z.B. nicht mit dem Cursor herumwandern, sondern nur hinzufügen und löschen. Ich glaube er hat sogar das Skrollen implementieren können, bin mir aber nicht sicher.
Ja ich kenne die LIBGUI aber der Code ist mir da zu verwirrend  Naja das mit der maus wär mir eigendlich egal, aber das mit dem scrollen muss ich irgendwie hinktriegen  EDIT: Danke das mit size_x hat super geklappt, hätt eigendlich auch selber drauf kommen können
Last edited by DrBong; 12/23/10 15:47.
|
|
|
Re: Eingabefeld für Texte & Zahlen
[Re: DrBong]
#351315
12/23/10 15:54
12/23/10 15:54
|
Joined: May 2007
Posts: 2,043 Germany
Lukas
 
Programmer
|
 
Programmer
Joined: May 2007
Posts: 2,043
Germany
|
Erstmal lol, dass hier ein Tippfehler nochmal kopiert wurde ("LIBGUI").  Aber so schwer ist es doch nicht, mit LBGUI eine Textbox zu erstellen, die genau das macht, was du willst. Es selbst zu programmieren wäre wohl schwieriger. 
#include <acknex.h>
#include <default.c>
#include "lbgui.h"
...
void main ()
{
...
wait(1);
...
LBGUI_open();
on_exit = LBGUI_close;
LBG_flags |= LBGUI_PROTECTMOUSE;
...
LBG_EDITBOX* editbox1 = LBG_create_editbox (0, 64, 320, 256, 16, 4, "Editbox", LBG_ebmaps(editbox_left_tga,editbox_middle_tga,editbox_right_tga), EF_SHOW);
// Du musst hier natürlich deine eigenen Bitmaps einsetzen ;)
editbox1.max_length = 400; // Auf 400 Zeichen beschränken
Mit diesem Code kannst du eine Textbox erstellen, die auf 400 Zeichen beschränkt ist und automatisch mitscrollt.  Wirf doch mal einen Blick ins LBGUI-Manual und in smalldemo.c 
|
|
|
Re: Eingabefeld für Texte & Zahlen
[Re: Lukas]
#351382
12/24/10 01:27
12/24/10 01:27
|
Joined: Nov 2008
Posts: 46
DrBong
OP
Newbie
|
OP
Newbie
Joined: Nov 2008
Posts: 46
|
Wirklich Tolle GUI.. hab bisel rumprobiert aber in meinem fall ist die leider sehr unpassend.. ich müsste fast den ganzen code neu schreiben und es werden viel zu viele objekte für "ein kleines" programm geladen.. DANKE dir für deine Hilfe aber das mit screllen werd ich wohl vergessen müssen.... Eine frage hab ich aber noch... strings kann man ja mit inkey() ändern... geht es auch bei variablen ? oder muss ich da variablen in strings conventieren und umgekehrt ? 
|
|
|
Re: Eingabefeld für Texte & Zahlen
[Re: jenGs]
#351390
12/24/10 04:38
12/24/10 04:38
|
Joined: May 2007
Posts: 2,043 Germany
Lukas
 
Programmer
|
 
Programmer
Joined: May 2007
Posts: 2,043
Germany
|
LBGUI (keine ahnung wie ich auf LIB kam) ist ziemlich solide. Hat aber eine markante schwäche: Geschwindigkeit. Versteh mich nicht falsch Lukas, dein Programm hat nicht umsonst den Contest gewonnen, jedoch erstellt es mit jedem updatecyklus neue bitmaps (und für Fenster werden sie sogar jedes mal neu geblittet).
Und da 3dgamestudio den Garbage nich collected, hat man eine menge toter bitmaps im hintergrund (oder wird eine erstellte Bitmap in einem BMAP* pointer komplett überschrieben, wenn man dem Pointer eine andere Bitmap zuweißt?)
Das raubt dem ganzen etwas speed, besonders, wenn man aufwändige 3d berechnungen im Hintergrund durchführt.
Die Bitmaps werden nur neu geblittet, wenn du die Größe eines Fensters änderst. Die alten werden vorher mit ptr_remove entfernt. Die einzige Alternative dazu wäre panel-windows zu verwenden, und du hast ja selbst LBGUI auf diese Weise verändert.  Wenn du mit einem "Udpatezyklus" jeden Frame meinst, liegst du falsch. Wenn du die update-Funkionen meinst, dann ist das behaviour-by-design, denn die update-Funktionen sind dazu da, um ein Objekt auf alle möglichen Änderungen anzupassen, und falls die Bitmaps oder die Größe verändert wurde, muss halt nochmal geblittet werden. Die update-Funktionen sind auch nicht dafür da, jeden Frame aufgerufen zu werden.  Solange du nicht alles mit Fenstern zuhaust, sollte LBGUI sich kaum auf die Performance auswirken. Die einzige Schwäche ist das Ändern der Größe von Fenstern. 
|
|
|
|