Seite 1 von 1

Scintilla SETTEXT

Verfasst: 19.11.2010 17:49
von mbuettner
Hallo,

heute habe ich festgestellt, das unter Windows einige Dateien bei mienem Editor nicht geöffnet werden (im Sinne von: Inhalt wird nicht angezeigt), mein Vater vermutet, es hängt mit irgendwelchen Zeichen zusammen, die veranlassen, dass so ein Befehl wie ClearScreen ausgeführt wird, also nichts mehr im ScintillaGadget steht. Gut, Dateien überprüft, allerdings habe ich die ja selbst mit meinem Editor erstellt, also kann es eigentlich wohl kaum sein, dass die nicht geöffnet werden. Das passiert mir jedoch nur unter Windows, und auch nur bei einzelnen Dateien. Das einzige, was die gemeinsam haben ist:
- Sie liegen auf dem gleichen Laufwerk (USB-Stick)
- Es sind Konfigurationsdateien.
Woran könnte das liegen?
Ich benutze Scintillahelper (SCI_LoadFile)

MfG
Markus

P.S: ts-soft, bitte auf die Signatur schauen!

Re: Scintilla SETTEXT

Verfasst: 19.11.2010 18:05
von ts-soft
mbuettner hat geschrieben:P.S: ts-soft, bitte auf die Signatur schauen!
Was nützt das, wenn trotzdem alle erforderlichen Infos fehlen :mrgreen:
Wo sind die Dateien, wo der Source? Es sind überhaupt keine Infos vorhanden :freak:

Du suchst wohl schon wieder:
Bild

Ich finde es zwar nett, das Du uns das Hellsehen zutraust, aber bei den meisten ist dies nicht der Fall.

Gruß
Thomas

PS: Ich vermute mal, in dem nicht vorhandenem Source fehlt ein CloseFile()

Re: Scintilla SETTEXT

Verfasst: 19.11.2010 21:12
von c4s
Da fehlt in der Tat einiges an Informationen. Ich werfe deswegen einfach mal mit ein paar Stichworten um mich:
Unicode, Ascii, BOM, CloseFile(), ReadFile()=0, ABCDEF ...

Re: Scintilla SETTEXT

Verfasst: 19.11.2010 21:46
von ts-soft
Ich hab in ähnlich s Probl m. Hab in Dat i g öffn t, in hin ingpackt und wi d r g schloss n. J tzt v rmiss ich m in


// edit
hat sich erledigt, hab mein e wiedergefunden.

Re: Scintilla SETTEXT

Verfasst: 20.11.2010 02:05
von Häns
:lol: H h h h !

//edit: fehlendes i entdeckt...

Re: Scintilla SETTEXT

Verfasst: 20.11.2010 12:55
von mbuettner
@ts-soft:
mbuettner hat geschrieben:Ich benutze Scintillahelper (SCI_LoadFile)
Sagt das nicht schon fast alles aus? Nachdem das ganze Lesen von Scintillahelper übernommen wird, habe ich damit nichts am Hut. Hier vielleicht noch die Prozedur, wo SCI_LoadFile aufgerufen wird:

Code: Alles auswählen

Procedure OFile(file.s, fileid.l)
  ReDim paths(fileid)            
  paths(fileid) = GetPathPart(file)
  ReDim files(fileid)            
  files(fileid) = GetFilePart(file)
  AddGadgetItem(0,CountGadgetItems(0),GetFilePart(file),ImageID(100))
  ScintillaGadget(100 + fileid,0,0,WindowWidth(0)-5,WindowHeight(0)-95,#Null)
  If SCI_LoadFile(100 + fileid,file) = #True
    ScintillaSendMessage(100+fileid,#SCI_SETSAVEPOINT)
    ScintillaSendMessages(100+fileid,LineWrapping)
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
Und für alle, die Scintillahelper nicht benutzen:

Code: Alles auswählen

Procedure SCI_LoadFile(ID, FileName.s)
  Protected FF, Format, length, *mem, Text.s
  
  FF = ReadFile(#PB_Any, FileName)
  If FF
    Select ReadStringFormat(FF)
      ; hier wird das StringFormat ermittelt und entsprechend gleich die Codepage eingestellt
      Case #PB_Unicode
        Format = #PB_Unicode
        ScintillaSendMessage(ID, #SCI_SETCODEPAGE, 65001)
      Case #PB_UTF8
        Format = #PB_UTF8
        ScintillaSendMessage(ID, #SCI_SETCODEPAGE, #SC_CP_UTF8)
      Default
        Format = #PB_Ascii
        ScintillaSendMessage(ID, #SCI_SETCODEPAGE, 0)
    EndSelect
    length = Lof(FF)
    If length
      *mem = AllocateMemory(length)
      If *mem
        If ReadData(FF, *mem, length)
          Text = PeekS(*mem, length, Format)
          If SCI_SetGadgetText(ID, Text.s)
            FreeMemory(*mem)
            CloseFile(FF)
            ProcedureReturn #True
          EndIf
        Else
          MessageRequester(#Name,"Can't read data!")
        EndIf
      EndIf
    EndIf
    CloseFile(FF)
  EndIf
EndProcedure
MfG
Markus

Re: Scintilla SETTEXT

Verfasst: 21.11.2010 00:41
von ts-soft
Eigentlich habe ich die Lösung schon angedeutet, trotz mangelnder Infos, aber hier nochmal:

Code: Alles auswählen

Define.s File = GetTemporaryDirectory() + "test.txt"

If CreateFile(0, File)
  WriteStringN(0, "hallo test")
  CloseFile(0)
  
  If OpenFile(1, File)
    Debug ReadString(1)
    If Not ReadFile(2, File)
      Debug File + " konnte nicht geöffnet werden, da in Benutzung"
    EndIf
  EndIf
EndIf
Kann natürlich auch ein fremdes Programm sein, das die Dateien geöffnet hat. Manche
Programme haben ihre Konfigurations-Dateien auch solange offen, bis sie beendet werden.

Nächstes mal bitte einen ausführbaren Code und keine einzelnen Proceduren oder Schnippsel,
die sind meist unnütz. Die Dateien, welche nicht geladen werden als Download wäre auch
sinnvoll.

Erst nachdenken, welche Infos bräucht jemand anders um das Problem nachzuvollziehen und
wie stelle ich Ihm diese so zur Verfügung, das er möglichst keine Arbeit damit hat.

Gruß
Thomas