Input - Routine (die Xte)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

D2006

Administrator

Betreff: Input - Routine (die Xte)

BeitragMo, Feb 14, 2005 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute,

ich fand für mein Spiel keine brauchbare. Kurzerhand schrieb ich selbst eine.

Code: [AUSKLAPPEN]
; Input-Routine © 2005, ChaosInteractive, written by Daniel 'D2006' Liebetrau.
; This Code is declared as PD

; Besonderheiten:
; Text kann markiert werden
; Alle Copy/Paste/Cut Tastenkürzel funktionieren

Graphics 640,480,32,2
SetBuffer BackBuffer()


;Globals für die Funktion
Global INP_C%,INP_L%,INP_M%=-1,INP_DONE

Repeat
Cls
Text 10,10,"Bitte geben Sie irgendetwas ein:"
inp$=Input(10,50,inp$,30)
Flip
Until INP_DONE
FlushKeys()

Cls
Text 320,240,Chr$(34)+inp$+Chr$(34),1,1
Flip
WaitKey()
End



Function Input$(x,y,dat$,max=65536)
   Local a,d,c$,SHIFT = GetKeyState(16), STRG = GetKeyState(17)
   Local EINFG = GetKeyState(45), ENTF = GetKeyState(46), ENTER = GetKeyState(13)
   Local r=ColorRed(),g=ColorGreen(),b=ColorBlue()
   Local m,l
   INP_DONE=0

   Text x,y,dat$

   ;blinkender Cursor
   If MilliSecs() Mod 800 < 400 Then Rect x+StringWidth(Left$(dat$,INP_C%)),y,1,FontHeight()
   
   ;Markierter Text:
   If INP_M%>-1 Then
      m=INP_M%
      l=INP_L%
      If l<0 Then m = m-Abs(l) : l=Abs(l)
      Color r,g,b
      Rect x+StringWidth(Left$(dat$,m-1)),y,StringWidth(Mid$(dat$,m,l)),FontHeight()
      Color 255-r,255-g,255-b
      Text x+StringWidth(Left$(dat$,m-1)),y,Mid$(dat$,m,l)
      Color r,g,b
   EndIf
   a = GetKey()
   
   ;Eingabe:
   If a>31 And a<256 Then
      If INP_M%>-1 Then
         dat$= Left$(dat$,m-1)+Mid$(dat$,m+l)
         INP_C%=m-1
         INP_M%=-1
         INP_L%=0
      EndIf
      If Len(dat$)=max Then d=1
      dat$ = Left$(dat$,INP_C%) + Chr$(a)+ Mid$(dat$,INP_C%+1+d)
      INP_C%=INP_C%+1
      If Len(dat$)>max Then dat$=Left$(dat$,max):INP_C%=max
   EndIf
   
   ;Löschen / Backspace:   
   If a=8 And Len(dat$)>0 Then
      If INP_M%>-1 Then
         dat$= Left$(dat$,m-1)+Mid$(dat$,m+l)
         INP_C%=m-1
         INP_M%=-1
         INP_L%=0
      ElseIf INP_C%>0             
         dat$ = Left$(dat$,INP_C%-1)+Mid$(dat$,INP_C%+1)
         If INP_C%>0 Then INP_C%=INP_C%-1
      EndIf   
   EndIf
   
   ;Entfernen:   
   If ENTF=-32767 And SHIFT=0 And Len(dat$)>0 Then
      If INP_M%>-1 Then
         dat$= Left$(dat$,m-1)+Mid$(dat$,m+l)
         INP_C%=m-1
         INP_M%=-1
         INP_L%=0
      ElseIf INP_C%<Len(dat$)            
         dat$ = Left$(dat$,INP_C%)+Mid$(dat$,INP_C%+2)
      EndIf   
   EndIf
   
   ;Einfügen:
   If (EINFG=-32767 And SHIFT<>0) Or (KeyHit(47) And STRG<>0) Then   ;Einfügen
      If INP_M%>-1 Then
         dat$= Left$(dat$,m-1)+Mid$(dat$,m+l)
         INP_C%=m-1
         INP_M%=-1
         INP_L%=0
      EndIf
      c$=INPUT_paste$()
      If Len(dat$)=max Then d=Len(c$)
      dat$ = Left$(dat$,INP_C%) + c$ + Mid$(dat$,INP_C%+1+d)
      INP_C% = INP_C%+Len(c$)
      If INP_C%>max Then INP_C%=max
      If Len(dat$)>max Then dat$=Left$(dat$,max)
   EndIf

   ;Kopieren:
   If (EINFG=-32767 And STRG<>0) Or (KeyHit(46) And STRG<>0) And INP_M%>-1 And INP_L%<>0 Then
         INPUT_copy(Mid$(dat$,m,l))
   EndIf
   
   ;Ausschneiden:
   If (ENTF=-32767 And SHIFT<>0) Or (KeyHit(45) And STRG<>0) And INP_M%>-1 And INP_L%<>0 Then
         INPUT_copy(Mid$(dat$,m,l))
         dat$= Left$(dat$,m-1)+Mid$(dat$,m+l)
         INP_C%=m-1
         INP_M%=-1
         INP_L%=0
   EndIf
   
   ;POS1:         
   If KeyHit(199) Then
         If SHIFT Then
            If INP_M%=-1 Then INP_M%=INP_C%+1
            INP_L%=-INP_M%+1
         Else
            INP_L%=0
            INP_M%=-1
         EndIf   
         INP_C%=0
   EndIf      
   
   ;ENDE:
   If KeyHit(207) Then
         If SHIFT Then
            If INP_M%=-1 Then INP_M%=INP_C%+1
            INP_L%=Len(dat$)-INP_M%+1
         Else
            INP_L%=0
            INP_M%=-1
         EndIf            
         INP_C%=Len(dat$)
   EndIf
   
   ;NACH LINKS:      
   If GetKeyState(37)=-32767 And INP_C%>0 Then
         INP_C% = INP_C% - 1
         If SHIFT Then
            If INP_M%=-1 Then INP_M%=INP_C%+2
            INP_L%=INP_L%-1
         Else
            INP_M%=-1
            INP_L%=0
         EndIf      
   EndIf
   
   ;NACH RECHTS:      
   If GetKeyState(39)=-32767 And INP_C%<Len(dat$) Then
         INP_C% = INP_C% + 1
         If SHIFT Then
            If INP_M%=-1 Then INP_M%=INP_C%
            INP_L%=INP_L%+1
         Else
            INP_M%=-1
            INP_L%=0
         EndIf   
   EndIf
   If ENTER Then INP_DONE=1:INP_M%=-1:INP_L%=0:INP_C%=0      
   Return dat$
End Function
   
Function INPUT_paste$() ;Funktion zum Auslesen des Clipboards. THX an OJay
   Local txt$="",t
   t = OpenClipboard(0)
   If t=0 Then Return ""
   If ExamineClipboard(1)
      txt$=GetClipboardData$(1)
   EndIf
   CloseClipboard
   Return txt$
End Function

Function INPUT_copy(txt$) ; Funktion zum Beschreiben des Clipboards. THX an OJay
   Local cb_TEXT=1
   If txt$="" Then Return
   OpenClipboard 0
   EmptyClipboard
   SetClipboardData cb_TEXT,txt$
   CloseClipboard
End Function


Feedback erwünscht.

MfG
D2006

EDIT: sorry, hier noch die .decls:

Zitat:
.lib "user32.dll"

OpenClipboard%(hwnd%):"OpenClipboard"
CloseClipboard%():"CloseClipboard"
ExamineClipboard%(format%):"IsClipboardFormatAvailable"
EmptyClipboard%():"EmptyClipboard"
GetClipboardData$(format%):"GetClipboardData"
SetClipboardData%(format%,txt$):"SetClipboardData"

GetKeyState%(Key%):"GetAsyncKeyState"
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
  • Zuletzt bearbeitet von D2006 am Mo, Feb 14, 2005 15:36, insgesamt einmal bearbeitet

adba

Betreff: hmm

BeitragMo, Feb 14, 2005 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich eine nützliche Funktion aber ich kann si mir nicht anschauen da ich kein BlitzPlus habe..


Gebt doch bitte an für welches Blitz das der Code geschriben ist!

oder man könnte den code auch nach Blitz Programm sortieren!

D2006

Administrator

BeitragMo, Feb 14, 2005 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry, da war eine Funktion zu testzwecken noch drinne.
Hab die rausgenommen. Ist jetzt B2D und B3D kompatibel.

MfG
D2006
 

noir

BeitragMo, Feb 14, 2005 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
sorry, da war eine Funktion zu testzwecken noch drinne.
Hab die rausgenommen. Ist jetzt B2D und B3D kompatibel.

MfG
D2006


nein Wink blitzbasic 2d kann keine userlibs verwenden. ginge also nur wenn man die clipboard funktionen rausnimmt. (und z.b diese dll dafür benutz: https://www.blitzforum.de/viewtopic.php?t=8448)
Fragt und man wird euch helfen

Das Alternativ BlitzBasic-Forum: FreeCoder
Einfach chatten: BlitzChat
Code&Text schnell und einfach pasten: FreePasting
  • Zuletzt bearbeitet von noir am So, März 06, 2005 12:36, insgesamt einmal bearbeitet

Mooch

Betreff: ...

BeitragMo, Feb 14, 2005 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die tolle(n) Function(s)!
Konnte ich grad gebrauchen!

Ich hoffe man darf sie auch in seinen
Spielen verwenden!?!

mooch
8)
Pentium IV 3.0Ghz; nVidia Geforce 6800;
Microsoft Windows XP Home SP2; BlitzBasic 3D

.:: Sites ::.
.:: http://www.fl4sh-clan.de/ ::.


 

fliege

BeitragMo, Feb 14, 2005 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked
Ist eine sehr gute Funktion, kann ich sie auch verwenden??

Fliege
Wer weiß was kommt.. ?

Wild-Storm

BeitragMo, Feb 14, 2005 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
nein. natürlich nicht. die codes stehen hier nur zum anschauen.
lol....
Visit http://www.next-dimension.org
-------------------------------------------------
Freeware Modelle, Texturen & Sounds:
http://www.blitzforum.de/forum...hp?t=12875

D2006

Administrator

BeitragMo, Feb 14, 2005 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
im Code steht:
Code: [AUSKLAPPEN]
; This Code is declared as PD


PD heißt Public Domain, was wiederum bedeutet das ihr damit anstellen könnt was ihr wollt. Kein Credits Eintrag, einfach nichts braucht ihr zu beachten.

MfG
D2006

Mooch

BeitragDi, Feb 15, 2005 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Hinweis.

Da sieht man mal...
Man lernt andauernd neues.

Razz

mooch
Pentium IV 3.0Ghz; nVidia Geforce 6800;
Microsoft Windows XP Home SP2; BlitzBasic 3D

.:: Sites ::.
.:: http://www.fl4sh-clan.de/ ::.


 

Broghi

BeitragSo, Mai 08, 2005 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Erst mal danke für dieses Programm, kann man immer mal gebrauchen.

Aber wie kann ich jetzt die Variable "max" für die maximale Eingabe vergrößern?
Hab mir den Code mal angeschaut, finds aber nicht
Wozu lernen wir überhaupt programmieren?
Damit der Computer für uns Aufgaben löst (die wir ohne ihn nie gehabt hätten!).
 

CodeMaster

BeitragSo, Mai 08, 2005 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schön, aber es wird immer nur ein Keyhit registriert - wenn man eine
Taste länger drückt, passiert nix mehr, was gerate beim manuellen
Löschen doch ärgerlich ist. Wird das noch verändert?
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

MichiMeister

BeitragSo, Nov 11, 2007 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich bekomme die Routine nicht zum laufen.
In B+ gibt es keine user32.dll. Wo bekomme ich die her?
Da ist nur eine demolib.dll und demolib.decls.

The_Nici

BeitragSo, Nov 11, 2007 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Die user32.dll ist bei Windows dabei.

Würd nach 2 jahren eh keinen mehr interessieren. :/

MichiMeister

BeitragMo, Nov 12, 2007 9:18
Antworten mit Zitat
Benutzer-Profile anzeigen
The_Nici hat Folgendes geschrieben:
Die user32.dll ist bei Windows dabei.

Würd nach 2 jahren eh keinen mehr interessieren. :/




Und die muß dann ins userlib-Verzeichnis kopiert werden?

Offensichtlich interessiert es mich. Smile

BladeRunner

Moderator

BeitragMo, Nov 12, 2007 11:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, die Decls gehört nach userlib, die DLL darf in System oder im Anwendungsordner liegen. Da user32.dll eine Windowsdll ist reicht es also die decls einzutragen, der Rest ist schon an der passendne Stelle Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

MichiMeister

BeitragMo, Nov 12, 2007 11:56
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Nein, die Decls gehört nach userlib, die DLL darf in System oder im Anwendungsordner liegen. Da user32.dll eine Windowsdll ist reicht es also die decls einzutragen, der Rest ist schon an der passendne Stelle Wink



Vielen Dank. Gut zu wissen.
Kann ich die Decls in eine beliebige Datei schreiben oder muß die einen speziellen Namen haben?

SpionAtom

BeitragMo, Nov 12, 2007 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab gerade kein BB zur Hand, aber darf die dll nicht auch in den userlib-ordner?
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

Dreamora

BeitragMo, Nov 12, 2007 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Darf aber bei einer System DLL brauchts das nicht, denn die Datei ist auf jedem System schon drauf.
Du würdest nur extra datenmüll erzeugen wenn du sie kopierst

Die datei muss <irgendetwas>.decls heissen und im userlibs ordner sein.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Abrexxes

BeitragMo, Nov 12, 2007 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Besser gesagt, eine dll die ausgeführt wird muss sich im gleichen Ordner des Programms befinden ODER in einem absoluten Pfad der in der reg steht (mach aber keiner da kein guter Style) ODER im System32 Ordner von Windows.

Und da stehen diese Dateien ja schon. Eigene DLLs die benötigt werden in diesen Ordner zu kopieren gilt als mittelschweres Verbrechen. Sie haben da nichts zu suchen, weder Hilfsdlls noch bass/fmod noch sonst was, da gehören nur Windows dlls rein (also die originalen von Microsoft).

cu

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group