Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Bytes verschieben

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 24.07.2007, 10:53    Titel: Bytes verschieben Antworten mit Zitat

Hi,

gibt es eine moeglichkeit innerhalb eines Pointers und/oder eines ZStrings von einer bestimmten position an die Bytes ohne grossen aufwand von mid oder for/next schleifen nach nach oben/unten zu verschieben?
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 24.07.2007, 13:07    Titel: Antworten mit Zitat

ich glaube SHR und SHL tuen das.
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 24.07.2007, 13:39    Titel: Antworten mit Zitat

nein, shl und shr verschieben Bits. Um Bytes zu verschieben fällt mir auch kein einfacherer Weg ein (höchstens ein schnellerer: asm)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 24.07.2007, 13:46    Titel: Antworten mit Zitat

Was ich machen wollte bzw gemacht hab ist ein eingabefeld mit editier moeglichkeit. Der eingegebende String ist ein ZString, da es einfach ist ein einzelnes zeichen an eine bestimmte position zu setzen.
Das verschieben des Strings nach rechts bei eingabe bzw nach links bei Del hab ich erst einmal mit einer For/Next schleife gemacht, ich hoffte allerdings auf etwas eleganteres....
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 24.07.2007, 14:37    Titel: Antworten mit Zitat

ansonsten shr/shl 8 mal ausführen...(wöre zwar auch eine fn-schleife aber was slls) grinsen
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 24.07.2007, 14:39    Titel: Antworten mit Zitat

Na klar, ich mach in der For/Next die ich gern vermieden haette einfach noch eine die absolut sinnfrei ist durchgeknallt
davon abgesehen kann man einen ZString auch als Array sehen, da hilft mir shl shr rein gar nichts...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 24.07.2007, 16:46    Titel: Antworten mit Zitat

Normale Strings lassen sich übrigens direckt in Zstiring Convertieren zwinkern
Code:
dim as string Eingabe
Input "Hier was eingeben ";Eingabe
dim as zstring*1024 Ausgabe=Eingabe
print
print Ausgabe
print
sleep

Villeicht hilft das ja weiter??
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 24.07.2007, 22:12    Titel: Antworten mit Zitat

nein, wirklich nicht, zur verdeutlichung mein Anfang...
Code:

Const InterfaceName="!Interface"

Const Interface_width  = 90
Const Interface_height = 30
Width Interface_width, Interface_height

    'Dim Send2Interface as Interface_message_
   
    Dim CursPos    as  Integer 'Cursor Position
    Dim ViewLen    as  Integer '
    Dim EditString as   String
    Dim EditS      as  ZString*451
    Dim ViewString as   String

    Dim CursOn   as UByte=1
    Dim CursOff  as UByte=0
    Dim CursMode as Ubyte
   
    Dim EKey as String
   
    Dim VS as Integer
    Dim VE as Integer
   
    Do
   
        EditString=EditS

        '--
        VS=CursPos
        VE=CursPos+Interface_width
        If VE>Len(EditString)Then VE=Len(EditString):VS=VE-Interface_width
        VS=IIf (VS<1,1,VS)
        '--
        ViewString=Mid(EditString,VS,VE)+Space(Interface_width-Len(Mid(EditString,VS,VE)))
        '--
       
        CursPos=IIf (CursPos<  1,  1, CursPos)
        CursPos=IIf (CursPos>449,449, CursPos)
       
        Color 0,15                'Eingabe Farbe (Schwarzer Text, weisser Hintergrund)
        Locate Interface_height,1,0
   
        Print ViewString;
   
        If CursMode=CursOn Then Locate Interface_height,CursPos,0:?"_";
   
        EKey=Inkey
   
        '''******************************
        ''-----
        'Enter
        If Multikey (&h1C) Then
            for l as integer=0 to 450
                EditS[l]=0
                CursPos=1
            next l
        End If
        'Normale Eingabe
        If asc(EKey)>31 and asc(EKey)<125 and Len(EditString)<449 Then
            'CursPos=IIF(CursPos<2,2,CursPos)
            for l as integer=449 to CursPos step-1
                EditS[l]=EditS[l-1]
            next l
            EditS[450]=0
           
            EditS[CursPos-1]=asc(EKey)
            CursPos+=1
            sleep(5)
        End If
        'Home
        If Multikey(&h47) Then CursPos=1:sleep(5)
        'End
        If MultiKey(&h4F) Then CursPos=Len(EditString)+1:sleep(5)
        'Del
        If MultiKey(&h53) Then
            for l as integer=CursPos to 449
                EditS[l-1]=EditS[l]
            next l
            EditS[450]=0
            sleep(5)
        End If
        'BackSpace
        If MultiKey(&h0E) and CursPos>1 Then
            for l as integer=CursPos-1 to 449
                EditS[l-1]=EditS[l]
            next l
            EditS[450]=0
            CursPos-=1
            sleep(5)
        End If
        'Left
        If MultiKey(&h4B) Then CursPos-=1:sleep(5)
        'Right
        If MultiKey(&h4D) Then CursPos+=1:sleep(5)
        'ESC (Clear)
        If Multikey(&h01) Then
            for l as integer=0 to 450
                EditS[l]=0
                CursPos=1
            next l
        End If
        ''-----
        '''******************************
   
        sleep (33),1
       
        CursMode=IIF(CursMode=CursOn,CursOff,CursOn)
       
    Loop Until Multikey(&h01)

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 25.07.2007, 11:06    Titel: Antworten mit Zitat

Mit Mid gehts doch leicht:
Code:

dim as String Text,X
DO
    X=INKEY
    IF X="" THEN
    ELSE
        Text+=X
        locate 1,1
        Print Text+" "
    End IF
   
    IF X=CHR(8) THEN LOCATE 1,1:Text=MID(Text,1,Len(Text)-2) ' Wenn das Zeichen entfernt werden soll
   
   
sleep 1
LOOP UNTIL X=CHR(27)
[/code]
_________________
Bis irgendwann... grinsen


Zuletzt bearbeitet von AndT am 25.07.2007, 11:49, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 25.07.2007, 11:49    Titel: Antworten mit Zitat

...
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 25.07.2007, 11:53    Titel: Antworten mit Zitat

@AndT:
[ernst]
das ist so ziemlich der unsinnigste doppelpost, den ich je gesehen habe
[/ernst]
zwinkern
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 25.07.2007, 11:56    Titel: Antworten mit Zitat

sorry
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 25.07.2007, 11:58    Titel: Antworten mit Zitat

Es erfuellt leider auch nicht ganz seinen zweck... da ich eine Maximale Stringlaenge von 450 Zeichen verwenden will und diese kaum komplett in einer Zeile sichtbar sind ect..

Inwischen habe ich auch schon wieder eine neue Function daraus gemacht, da diese eingabe routine als eigenstaendiger Thread laufen soll, was mit color/locate und Print leider nicht so hinaut wie ich es gerne gehabt haette.

Im Prinzip muss ich nur noch das Timing richtig machen...
Ausserdem beschaeftigt mich die Frage, warum ich bei ein ScreenRes Zeichen von 8*8 habe waerend ich sonst immer mit Zeichen von 8*16 habe...

Code:

Const InterfaceName="!Interface"

Const Interface_width  = 90
Const Interface_height = 60
'Width Interface_width, Interface_height

ScreenRes Interface_width*8,Interface_height*8,32


    Dim ViewString   As  String
    Dim EditString   As ZString*450
    Dim StrLenBuffer As  String
   
    '-------------------------'
    Dim CursPos  as Integer
    Dim CursMode as   UByte
    Dim CursOn   as   UByte=1
    Dim CursOff  as   UByte=0
    Dim VCursPos as Integer
    Dim CursS    as  String
    '-------------------------'
    Dim ViewBuffer as Any Ptr
    ViewBuffer=ImageCreate(1+(Interface_width*8),8)
    '-------------------------'
    Dim VS as Integer
    Dim VE as Integer
    '-------------------------'
    Dim EKey as String
    ''---------------------------------------''
   
    Do
   
    CursPos=IIF(CursPos<   1,   1, CursPos)
    CursPos=IIF(CursPos> 449, 449, CursPos)
   
    VS=CursPos-(Interface_width-1)
    VS=IIF(VS<   1,   1, VS)
    VE=VS+Interface_width
    VE=IIF(VE> 449, 449, VE)
   
    VCursPos=CursPos-(VS-1)
    VCursPos=IIF(VCursPos<1,1,VCursPos)
    ViewString=mid(EditString,VS,VE)
   
    StrLenBuffer=EditString
       
    Line ViewBuffer,(0,0)-(Interface_width*8,15),&hFFFF00,BF
    Draw String ViewBuffer,(0,0),ViewString,0
   
    If CursMode=CursOn Then CursS="_" Else CursS=""
    Draw String ViewBuffer,((VCursPos-1)*8,0),CursS,0
   
    Put (0,(Interface_height-1)*8),ViewBuffer,PSet
   
       
        EKey=Inkey
   
        '''******************************
        ''-----
        'Enter
        If Multikey (&h1C) Then
            for l as integer=0 to 450
                EditString[l]=0
                CursPos=1
            next l
        End If
        'Normale Eingabe
        If asc(EKey)>31 and asc(EKey)<125 and Len(StrLenBuffer)<449 Then
            'CursPos=IIF(CursPos<2,2,CursPos)
            for l as integer=450 to CursPos step-1
                EditString[l]=EditString[l-1]
            next l
            EditString[450]=0
           
            EditString[CursPos-1]=asc(EKey)
            CursPos+=1
        End If
        'Home
        If Multikey(&h47) Then CursPos=1
        'End
        If MultiKey(&h4F) Then CursPos=Len(StrLenBuffer)+1
        'Del
        If MultiKey(&h53) Then
            for l as integer=CursPos to 449
                EditString[l-1]=EditString[l]
            next l
            EditString[450]=0
            sleep(5)
        End If
        'BackSpace
        If MultiKey(&h0E) and CursPos>1 Then
            for l as integer=CursPos-1 to 449
                EditString[l-1]=EditString[l]
            next l
            EditString[450]=0
            CursPos-=1
            sleep(5)
        End If
        'Left
        If MultiKey(&h4B) Then CursPos-=1:sleep(5)
        'Right
        If MultiKey(&h4D) Then CursPos+=1:sleep(5)
        'ESC (Clear)
        If Multikey(&h01) Then
            for l as integer=0 to 450
                EditString[l]=0
                CursPos=1
            next l
        End If
        ''-----
        '''******************************
   
        sleep (111),1
       
        CursMode=IIF(CursMode=CursOn,CursOff,CursOn)
       
    Loop Until Multikey(&h01)   

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz