Scintilla SETTEXT

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
mbuettner
Beiträge: 88
Registriert: 14.05.2010 15:53
Computerausstattung: 3 GB RAM, Windows 7 32-Bit Home Premium
Wohnort: daheim
Kontaktdaten:

Scintilla SETTEXT

Beitrag 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!
Bild
Bild
Die täglich beförderte Datenmenge des Internets beträgt 415 Petabyte oder 445.602.856.960 Megabyte!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Scintilla SETTEXT

Beitrag 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()
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Scintilla SETTEXT

Beitrag 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 ...
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Scintilla SETTEXT

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Häns
Beiträge: 47
Registriert: 27.10.2007 14:30
Wohnort: Kölle

Re: Scintilla SETTEXT

Beitrag von Häns »

:lol: H h h h !

//edit: fehlendes i entdeckt...
PB 5.6
Windows 7 Professional
mbuettner
Beiträge: 88
Registriert: 14.05.2010 15:53
Computerausstattung: 3 GB RAM, Windows 7 32-Bit Home Premium
Wohnort: daheim
Kontaktdaten:

Re: Scintilla SETTEXT

Beitrag 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
Bild
Bild
Die täglich beförderte Datenmenge des Internets beträgt 415 Petabyte oder 445.602.856.960 Megabyte!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Scintilla SETTEXT

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten