Eingabefeld mit einer Liste die sich unten öffnet
Übersicht

bruce85Betreff: Eingabefeld mit einer Liste die sich unten öffnet |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Moin zusammen ![]() Mir war ein bisschen langweilig, dann hab ich eben mal ein bissel geproggt ![]() Und zwar habe ich ein Input Funktion geschrieben mit einer liste die sich öffnet und anzeigt was man alles schon geschrieben hat und wenn man dann einen der texte anklickt, dann wird dies in das Eingabefeld kopiert. Hier ist mal der Code, ich habe auch paar Kommentare mit reingeschrieben: Code: [AUSKLAPPEN] Graphics 320,240
SetBuffer BackBuffer() ;Schriftart Arial laden Global schrift = LoadFont("Arial",18,0,0,0) ;Schriftart setzen SetFont schrift ;Variable für den Text den man eingebt Global Eingabe$ ;Variable i für den erste Position des textes auf 40 Global i=40 ;Rect Breite auf 0 setzen Global rect_breite=0 ;Maximale Breite des Rects auf 0 setzen Global rect_max_breite=0 ;Rect Höhe auf 0 setzen Global rect_hoehe=0 ;Text breite auf 0 setzen Global text_breite ;Die anzahl der texte die eingegeben wurden Global text_anzahl=0 ;Types für die Texte Type texte Field tex$ Field text_x Field text_y End Type ;Die texte werden ausgeblendet, wenn 1 dann werden die sichtbar Global anzeigen = 0 ;Texte laden Load() Repeat ClsColor 127,127,127 Cls ;Die Funktion InputRoutine aufrufen InputRoutine() ;Wenn anzeigen = 1, dann die texte anzeigen If anzeigen = 1 Then ;Alle texte abfragen For t.texte = Each texte Color 0,0,0 ;Rect zeichnen wie gross das Feld insgesamt ist, wo die texte drin sind Rect 18,40,rect_breite+4,rect_hoehe,0 ;Berechnung auf welcher text die maus sich befindet If RectsOverlap(MouseX(),MouseY(),1,1,t\text_x,t\text_y,rect_max_breite+2,20) Then Color 136,196,255 ;Rect zeichnen wo die maus gerade auf ein Text zeigt Rect 19,t\text_y+1,rect_max_breite+2,18 If MouseDown(1) And MouseHit(1) Then ;Wenn die linke maustaste gedrückt wird, ;dann t\tex$ die Variable Eingabe$ zuweisen ;umd den Text dann oben anzuzeigen und anzeigen ;anschließend auf 0 setzen Eingabe$ = t\tex$ anzeigen=0 EndIf EndIf Color 0,0,128 ;Alle Texte anzeigen die bisher geschrieben wurden Text t\text_x,t\text_y,t\tex$ Next EndIf If KeyDown(28) And KeyHit(28) Then ;Text erzeugen t.texte = New texte ;Das was eingegeben wurde, übergeben wir die Variable t\tex$ t\tex$ = Eingabe$ ;Text X Position immer auf 20 setzen t\text_x = 20 ;i soll Text Y Position übergeben werden t\text_y = i ;Anschließend i auf 20 erhöhen i = i + 20 ;Text breite ermitteln text_breite = StringWidth(Eingabe$) ;Wenn noch kein Text vorhanden ist, dann wird das hier ausgeführt If rect_max_breite = 0 Then ;Rect Breite ermitteln rect_breite = StringWidth(Eingabe$) ;Dann soll das erstmal die Maximale grösse sein rect_max_breite = StringWidth(Eingabe$) EndIf ;Wenn dann Text breite grösser wie die maximale Rect breite ist, ;dann wird das hier ausgeführt If text_breite > rect_max_breite Then ;Text Breite ermitteln rect_breite = StringWidth(Eingabe$) ;Dann die neue Rect Breite ermitteln rect_max_breite = StringWidth(Eingabe$) EndIf ;Rect Höhe wird immer um 20 Pixel grösser rect_hoehe = rect_hoehe + 20 ;Eingabe löschen Eingabe$ = "" ;Text anzahl immer um eins erhöhen text_anzahl = text_anzahl + 1 ;Texte asublenden anzeigen = 0 ;Texte Speichern die im moment in der liste sind Save() EndIf Flip Until KeyHit(1) End ;--- InputRoutine --- Function InputRoutine() ;ASC Code ermitteln b$ = GetKey() ;Text breite und höhe ermitteln t_x = StringWidth(Eingabe$) t_y = StringHeight(Eingabe$) Color 0,0,0 ;Dann ein Rect zeichnen für den Curser Rect t_x+21,t_y+4,2,14 ;Rect für das Eingabefeld zeichnen Rect 18,19,280,20,0 ;wenn b > 0 dann ausführen If b > 0 Then ;wenn die Rückteste gedrückt wird, dann wird das hier nicht ausgeführt If Not b = 8 Then ;wenn die Entertaste gedrückt wird, dann wird das hier nich ausgeführt If Not b = 13 Then ;ASC Code in Buchstabe umwandeln und diese dann Eingabe$ zuweisen Eingabe$ = Eingabe$ + Chr$(b$) EndIf EndIf EndIf ;wenn die Rücktaste gedrückt wird, dann wird immer ein Buchstabe gelöscht If b = 8 Then Eingabe$ = Mid(Eingabe$,1,Len(Eingabe$)-1) EndIf ;wenn in das Eingabefeld geklickt wird, dann werden die Texte die momentan ;in der liste sind, angezeigt If RectsOverlap(MouseX(),MouseY(),1,1,20,20,280,20) Then If MouseDown(1) And MouseHit(1) anzeigen=1 EndIf EndIf Color 0,0,128 ;Input anzeigen Text 20,20,Eingabe$ End Function ;--- Speichern --- Function Save() ;Datei Speichern Datei = WriteFile("Save.txt") ;Text anzahl in Datei schreiben WriteLine Datei,text_anzahl ;Rect höhe in Datei schreiben WriteLine Datei,rect_hoehe ;Rect breite in Datei schreiben WriteLine Datei,rect_breite ;i in Datei schreiben WriteLine Datei,i ;Die maximale grösse der Rect in Datei schreiben WriteLine Datei,rect_max_breite ;alle texte abfragen um diese dann zu speichern For t.texte = Each texte WriteLine Datei,t\tex WriteLine Datei,t\text_x WriteLine Datei,t\text_y Next ;Datei schließen CloseFile(Datei) End Function ;--- Laden --- Function Load() ;Datei laden Datei = ReadFile("Save.txt") ;Wenn Datei nicht 0, dann ausführen If Not Datei = 0 Then ;Text anzahl von der Datei lesen text_anzahl = ReadLine(Datei) ;Rect höhe von der Datei lesen rect_hoehe = ReadLine(Datei) ;Rect breite von der Datei lesen rect_breite = ReadLine(Datei) ;i von der Datei lesen i = ReadLine(Datei) ;Die Maximale grösse der Rect von der Datei lesen rect_max_breite = ReadLine(Datei) ;Alle texte lesen die erstellt wurden, dazu haben wir ja ;die Variable Text anzahl benutzt, wieviele texte wir geschrieben haben For j=1 To text_anzahl ;und dann die Texte erzeugen t.texte = New texte t\tex = ReadLine(Datei) t\text_x = ReadLine(Datei) t\text_y = ReadLine(Datei) Next ;Datei schließen CloseFile(Datei) EndIf End Function Wenn man dann in Das Eingabefeld klickt, dann öffnet sich die liste und wenn man dann ein Text anklickt, dann wird dies in das Eingabefeld kopiert. Vieleicht kann ja einer was damit anfangen ![]() MfG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
snörkl |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
schade das hier niemand antwortet^^. Also es ist zwar mal wieder eine input funktion^^ (die entwickler könnten ja auch mal mit nem update ne neue bringen die dann auch mal das ständige schreiben von neuen dingern unnötig macht^^), aber ich finds echt genial. Toller einfall ![]() |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es heißt zwar, man soll seine Codes gut Kommentieren. aber DAS scheint mir "etwas" übertrieben. der Code hat mehr Kommentare als Befehle O_o
Ausserdem reicht es, wenn der befehl "clscolor" nur einmal aufgerufen wird, also kannst du den auch Ausserhalb der Schleife machen. Gruß, Smily0412 |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke euch für die Antworten.
Ich hab halt zuviele kommentare geschrieben^^ ist zwar bissel unübersichtlich geworden wegen die ganzen kommis, aber naja^^ Edit: Hast recht, den befehl ClsColor hätte ich auch am anfang hinschreiben können, es macht ja eigentlich nix, wenn es in der schleife steht ![]() MfG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ganz streng genommen doch.
Das Programm führt ungefähr hundert mal in der Sekunde (grob geschätzt) einen Befehl aus, welcher eigentlich keinen sinn hat. Bei den Heutigen Standarts und einem so kleinen prog macht sich sowas zwar kaum bemerkbar, aber bei größeren Projekten sollte man besser aufpassen, dass einem sowas nicht passiert |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
des weiteren solltest du wenn schon was im feld steht nur einträge anzeigen die mit dem selben buchstaben(oder mehreren buchsrtaben) anfangen anzeigen | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
IronstormErstklassiger Contest-Veranstalter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt fehlt noch eine Markierungsroutine und eine Möglichkeit das Menü zu schließen wenn man nichts anklicken will und es ist nicht schlecht.
MFG Ironstorm |
||
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group