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:

Flimmern

 
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
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 18.02.2013, 00:20    Titel: Flimmern Antworten mit Zitat

Hi Leute ich hoffe ihr könnt mir mal wieder helfen. Ich hab mir eine .bi angelegt die verschiedene Objekte verwalten soll um es mir so zu vereinfachen ob und auf welches Objekt mit der Maus geklickt wurde. Ich hatte schon ein ähnliches Problem das ich hier gepostet hatte und das ist gelöst.

Hab nun ein vorheriges Projekt mit diesem verbunden und es funzt auch ganz gut doch leider flimmert es zu stark und das sehr unregelmäßig ich hab keine Ahnung wie ich das beheben kann. Ich hoffe es ist nicht zuuu unübersichlich.

Hier als erstes die .bi und danach das Program
Code:
' Funktion zur Objektverwaltung
' (anzeigen und zb Mausverhalten auf diese)
'
' BMPs - Buttons - Textfelder
' CreOb (,,,,,,,,,,)
' CreOb (ObjName(0/1/>999), pos_W, pos_H, groesse_W, groesse_H, BG_farbe,
'        BG_Grafik_bmp(mussgleiche groesse wie Txtfeld), Text, Textfarbe,
'        Textart(0/1), Serie(1-10), Move(0/1))
'
' ObjName ist ehr eine Nummer
' ObjName = 0 - Nummer wird beibehalten und mit selben verknuepft wobei SERIE
'     die Reihenfolge festlegt
' ObjName = 1 - Nummer wird neu erstellt - MUSS gewaehlt werden werden das erste mal
'                                          ein Objekt angelegt wird (mit automatischer
'                                          Nummerrierung)
' ObjName > 999 selbstfesgelegter Name
'
' Serie 1-10 ist nur bei selbst festgelegtem ObjNamen anzugeben, sonst 0 angeben
'
' Pos.. = 0 so wird diese per RANDOMIZE TIMER festgelegt
'
' BG_farbe > 0 dann wird Grafik ignoriert
'
' wird ein BG oder eine Graphik angegeben UND auch TEXT so wird dieser mittig
'     des BGs angezeigt
'
' Textart = 0 - normaler FB String
' Textart = 1 - kleiner String per autowrite
'
' Move = 1 - Objekt ist mit Maus verschiebbar
'
' weitere Idee:
'
' Aufruf zum loeschen des Objektes
' Rückgabefunktionen zB der Pos zum neu setzen der Pos durch verschieben mit
' der Maus
' ##############################################################################
#Include Once "autowrite.bi"
#Include Once "openBildPSET.bi"

TYPE Objektblock
  Nummer  AS Integer
  pwide   AS INTEGER
  phigh   AS INTEGER
  owide   AS INTEGER
  ohigh   AS INTEGER
  farbe   AS Double
  Grafik  AS String
  Text    AS String
  TextF   AS Double
  Textart AS Integer
  Serie   AS Integer
  Move    AS Integer
  visibility AS String
END TYPE
DIM SHARED Objekt() AS Objektblock
TYPE Objektblock2
  Nummer  AS Integer
  pwide   AS INTEGER
  phigh   AS INTEGER
  owide   AS INTEGER
  ohigh   AS INTEGER
  farbe   AS Double
  Grafik  AS String
  Text    AS String
  TextF   AS Double
  Textart AS Integer
  Serie   AS Integer
  Move    AS Integer
  visibility AS String
END TYPE
DIM SHARED Ob_tmp(10) AS Objektblock2
TYPE Objektblock3
  pw_a   AS INTEGER
  ph_a   AS INTEGER
END TYPE
DIM SHARED Ob_koor(2 TO 10) AS Objektblock3

DIM SHARED AS Integer TALAS1 ' (This Arraynumber is the Last Arraynumber with Seriesnumber 1)
DIM SHARED AS Integer i_array, i_counter, i_objekt, info_W, info_H, text_spalte, text_zeile, _
                      Obj_maus_W, Obj_maus_H, Obj_maus_B, Obj_in_Move, Obj_TO_Move, markiert, _
                      Obj_maus_Wa, Obj_maus_Ha, Obj_wide_a, Obj_high_a, New_Dim, Kill_num, _
                      focus_number, Obj_maus_Wext, Obj_maus_Hext
DIM SHARED AS Integer i_serie = 1
DIM Shared AS Integer ObjektName = 0

Randomize Timer

DIM SHARED AS Integer i_test ' fuer testzwecke

' ################################## DECLAREs ##################################
Declare SUB CreOb(Obj_Name AS Integer, Obj_pos_W AS Integer, Obj_pos_H AS Integer, _
  Obj_gr_W AS Integer, Obj_gr_H AS Integer, Obj_BG_farbe AS Double, Obj_Grafik AS String, _
  Obj_Text AS String, Obj_Textfarbe AS Double, Obj_Textart AS Integer, Obj_Serie AS Integer, Obj_Move AS Integer)

Declare SUB ShowOb(von_num AS Integer, bis_num AS Integer)

Declare SUB ObjMove

Declare SUB Kill_Obj(Obj_num AS Integer)

Declare SUB SetPos(Obj_num AS Integer, new_W AS Integer, new_H AS Integer)

Declare SUB SetText(Obj_num AS Integer, Obj_Serie AS Integer, new_T AS String)

Declare SUB SetMouseFrame(Obj_S AS Integer, framecolor AS Double)

Declare SUB Hide_Obj(Obj_num AS Integer)

Declare SUB Unhide_Obj(Obj_num AS Integer)

Declare SUB testi

Declare Function in_Focus AS Integer

Declare Function click_on_series(obj_num AS Integer, Obj_S AS Integer) AS Integer

Declare Function Objekt_APP AS Integer

Declare Function GetText(obj_num AS Integer, obj_Serie AS Integer) AS String
' Declare Function click_on(Obj_number AS Integer) AS Integer


' ##################################### SUBs ###################################

SUB CreOb(Obj_Name AS Integer, Obj_pos_W AS Integer, Obj_pos_H AS Integer, _
  Obj_gr_W AS Integer, Obj_gr_H AS Integer, Obj_BG_farbe AS Double, Obj_Grafik AS String, _
  Obj_Text AS String, Obj_Textfarbe AS Double, Obj_Textart AS Integer, Obj_Serie AS Integer, Obj_Move AS Integer)
 
  REDIM PRESERVE Objekt(UBound(Objekt) + 1)
  ScreenInfo info_W, info_H
 
  IF Obj_Name = 0 THEN      ' Erkennungsnummer beibehalten
    Objekt(UBound(objekt)).Nummer = ObjektName
    i_serie += 1              ' -hierbei wird Serie autom. erhoeht
    Objekt(UBound(objekt)).Serie = i_serie
  ELSEIF Obj_Name = 1 THEN      ' NEUE Erkennungsnumer
    FOR i_objekt = 1 TO 99
      ObjektName = i_objekt
      FOR i_array = 1 TO UBound(objekt)
        IF objekt(i_array).Nummer = i_objekt THEN ObjektName = 0
      NEXT i_array
      IF ObjektName > 0 THEN EXIT FOR
    NEXT i_objekt
                       
    Objekt(UBound(objekt)).Nummer = ObjektName
    i_serie = 1                 ' -Serie ist hierbei 1
    Objekt(UBound(objekt)).Serie = i_serie
    TALAS1 = UBound(objekt)
  ELSEIF Obj_Name > 99 THEN      ' Erkennungsnummer wurde selbst definiert
    Objekt(UBound(objekt)).Nummer = Obj_Name
    Objekt(UBound(objekt)).Serie = Obj_Serie      ' -hier wird selbstdefinierte Seriennummer gebraucht
    IF Obj_Serie = 1 THEN TALAS1 = UBound(objekt)
  ELSE
    EXIT SUB
  END IF
 
  IF objekt(UBound(objekt)).Serie > 1 THEN
    FOR i_array = 1 TO UBound(objekt)
      IF objekt(i_array).Nummer = Objekt(UBound(objekt)).Nummer AND objekt(i_array).Serie = 1 THEN
        objekt(UBound(objekt)).pwide = objekt(i_array).pwide + Obj_pos_W
        objekt(UBound(objekt)).phigh = objekt(i_array).phigh + Obj_pos_H
        EXIT FOR
      END IF
    NEXT i_array
  ELSE
    IF Obj_pos_W = 0 THEN
      objekt(UBound(objekt)).pwide = int(rnd * (info_W - Obj_gr_W)) + 1
    ELSE
      objekt(UBound(objekt)).pwide = Obj_pos_W
    END IF
    IF Obj_pos_H = 0 THEN
      objekt(UBound(objekt)).phigh = int(rnd * (info_H - Obj_gr_H)) + 1
    ELSE
      objekt(UBound(objekt)).phigh = Obj_pos_H
    END IF
  END IF
 
  Objekt(UBound(objekt)).owide = Obj_gr_W
  Objekt(UBound(objekt)).ohigh = Obj_gr_H
  Objekt(UBound(objekt)).farbe = Obj_BG_farbe
  Objekt(UBound(objekt)).Grafik = Obj_Grafik
  Objekt(UBound(objekt)).Text = Obj_Text
  Objekt(UBound(objekt)).TextF = Obj_Textfarbe
  Objekt(UBound(objekt)).Textart = Obj_Textart
  Objekt(UBound(objekt)).Move = Obj_Move
  Objekt(UBound(objekt)).visibility = "unhide"

End Sub

SUB ShowOb(von_num AS Integer, bis_num AS Integer)
  IF von_num < 1 THEN EXIT SUB
  IF bis_num < 1 THEN bis_num = von_num
 
  FOR i_array = 1 TO UBound(objekt)
 FOR i_objekt = von_num TO bis_num
   IF i_objekt = objekt(i_array).Nummer AND Objekt(i_array).visibility = "unhide" THEN
     ScreenLock
    IF objekt(i_array).farbe <> 0 THEN
      Line(objekt(i_array).pwide, objekt(i_array).phigh) - _
      STEP(objekt(i_array).owide, objekt(i_array).ohigh), objekt(i_array).farbe, BF
    ELSEIF objekt(i_array).farbe = 0 AND objekt(i_array).Grafik <> "" THEN
      openbildPSET(objekt(i_array).Grafik, objekt(i_array).owide, objekt(i_array).ohigh, objekt(i_array).pwide, objekt(i_array).phigh)
    END IF
   
    IF (objekt(i_array).farbe <> 0 OR objekt(i_array).Grafik <> "") AND _
      objekt(i_array).Text <> "" AND objekt(i_array).Textart = 0 THEN
      Color objekt(i_array).TextF
      Draw String ((objekt(i_array).pwide + (objekt(i_array).owide / 2)) - (LEN(objekt(i_array).Text) * 4), _
      (objekt(i_array).phigh + (objekt(i_array).ohigh / 2)) - 4), objekt(i_array).Text
   
    ELSEIF (objekt(i_array).farbe <> 0 OR objekt(i_array).Grafik <> "") AND _
      objekt(i_array).Text <> "" AND objekt(i_array).Textart = 1 THEN
      autowrite(objekt(i_array).TextF, (objekt(i_array).pwide + (objekt(i_array).owide / 2)) - (LEN(objekt(i_array).Text) * 3) + 1, _
      (objekt(i_array).phigh + (objekt(i_array).ohigh / 2)) - 3, objekt(i_array).Text, 0)
   
    ELSEIF objekt(i_array).farbe = 0 AND objekt(i_array).Grafik = "" AND _
      objekt(i_array).Text <> "" AND objekt(i_array).Textart = 0 THEN
      text_spalte = 0: text_zeile = 0: Color objekt(i_array).TextF
      FOR i_counter = 1 TO LEN(objekt(i_array).Text)
        Draw String (objekt(i_array).pwide + text_spalte, objekt(i_array).phigh + text_zeile), _
        MID(objekt(i_array).Text, i_counter, 1)
        text_spalte += 8
        IF text_spalte + 8 > objekt(i_array).owide THEN text_spalte = 0: text_zeile += 11
        IF text_zeile + 11 > objekt(i_array).ohigh THEN EXIT FOR
      NEXT i_counter
   
    ELSEIF objekt(i_array).farbe = 0 AND objekt(i_array).Grafik = "" AND _
      objekt(i_array).Text <> "" AND objekt(i_array).Textart = 1 THEN
      text_spalte = 0: text_zeile = 0
      FOR i_counter = 1 TO LEN(objekt(i_array).Text)
        autowrite(objekt(i_array).TextF, objekt(i_array).pwide + text_spalte, objekt(i_array).phigh + text_zeile, _
        MID(objekt(i_array).Text, i_counter, 1), 0)
        text_spalte += 6
        IF text_spalte + 6 > objekt(i_array).owide THEN text_spalte = 0: text_zeile += 9
        IF text_zeile + 9 > objekt(i_array).ohigh THEN EXIT FOR
      NEXT i_counter
    END IF
    ScreenUnLock
   END IF
 NEXT i_objekt
  NEXT i_array
END SUB

SUB ObjMove
  DIM AS Integer dif_W, dif_H
 
  GetMouse (Obj_maus_W, Obj_maus_H, , Obj_maus_B)
 
  IF Obj_maus_B = 0 THEN
    Obj_in_Move = 0: EXIT SUB
  ELSEIF (Obj_maus_B = 1) AND (objekt(TALAS1).Move) AND (Objekt(TALAS1).visibility = "unhide") THEN
   
    IF Obj_in_Move = 0 THEN
      IF in_Focus = 0 THEN EXIT SUB
      Obj_maus_Wa = Obj_maus_Wext
      Obj_maus_Ha = Obj_maus_Hext
      Obj_wide_a = objekt(TALAS1).pwide
      Obj_high_a = objekt(TALAS1).phigh
      IF TALAS1 < UBound(objekt) THEN
        FOR i_objekt = (TALAS1 + 1) TO UBound(objekt)
          ob_koor(objekt(i_objekt).Serie).pw_a = objekt(i_objekt).pwide - objekt(TALAS1).pwide
          ob_koor(objekt(i_objekt).Serie).ph_a = objekt(i_objekt).phigh - objekt(TALAS1).phigh
        NEXT i_objekt
      END IF
      Obj_in_Move = 1
    END IF
   
    dif_W = Obj_maus_W - Obj_maus_Wa
    dif_H = Obj_maus_H - Obj_maus_Ha

    IF Obj_wide_a + dif_W < 1 THEN
      objekt(TALAS1).pwide = 1
    ELSEIF (Obj_wide_a + dif_W) + objekt(TALAS1).owide > info_W THEN
      objekt(TALAS1).pwide = info_W - objekt(TALAS1).owide
    ELSE
      objekt(TALAS1).pwide = Obj_wide_a + dif_W
    END IF
    IF Obj_high_a + dif_H < 1 THEN
      objekt(TALAS1).phigh = 1
    ELSEIF (Obj_high_a + dif_H) + objekt(TALAS1).ohigh > info_H THEN
      objekt(TALAS1).phigh = info_H - objekt(TALAS1).ohigh
    ELSE
      objekt(TALAS1).phigh = Obj_high_a + dif_H
    END IF
   
    IF TALAS1 < UBound(objekt) THEN
      FOR i_objekt = (TALAS1 + 1) TO UBound(objekt)
        objekt(i_objekt).pwide = objekt(TALAS1).pwide + ob_koor(objekt(i_objekt).Serie).pw_a
        objekt(i_objekt).phigh = objekt(TALAS1).phigh + ob_koor(objekt(i_objekt).Serie).ph_a
      NEXT i_objekt
    END IF
  END IF
END SUB

SUB Kill_Obj(obj_num AS Integer)
 
  IF Obj_num < 1 THEN EXIT SUB


  Obj_TO_Move = 0
  FOR i_array = 1 TO UBound(objekt)
    IF objekt(i_array).Nummer = Obj_num THEN
      Obj_TO_Move += 1
      objekt(i_array).Nummer = 0
    END IF
  NEXT i_array

  ' Lueckenaufschluss
  FOR i_objekt = 1 TO Obj_TO_Move
    FOR i_counter = 1 TO (UBound(objekt) - 1)
      IF objekt(i_counter).Nummer = 0 THEN
        objekt(i_counter).Nummer = objekt(i_counter + 1).Nummer
        objekt(i_counter + 1).Nummer = 0
        objekt(i_counter).pwide = objekt(i_counter + 1).pwide
        objekt(i_counter).phigh = objekt(i_counter + 1).phigh
        objekt(i_counter).owide = objekt(i_counter + 1).owide
        objekt(i_counter).ohigh = objekt(i_counter + 1).ohigh
        objekt(i_counter).farbe = objekt(i_counter + 1).farbe
        objekt(i_counter).Grafik = objekt(i_counter + 1).Grafik
        objekt(i_counter).Text = objekt(i_counter + 1).Text
        objekt(i_counter).Textf = objekt(i_counter + 1).TextF
        objekt(i_counter).Textart = objekt(i_counter + 1).Textart
        objekt(i_counter).Serie = objekt(i_counter + 1).Serie
        objekt(i_counter).Move = objekt(i_counter + 1).Move
        Objekt(i_counter).visibility = Objekt(i_counter + 1).visibility
      END IF
    NEXT i_counter
  NEXT i_objekt
 
  New_Dim = UBound(objekt) - Obj_TO_Move
  Redim Preserve objekt(New_Dim)
 
  i_array = UBound(objekt)
  DO
    SLEEP 1
    IF objekt(i_array).Serie = 1 THEN TALAS1 = i_array: EXIT DO
    i_array -= 1
  LOOP Until i_array < 1
END SUB


SUB SetPos(Obj_num AS Integer, new_W AS Integer, new_H AS Integer)
  DIM AS Integer dif_W, dif_H
  ScreenInfo info_W, info_H

  FOR i_array = 1 TO UBound(objekt)
    IF objekt(i_array).Nummer = obj_num THEN
      IF objekt(i_array).Serie = 1 THEN
        IF new_W < 1 THEN
          dif_W = objekt(i_array).pwide - 1
          objekt(i_array).pwide = 1
        ELSEIF new_W + objekt(i_array).owide > info_W THEN
          dif_W = objekt(i_array).pwide - (info_W - objekt(i_array).owide)
          objekt(i_array).pwide = info_W - objekt(i_array).owide
        ELSE
          dif_W = objekt(i_array).pwide - new_W
          objekt(i_array).pwide = new_W
        END IF
        IF new_H < 1 THEN
          dif_H = objekt(i_array).phigh - 1
          objekt(i_array).phigh = 1
        ELSEIF new_H + objekt(i_array).ohigh > info_H THEN
          dif_H = objekt(i_array).phigh - (info_H - objekt(i_array).ohigh)
          objekt(i_array).phigh = info_H - objekt(i_array).ohigh
        ELSE
          dif_H = objekt(i_array).phigh - new_H
          objekt(i_array).phigh = new_H
        END IF
      ELSE
        objekt(i_array).pwide -= dif_W
        objekt(i_array).phigh -= dif_H
      END IF
    END IF
  NEXT i_array
END SUB

 
SUB SetText(Obj_num AS Integer, Obj_Serie AS Integer, new_T AS String)
  FOR i_array = 1 TO UBound(objekt)
    IF objekt(i_array).Nummer = Obj_num AND objekt(i_array).Serie = Obj_Serie THEN
      objekt(i_array).Text = new_T
      EXIT FOR
    END IF
  NEXT i_array
END SUB


SUB SetMouseFrame(Obj_S AS Integer, framecolor AS Double)
  FOR i_array = 1 TO UBound(objekt)
    IF (objekt(i_array).Serie = Obj_S) AND (Objekt(i_array).visibility = "unhide") AND _
      (Obj_maus_W >=  objekt(i_array).pwide) AND _
      (Obj_maus_W <= (Objekt(i_array).pwide + objekt(i_array).owide)) AND _
      (Obj_maus_H >=  objekt(i_array).phigh) AND _
      (Obj_maus_H <= (objekt(i_array).phigh + objekt(i_array).ohigh)) THEN
      Line (Objekt(i_array).pwide, objekt(i_array).phigh) - STEP(objekt(i_array).owide, objekt(i_array).ohigh), framecolor, B
      EXIT FOR
    END IF
  NEXT i_array
END SUB


SUB Hide_Obj(Obj_num AS Integer)
  FOR i_array = 1 TO UBound(objekt)
    IF Objekt(i_array).Nummer = Obj_Num THEN
      Objekt(i_array).visibility = "hide"
    END IF
  NEXT i_array
END SUB


SUB Unhide_Obj(Obj_num AS Integer)
  FOR i_array = 1 TO UBound(objekt)
    IF Objekt(i_array).Nummer = Obj_Num THEN
      Objekt(i_array).visibility = "unhide"
    END IF
  NEXT i_array
END SUB


SUB testi
  Color &h00aa00
  locate 1
  FOR i_test = 1 TO UBound(objekt)
    ScreenLock
    ? "N " & objekt(i_test).Nummer & "  S " & objekt(i_test).Serie
    ScreenUnLock
  NEXT i_test
  Locate 1
  FOR i_test = 1 TO 10
    ScreenLock
    Locate , 15: ? "N " & ob_tmp(i_test).Nummer & "  S " & ob_tmp(i_test).Serie
    ScreenUnLock
  NEXT i_test
  ? "TALAS1 " & TALAS1
END SUB


' ################################## FUNCTIONs #################################

Function in_Focus AS Integer
  GetMouse (Obj_maus_W, Obj_maus_H, , Obj_maus_B)
  IF (Objekt(TALAS1).visibility = "unhide") AND (Obj_maus_W >=  objekt(TALAS1).pwide) AND _
     (Obj_maus_W <= (Objekt(TALAS1).pwide + objekt(TALAS1).owide)) AND _
     (Obj_maus_H >=  objekt(TALAS1).phigh) AND _
     (Obj_maus_H <= (objekt(TALAS1).phigh + objekt(TALAS1).ohigh)) THEN
    focus_number = objekt(TALAS1).Nummer
    in_Focus = 1
  ELSE
    in_Focus = 0
  END IF
END Function

Function click_on_series(obj_num AS Integer, Obj_S AS Integer) AS Integer
  FOR i_array = 1 TO UBound(objekt)
    IF objekt(i_array).Nummer = obj_num AND objekt(i_array).Serie = obj_S THEN
      IF (Obj_maus_W >=  objekt(i_array).pwide) AND _
         (Obj_maus_W <= (Objekt(i_array).pwide + objekt(i_array).owide)) AND _
         (Obj_maus_H >=  objekt(i_array).phigh) AND _
         (Obj_maus_H <= (objekt(i_array).phigh + objekt(i_array).ohigh)) THEN
         
         click_on_series = 1: EXIT Function
         
      ELSE
        click_on_series = 0: EXIT Function
      END IF
    END IF
  NEXT i_array
END Function

Function Objekt_APP AS Integer
  ' Maus bewegt ein Objekt dann kein Klick
  IF Obj_in_Move THEN ObjMove: EXIT Function

  GetMouse (Obj_maus_W, Obj_maus_H, , Obj_maus_B)
  ' uebernehme mauskoor. fuer bewegung
  Obj_maus_Wext = Obj_maus_W: Obj_maus_Hext = Obj_maus_H
  ' Pruefe ob Obj. unter Mausz. das oberste Obj.
  ' und ob die LINKE Maustaste gedrückt wurde
  IF (in_Focus) AND (Obj_maus_B = 1) THEN
    SLeep 150
    GetMouse (Obj_maus_W, Obj_maus_H, , Obj_maus_B)
   
    IF Obj_maus_B = 0 THEN
      Objekt_APP = objekt(TALAS1).Nummer: EXIT Function
    ELSE
      ObjMove: EXIT Function
    END IF
 
  ELSEIF (Obj_maus_B = 1) AND (in_Focus = 0) THEN
    i_array = (TALAS1 - 1)
    DO
      Sleep 1
      ' geklicktes Objekt in tmp-array verschieben
      IF (Obj_maus_W >=  objekt(i_array).pwide) AND _
         (Obj_maus_W <= (Objekt(i_array).pwide + objekt(i_array).owide)) AND _
         (Obj_maus_H >=  objekt(i_array).phigh) AND _
         (Obj_maus_H <= (objekt(i_array).phigh + objekt(i_array).ohigh)) AND _
         objekt(i_array).Serie = 1 THEN
         markiert = objekt(i_array).Nummer
         Obj_TO_Move = 0
         FOR i_counter = 1 TO UBound(objekt)
           IF objekt(i_counter).Nummer = markiert THEN
             Obj_TO_Move += 1
             Ob_tmp(objekt(i_counter).Serie).Nummer = objekt(i_counter).Nummer
             objekt(i_counter).Nummer = 0
             Ob_tmp(objekt(i_counter).Serie).pwide = objekt(i_counter).pwide
             Ob_tmp(objekt(i_counter).Serie).phigh = objekt(i_counter).phigh
             Ob_tmp(objekt(i_counter).Serie).owide = objekt(i_counter).owide
             Ob_tmp(objekt(i_counter).Serie).ohigh = objekt(i_counter).ohigh
             Ob_tmp(objekt(i_counter).Serie).farbe = objekt(i_counter).farbe
             Ob_tmp(objekt(i_counter).Serie).Grafik = objekt(i_counter).Grafik
             Ob_tmp(objekt(i_counter).Serie).Text = objekt(i_counter).Text
             Ob_tmp(objekt(i_counter).Serie).Textf = objekt(i_counter).TextF
             Ob_tmp(objekt(i_counter).Serie).Textart = objekt(i_counter).Textart
             Ob_tmp(objekt(i_counter).Serie).Serie = objekt(i_counter).Serie
             Ob_tmp(objekt(i_counter).Serie).Move = objekt(i_counter).Move
             Ob_tmp(objekt(i_counter).Serie).visibility = Objekt(i_counter).visibility
           END IF
         NEXT i_counter
 
         ' Lueckenaufschluss
         FOR i_objekt = 1 TO Obj_TO_Move
           FOR i_counter = 1 TO (UBound(objekt) - 1)
             IF objekt(i_counter).Nummer = 0 THEN
               objekt(i_counter).Nummer = objekt(i_counter + 1).Nummer
               objekt(i_counter + 1).Nummer = 0
               objekt(i_counter).pwide = objekt(i_counter + 1).pwide
               objekt(i_counter).phigh = objekt(i_counter + 1).phigh
               objekt(i_counter).owide = objekt(i_counter + 1).owide
               objekt(i_counter).ohigh = objekt(i_counter + 1).ohigh
               objekt(i_counter).farbe = objekt(i_counter + 1).farbe
               objekt(i_counter).Grafik = objekt(i_counter + 1).Grafik
               objekt(i_counter).Text = objekt(i_counter + 1).Text
               objekt(i_counter).Textf = objekt(i_counter + 1).TextF
               objekt(i_counter).Textart = objekt(i_counter + 1).Textart
               objekt(i_counter).Serie = objekt(i_counter + 1).Serie
               objekt(i_counter).Move = objekt(i_counter + 1).Move
               Objekt(i_counter).visibility = Objekt(i_counter + 1).visibility
             END IF
           NEXT i_counter
         NEXT i_objekt
 
         ' tmp wieder zurueck (ans Ende)      8 + 3 = 11 - 10 = 1
         FOR i_objekt = (UBound(objekt) - Obj_TO_Move) + 1 TO UBound(objekt)
           objekt(i_objekt).Nummer = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).Nummer
           objekt(i_objekt).pwide = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).pwide
           objekt(i_objekt).phigh = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).phigh
           objekt(i_objekt).owide = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).owide
           objekt(i_objekt).ohigh = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).ohigh
           objekt(i_objekt).farbe = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).farbe
           objekt(i_objekt).Grafik = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).Grafik
           objekt(i_objekt).Text = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).Text
           objekt(i_objekt).Textf = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).TextF
           objekt(i_objekt).Textart = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).Textart
           objekt(i_objekt).Serie = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).Serie
           objekt(i_objekt).Move = ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).Move
           Objekt(i_objekt).visibility = Ob_tmp((i_objekt + Obj_TO_Move) - UBound(objekt)).visibility
           IF (i_objekt + Obj_TO_Move) - UBound(objekt) = 1 THEN TALAS1 = i_objekt
         NEXT i_objekt
         IF objekt(UBound(objekt)).Nummer < 100 THEN
           Objekt_APP = 0: EXIT Function
         ELSE
           Objekt_APP = objekt(TALAS1).Nummer: EXIT Function
         END IF
      END IF
      i_array -= 1
    LOOP Until i_array < 1
  END IF
END Function

Function GetText(obj_num AS Integer, obj_Serie AS Integer) AS String
  FOR i_array = 1 TO UBound(objekt)
    IF objekt(i_array).Serie = obj_serie AND objekt(i_array).Nummer = obj_num THEN
      GetText = objekt(i_array).Text
      EXIT Function
    END IF
  NEXT i_array
  GetText = ""
END Function


Code:
'DIMs für TSNE
DIM SHARED AS STRING ServerAdresse
DIM SHARED AS INTEGER iVerbindung
'Function
DIM SHARED AS STRING TxtArray (11)
DIM SHARED AS INTEGER MaxTxtLen
'Optionen
DIM SHARED AS STRING FarbRam
TYPE Farbenblock
     BG1 AS DOUBLE
     BG2 AS DOUBLE
     G1  AS DOUBLE
     G2  AS DOUBLE
END TYPE
DIM SHARED Farben AS Farbenblock

'Programm
DIM SHARED MX_incomming AS ANY Ptr
DIM SHARED MX_ID AS ANY Ptr
DIM SHARED MX_LostID AS ANY Ptr
DIM SHARED AS INTEGER i, ze, Auswahl, HauptMenu, hoechsteID, newID, newmailVon
DIM SHARED AS INTEGER i2, i3, ueberschneidung, wideEnd, highEnd, LostID
DIM SHARED AS STRING Eingabe, Txt, Txt2, newmail, openpmmwindow
DIM SHARED AS STRING *15 PMPartner
newmail = "": Txt = ""

TYPE Partner
      Titel AS STRING * 15
         ID AS integer
     Status AS integer
END TYPE
DIM SHARED PcOnline() AS Partner

TYPE newmailblock
     Leecher AS STRING * 15
     Datum   AS STRING * 10
     Zeit    AS STRING * 5
     Mail    AS STRING * 192
END TYPE
DIM SHARED PMM AS newmailblock

TYPE newmailin
     Seeder  AS STRING * 15
     Datum   AS STRING * 10
     Zeit    AS STRING * 5
     Mail    AS STRING * 192
     IST     AS STRING * 1
END TYPE
DIM SHARED PMMin AS newmailin

TYPE newmailoeffnen
     Seeder  AS STRING * 15
     Datum   AS STRING * 10
     Zeit    AS STRING * 5
     Mail    AS STRING * 192
     IST     AS STRING * 1
     wide    AS INTEGER
     high    AS INTEGER
END TYPE
DIM SHARED PMMshow(10) AS newmailoeffnen

'Desktop/Bildschirm
DIM SHARED AS INTEGER w, h, depth, wh, Oapp, PMMzaehler

'Maus
DIM SHARED AS INTEGER wmaus,hmaus,mrad,mbuttons,mclib,mrad2,mradoffset

DECLARE SUB NewmailSub
DECLARE SUB PcListeSub
DECLARE SUB clearscr()
DECLARE SUB ENDE
DECLARE FUNCTION TxtF (Txt AS STRING, MaxTxtLen as Integer, Txt2 AS STRING) AS STRING
                      '[Txt = Rückgabe][MaxTxtLen = Länge der Eingabe][Txt2 = Text an den angeschlossen wird]
 
#include ONCE "vbcompat.bi"
#include ONCE "autowrite.bi"
#INCLUDE ONCE "fbgfx.bi"
#Include Once "windows.bi"
#include once "objekte.bi"
#INCLUDE ONCE "openbildPSET.bi"
#include once "tsneplay_v3.bi"

ScreenControl FB.GET_DESKTOP_SIZE, w, h 'Desktopauflösung auslesen

SCREENRES w -1 , h - 1, 32,, FB.GFX_SHAPED_WINDOW or FB.GFX_ALWAYS_ON_TOP
Color ,&hFF00FF: CLS

Dim As HWND hWnd
ScreenControl FB.GET_WINDOW_HANDLE, Cast(Integer, hWnd)
ShowWindow(hWnd, SW_HIDE)
SetWindowLong (hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_TOOLWINDOW)
ShowWindow(hWnd, SW_SHOW)

RANDOMIZE TIMER

'###################### anlegen einer PC Liste #################################
Close
IF NOT FileExists ("PcListe.dat") THEN
  PcListeSub
END IF 'NOT FileExists ("PcListe.dat")



'######################### Optionen u. Verbindungen laden ######################

OPEN EXEPATH + "\PcListe.dat" FOR RANDOM AS #1 LEN=LEN(PMPartner)
For i = 1 TO 10
  GET #1, i, PMPartner
  TxtArray(i) = PMPartner
Next i
CLOSE
  TxtArray(0) = "an alle"

IF FileExists("Option.Txt") AND FileExists("FarbSet.Dat") THEN
  OPEN EXEPATH + "\Option.Txt" FOR Input AS #1
  LINE INPUT #1, FarbRam
  CLOSE
  OPEN EXEPATH + "\FarbSet.dat" FOR RANDOM AS #1 LEN=LEN(Farben)
  GET #1, VAL(FarbRam), Farben
  CLOSE
ELSE
  Farben.BG1 = &h00beff
  Farben.BG2 = &hffff55
  Farben.G1 = &hffffff
  Farben.G2 = &hff7d00
END IF



MX_incomming = MutexCreate()
MX_ID = MutexCreate()
MX_LostID = MutexCreate()

' ***** Netzwerkverbindung *****
CLS
dim shared RV as TSNEPlay_GURUCode

sub TSNEPlay_ConnectionState(byval von as uinteger, byval state as TSNEPlay_State_Enum)
  ' Rückmeldung für einen Spieler über seinen Status
end sub

sub TSNEPlay_Player_Connected(byval id as uinteger, IPA as string, nick as string)
  ' Spieler wurde verbunden
  'print nick & id & " hat die Verbindung hergestellt"
  MutexLock(MX_ID)
  newID = id
  MutexUnLock(MX_ID)

end sub

sub TSNEPlay_Player_Disconnected(byval id as uinteger)
  ' Spieler wurde getrennt
  'print id & " hat die Verbindung abgebrochen"
  MutexLock(MX_LostID)
  LostID = id
  MutexUnLock(MX_LostID)

end sub

sub TSNEPlay_Message(byval von as uinteger, byval zu as uinteger, byval nachricht as string, _
                     byval typ as TSNEPlay_MessageType_Enum)
  'Ein Spieler hat uns / allen eine Nachricht geschickt
  MutexLock(MX_incomming)
  newmail = nachricht
  newmailVon = von
  MutexUnLock(MX_incomming)
end sub

sub TSNEPlay_Move(byval von as uinteger, byval zu as uinteger, byval typ as double, _
                  byval x as double, byval y as double, byval r as uinteger)
  ' Spielzug
end sub

sub TSNEPlay_Data(von as uinteger, zu as uinteger, daten as string)
 ' Meldung vom Programmierer
end sub

' Aufbau der Verbindung

Dim TConnected as Integer = 0
'verbindung herstellen
FOR iVerbindung = 1 TO 10
  IF LEN(TxtArray(iVerbindung)) > 0 THEN
    ServerAdresse = TxtArray(iVerbindung)
    ? "Verbinde mit " & ServerAdresse
    RV = TSNEPlay_ConnectToServer(ServerAdresse, 1234, "Client", "geheimesPasswort", _
      @TSNEPlay_ConnectionState, @TSNEPlay_Player_Connected, @TSNEPlay_Player_Disconnected, _
      @TSNEPlay_Message, @TSNEPlay_Move, @TSNEPlay_Data)       ' Port ist UShort
    If RV = TSNEPlay_NoError Then
      Dim XTot as Double = Timer() + 6
      Do Until InKey() = Chr(27)
        Locate 1, 40: ? "Bereit in " & XTot - TIMER()
        Select Case TSNEPlay_Connection_GetState()
          Case TSNEPlay_State_Disconnected: Exit Do
          Case TSNEPlay_State_Ready: TConnected = 1
        End Select
        Sleep 1, 1
        If XTot < Timer() Then Exit Do
      Loop
      If TSNEPlay_Connection_GetState() = TSNEPlay_State_Ready Then TConnected = 1:EXIT FOR
    End If
  END IF 'LEN(TxtArray(iVerbindung) > 0
NEXT iVerbindung 
If TConnected = 0 Then
    Print "Konnte verbindung nicht herstellen! Etabliere Server!"
    RV = TSNEPlay_CreateServer(10, 1234, "Server", "geheimesPasswort", @TSNEPlay_ConnectionState, _
           @TSNEPlay_Player_Connected, @TSNEPlay_Player_Disconnected, @TSNEPlay_Message, @TSNEPlay_Move, _
           @TSNEPlay_Data, 0) ',0 weist der funktion zu, das "nicht hinzufügen eines lokalen clienten" zu ignorieren
    If RV <> TSNEPlay_NoError Then Print "[ERROR] "; TSNEPlay_Desc_GetGuruCode(RV): sleep:End -1
End If

' Daten an den Server schicken
' z.B. TSNEPlay_SendMSG(0, "" & eingabe)

' ############################# Programm Start #################################
cls   
CONST pmbutton = 100, mail = 101, games = 102, pc = 103, config = 104, logout = 105, _
      SendeMail = 106
CreOb(pmbutton, w / 2 - 30, 1, 60, 9, Farben.BG1, "", "postmail", Farben.G2, 1, 1, 0)
CreOb(mail, (w/2)-64+8, (h/2)-16+8, 16, 16, 0, "mail", "", 0, 0, 1, 0)
CreOb(games, (w/2)-64+32, (h/2)-16+8, 16, 16, 0, "games", "", 0, 0, 1, 0)
CreOb(pc, (w/2)-64+56, (h/2)-16+8, 16, 16, 0, "pc", "", 0, 0, 1, 0)
CreOb(config, (w/2)-64+80, (h/2)-16+8, 16, 16, 0, "config", "", 0, 0, 1, 0)
CreOb(logout, (w/2)-64+104, (h/2)-16+8, 16, 16, 0, "logout", "", 0, 0, 1, 0)
Hide_Obj(mail): Hide_Obj(games): Hide_Obj(pc): Hide_Obj(config): Hide_Obj(logout)

CreOb(SendeMail, w/ 2- (164/ 2), h/ 2- (134/ 2), 163, 133, 0, "PM1", "", 0, 0, 1, 0)
CreOb(SendeMail, 10, 3, 150, 9, 0, "", "Zeit + Datum", Farben.G2, 1, 2, 0)
CreOb(SendeMail, 10, 23, 143, 87, 0, "", "", Farben.G2, 1, 3, 0)
CreOb(SendeMail, 10, 113, 48, 9, 0, "", "pmm an ", Farben.G2, 1, 4, 0)
CreOb(SendeMail, 58, 113, 100, 9, 0, "", "Absender", Farben.G2, 1, 5, 0)
Hide_Obj(SendeMail)

DO
  sleep 5
  ClearScr
  ShowOb(1, 99)
  ShowOb(100, 0)
  IF HauptMenu = 1 THEN
    ScreenLock
    Line ((w/2)-64, (h/2)-16) - STEP(128, 32),&hAAAAAA ,BF
    ScreenUnLock
  END IF
 
  ShowOb(101, 106)
  SetMouseFrame(5, &h000000)

  Oapp = Objekt_APP
  Select Case Oapp
  Case 1 TO 99
    ' ********** Nachrichten **********
    IF click_on_series(Oapp, 5) THEN
      SetText(SendeMail, 2, format (now,"hh:mm") & " " & format (now,"dd-mm-yyyy"))
      SetText(SendeMail, 3, "")
      SetText(SendeMail, 5, GetText(Oapp, 5))
      Unhide_Obj(SendeMail)

      newmailSub
      Kill_Obj(Oapp)
    ELSE
      Kill_Obj(Oapp)
      ClearScr
    END IF
   
  Case pmbutton
    ' ********** Hauptbutton **********
    IF openpmmwindow = "" AND HauptMenu = 0 THEN
      HauptMenu = 1
      Unhide_Obj(mail): Unhide_Obj(games): Unhide_Obj(pc):Unhide_Obj(config): Unhide_Obj(logout)

    ELSEIF openpmmwindow = "" AND HauptMenu = 1 THEN
      clearscr
      HauptMenu = 0
      Hide_Obj(mail): Hide_Obj(games): Hide_Obj(pc): Hide_Obj(config): Hide_Obj(logout)

    END IF
   
  Case pc
    ' ********** PC button **********
    Hide_Obj(mail): Hide_Obj(games): Hide_Obj(pc): Hide_Obj(config): Hide_Obj(logout)
    PcListeSub
   
  Case logout
    ' ********** Ende button **********
    ENDE
   
  Case mail
    ' ********** Mail button **********
    Sleep 200
    HauptMenu = 0
    Hide_Obj(mail): Hide_Obj(games): Hide_Obj(pc): Hide_Obj(config): Hide_Obj(logout)
    clearscr
    ScreenLock
    Line ((w/2)-100, (h/2)-125) - STEP(200, 265),Farben.BG1 ,BF
    autowrite (Farben.G2, (w/2)-100+10, (h/2)-125+5, "online liste", 1)
    autowrite (Farben.G2, (w/2)-100+10, (h/2)-125+25, "empfänger wählen", 0)
    ze = (h/2)-125+45
    FOR i = 0 TO 10
      Line ((w/2)-60, ze - 2) - STEP(120, 10),&hFFFFFF ,BF: autowrite (&h000000, (w/2)-60+2, ze, STR(i) & ". " + TxtArray(i), 0)
      ze += 20
    NEXT i
    ScreenUnLock
   
    DO
      SLEEP 1
      GETMOUSE (wmaus,hmaus,mrad,mbuttons,mclib)
      ze = (h/2)-125+45 'erste Position der Textfelder
      FOR i = 0 TO 10
        IF mbuttons = 2 THEN EXIT DO
       
      '+++ klick auf 1 von 10 verbindungen +++
        IF mbuttons = 1 AND wmaus > (w/2)-60 AND wmaus < (w/2)-60+120 AND _
          hmaus > ze - 2 AND hmaus < ze - 2 + 10 AND openpmmwindow = "" THEN
          SetText(SendeMail, 2, format (now,"hh:mm") & " " & format (now,"dd-mm-yyyy"))
          SetText(SendeMail, 5, TxtArray(i))
          Unhide_Obj(SendeMail)
         
          NewmailSub
          EXIT DO
        END IF ''+++ klick auf 1 von 10 verbindungen +++
        ze += 20
      NEXT i
    LOOP Until InKey = CHR(27)
    ClearScr

  End Select

   
' ********** Nachrichten verwalten ********** 

' *** einkommende Namensanfrage (PC Name) ***

  MutexLock(MX_incomming)
 
    IF newmail = "#name" THEN
      TSNEPlay_SendMSG(newmailVon, "##" + ENVIRON("computername"))
      newmail = "": newmailVon = 0
    END IF
 
' *** einkommender Name (PC Name) ***

    IF MID(newmail,1 ,2) = "##" THEN
      PcOnline(newmailVon).Titel = MID(newmail, 3, LEN(newmail) - 2)
      PcOnline(newmailVon).ID = newmailVon
      PcOnline(newmailVon).Status = 1
      newmail = "": newmailVon = 0
    END IF
   
' *** Sonstige Nachrichten ***

    IF newmail <> "" THEN
      FOR i = 1 TO Ubound(PcOnline)
        IF PcOnline(i).ID = newmailVon THEN
          OPEN ExePath & "\Empfang.dat" FOR RANDOM AS #1 LEN=LEN(PMMin)
          FOR i2 = 1 TO 1000
            GET #1, i2, PMMin
            IF NOT PMMin.Ist = "X" THEN
              PMMin.Seeder = PcOnline(i).Titel
              PMMin.Datum = MID(newmail, 1, 10)
              PMMin.Zeit = MID(newmail, 11, 5)
              PMMin.Mail = MID(newmail, 16, LEN(newmail)-15)
              PMMin.IST = "X"
              PUT #1, i2, PMMin
              CLOSE
              newmail = "": newmailVon = 0
              EXIT FOR ' i2 = 1 TO 1000
            END IF 'NOT PMMin.Ist = "X" THEN
          NEXT i2
        END IF 'PcOnline(i).ID = newmailVon THEN
      NEXT i
    END IF 'newmail <> ""
   
   
  MutexUnLock(MX_incomming)
 
 
' ********** Nachrichten anzeigen **********
 
' +++ Nachricht aus Speicher in Anzeige Array +++
  OPEN ExePath & "\Empfang.dat" FOR RANDOM AS #1 LEN=LEN(PMMin)
  FOR i = 1 TO 1000
    GET #1, i, PMMin
    IF PMMin.IST = "X" THEN
      IF PMMzaehler < 10 THEN
        CreOb(1, 0, 0, 163, 133, 0, "PM1", "", 0, 0, 1, 1)
        CreOb(0, 10, 3, 150, 9, 0, "", PMMin.Zeit+" "+PMMin.Datum, Farben.G2, 1, 0, 0)
        CreOb(0, 10, 23, 143, 87, 0, "", PMMin.Mail, Farben.G2, 1, 0, 0)
        CreOb(0, 10, 113, 48, 9, 0, "", "pmm von ", Farben.G2, 1, 0, 0)
        CreOb(0, 58, 113, LEN(PMMin.Seeder) * 6, 9, 0, "", PMMin.Seeder, Farben.G2, 1, 0, 0)
        PMMin.IST = ""
        PMMin.Mail = ""
        PUT #1, i, PMMin
        PMMzaehler += 1
      ELSE
        EXIT FOR
      END IF 'PMMzaehler < 10
    END IF 'PMMin.IST = "X"
  NEXT i '= 1 TO 1000
  CLOSE

 
' ********** Frage nach NAME der angemeldeten ID ********** 
  MutexLock(MX_ID)
  IF newID > hoechsteID THEN
    REDIM PRESERVE PcOnline(newID) AS Partner
    hoechsteID = newID
    TSNEPlay_SendMSG(newID, "#name")
    newID = 0
  END IF
  IF newID <> 0 THEN
    TSNEPlay_SendMSG(newID, "#name")
    newID = 0
  END IF
   
  MutexUnLock(MX_ID)

' ********** loeschen der abgemeldeten ID ********** 
  MutexLock(MX_LostID)
  IF LostID <> 0 THEN
    FOR i = 1 TO Ubound(PcOnline)
      IF LostID = PcOnline(i).ID THEN
        PcOnline(i).Titel = ""
        PcOnline(i).ID = 0
        PcOnline(i).Status = 0
        LostID = 0
      END IF
    NEXT i
  END IF
  MutexUnLock(MX_LostID)

loop

ENDE


'################################ SUBs #########################################

SUB clearscr()
    ScreenLock
    CLS
    ScreenUnLock
    ShowOb(100, 0)
END SUB


SUB PcListeSub
  SLEEP 250
  HauptMenu = 0
  Auswahl = 1
  Do
    Sleep 1
    GETMOUSE (wmaus,hmaus,mrad,mbuttons,mclib)
    ScreenLock
    Line ((w/2)-100, (h/2)-125) - STEP(200, 250),&hAAAAAA ,BF
    autowrite (&hAAA000, (w/2)-100+10, (h/2)-125+25, "Verbindung eintragen (Pc Name)", 0)
    ze = (h/2)-125+45
    FOR i = 1 TO 10
      Line ((w/2)-60, ze - 2) - STEP(120, 10),&hFFFFFF ,BF
      autowrite (&h000000, (w/2)-60+2, ze, STR(i) & ". " + TxtArray(i), 0)
      IF Auswahl = i THEN Line ((w/2)-60, ze - 2) - STEP(120, 10),&hAA0000 ,b
      ze += 20
    NEXT i
    ScreenUnLock
   
    IF mbuttons = 2 THEN EXIT DO
       
    '+++ klick auf 1 von 10 verbindungen +++
    IF mbuttons = 1 THEN
      ze = (h/2)-125+45
      FOR i = 1 TO 10
        IF wmaus > (w/2)-60 AND wmaus < (w/2)-60+120 AND _
          hmaus > ze - 2 AND hmaus < ze - 2 + 10 THEN
          Auswahl = i
          SLEEP 250
        END IF ''+++ klick auf 1 von 10 verbindungen +++
        ze += 20
      NEXT i
     
    END IF
   
    Eingabe = InKey
   
    SELECT CASE RIGHT(Eingabe, 1)
    CASE CHR(80)                     'runter
      Auswahl += 1
      IF Auswahl > 10 THEN Auswahl = 1
      Eingabe = ""
     
    CASE CHR(72)                     'rauf
      Auswahl -= 1
      IF Auswahl < 1 THEN Auswahl = 10
      Eingabe = ""

    CASE CHR(71), CHR(73)            'Pos1/Bild rauf
      Auswahl = 1
      Eingabe = ""

    CASE CHR(79), CHR(81)            'Ende/Bild runter
      Auswahl = 10
      Eingabe = ""

    CASE CHR(75), CHR(77), CHR(82), CHR(83)            'li./re./einf./entf.
      Eingabe = ""

    END SELECT

    IF Eingabe = CHR(27) THEN ClearScr: EXIT SUB
    IF Eingabe <> "" THEN TxtArray(Auswahl) = TxtF(Txt, 15, TxtArray(Auswahl)) 'Function Txt += Eingabe
   
  Loop until Eingabe = chr(13)
 
  clearscr

  IF Txt <> "" THEN
    OPEN EXEPATH + "\PcListe.dat" FOR RANDOM AS #1 LEN=LEN(PMPartner)
    For i = 1 TO 10
      PMPartner = TxtArray(i): PUT #1, i, PMPartner
    Next i
    Close
  END IF 'Txt <> ""

END SUB


SUB NewmailSub
  ClearScr
  DO
    Sleep 10
    ShowOb(SendeMail, 0)
   
    Eingabe = InKey
    IF Eingabe <> "" THEN SetText(SendeMail, 3, TxtF(Txt, 192, GetText(SendeMail, 3))) 'Function Txt += Eingabe
    IF Eingabe = CHR(27) THEN Hide_Obj(SendeMail): EXIT DO
    IF Eingabe = CHR(13) AND GetText(SendeMail, 3) <> "" THEN
      FOR i2 = 1 TO UBound(PcOnline)
        IF LCase(GetText(SendeMail, 5)) = LCase(RTRIM(PcOnline(i2).Titel)) OR _
            LCase(GetText(SendeMail, 5)) = "an alle" THEN
          TSNEPlay_SendMSG(PcOnline(i2).ID, MID(GetText(SendeMail, 2), 7, 10) + _
          MID(GetText(SendeMail, 2), 1, 5) + GetText(SendeMail, 3))
          EXIT DO
        END IF 'LCase(PMM.Leecher) =
      NEXT i2
    END IF 'Eingabe = CHR(13) AND PMM.Mail <> ""
  LOOP
  Hide_Obj(SendeMail)
  ClearScr
END SUB


SUB ENDE
  CLOSE
  MutexDestroy(MX_incomming)
  MutexDestroy(MX_ID)
  MutexDestroy(MX_LostID)
  End 0
END SUB

'############################ Funktionen #######################################

FUNCTION TxtF (Txt AS STRING, MaxTxtLen AS Integer, Txt2 AS STRING) AS STRING
 
  IF LEN(Eingabe) = 1 THEN
    SELECT CASE ASC(Eingabe)
    CASE IS = 8                       'backspace
      IF LEN(Txt2) = 0 THEN EXIT SELECT
      Txt = MID(Txt2, 1, LEN(Txt2) - 1)
     
    CASE IS = 13                      'enter
     
    CASE IS = 27                      'ESC
     
    CASE 48 TO 57                     'zahlen 0-9
      IF LEN(Txt2) = MaxTxtLen THEN EXIT SELECT
      Txt = Txt2 + Eingabe
     
    CASE 65 TO 90                     'A-Z
      IF LEN(Txt2) = MaxTxtLen THEN EXIT SELECT
      Txt = Txt2 + Eingabe
               
    CASE 97 TO 122                    'a-z
      IF LEN(Txt2) = MaxTxtLen THEN EXIT SELECT
      Txt = Txt2 + Eingabe
               
    CASE ELSE                         'sonderzeichen (.,-/....)
      IF LEN(Txt2) = MaxTxtLen THEN EXIT SELECT
      IF ASC(Eingabe) = 129 THEN Eingabe = "ü"
      IF ASC(Eingabe) = 154 THEN Eingabe = "Ü"
      IF ASC(Eingabe) = 132 THEN Eingabe = "ä"
      IF ASC(Eingabe) = 142 THEN Eingabe = "Ä"
      IF ASC(Eingabe) = 148 THEN Eingabe = "ö"
      IF ASC(Eingabe) = 153 THEN Eingabe = "Ö"
      IF ASC(Eingabe) = 225 THEN Eingabe = "ß"
      IF Eingabe = "," THEN Eingabe = "."
      Txt = Txt2 + Eingabe
               
    END SELECT
  END IF 'LEN(keytxt)
  Return Txt
END Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 18.02.2013, 00:51    Titel: Antworten mit Zitat

Bei so langen Quelltexten wäre es sinnvoller, NoPaste zu verwenden.

Flackern kommt für gewöhnlich daher, dass zwischen dem Löschen und dem Neuzeichnen der Objekte kein Screenlock durchgeführt wird. Während eines einzelnen Grafikbefehls den Screen zu sperren, macht nicht viel Sinn. SCREENLOCK/SCREENUNOCK dient viel mehr dazu, das zwischen mehreren Grafikanweisungen keine Bildschirmaktualisierung stattfindet, sondern erst am Ende dieser Anweisungen.

Was du machst ist in etwa folgendes:
Code:

' Hier besteht schon ein komplettes Bild auf dem Bildschirm

SCREENLOCK
CLS
SCREENUNLOCK  ' jetzt sieht man kurz den leeren Screen -> Flimmern!
Zeichenbefehle_fuer_neues_Bild


Was du machen solltest ist folgendes:
Code:
' Hier besteht schon ein komplettes Bild auf dem Bildschirm

SCREENLOCK
CLS
Zeichenbefehle_fuer_neues_Bild
SCREENUNLOOK

So wird zwischen Bild1 und Bild2 das Löschen des Bildschirms nicht sichtbar.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 18.02.2013, 01:00    Titel: Antworten mit Zitat

ok vielen dank für die schnelle hilfe. werd es mir gleich morgen anschauen muss jetzt leider zur arbeit.

EDIT/ Jetzt ist es viel viel besser, Danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden 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