Seite 1 von 1

Laden von grossen Files in das Editorgadget

Verfasst: 12.04.2006 11:39
von pbwild
Ich bin neu und habe probleme große Dateien in annehmbarer zeit in ein Editorgadget zu laden.
Ich fand zwar ein Beispiel das ich aber nur ausführen kann wenn ich eine "Ringslibrary" einbinde..
Das kann ich aber nicht und suche nach einer Alternative.
Hier 3 Zeilen aus dem Beispiel:
ADR=FastOpenFile(Filename.s)
SendMessage_(GadgetID(#EditorGadget), #EM_LIMITTEXT, -1, 0)
SendMessage_(GadgetID(#EditorGadget), #WM_SETTEXT, 0, ADR)
Die erste Zeile bezieht oder verknüpft zur "Rings Library" also ist eine eigene Struktur zu der ich keinen Zugang habe.
Mit den APi-Befehlen kann ich schon eher was anfangen. Kann ich #wm_settext
so mit eingelesenen Strings verknüpfen das ich auf diese Weise das Gadget füllen kann ohne addgadgetitem benutzen zu müssen - und bringt das einen Zeitvorteil beim laden?

Verfasst: 12.04.2006 11:56
von bobobo

Verfasst: 12.04.2006 17:08
von ts-soft
Große Dateien werden in ein EditorGadget am besten per Streaming geladen!
Beispiel für PB4:

Code: Alles auswählen

Procedure _StreamFileIn_Callback(hFile, pbBuff, cb, pcb)
  ProcedureReturn ReadFile_(hFile, pbBuff, cb, pcb, 0)!1
EndProcedure

Procedure Editor_Load(Gadget, File.s)
  Protected StreamData.EDITSTREAM
  Protected FileID.l
  FileID = ReadFile(#PB_Any, File)
  If FileID
    StreamData\dwCookie = FileID(FileID)
    StreamData\dwError = #Null
    StreamData\pfnCallback = @_StreamFileIn_Callback()
    If UCase(GetExtensionPart(File)) = "RTF"
      SendMessage_(GadgetID(Gadget), #EM_STREAMIN, #SF_RTF, @StreamData)
    Else
      SendMessage_(GadgetID(Gadget), #EM_STREAMIN, #SF_TEXT, @StreamData)
    EndIf
    CloseFile(FileID)
  EndIf
EndProcedure
FileID in UseFile ändern, dann sollte es auch mit 3.94 laufen.

Re: Laden von grossen Files in das Editorgadget

Verfasst: 12.04.2006 17:33
von Kaeru Gaman
pbwild hat geschrieben:

Code: Alles auswählen

    ADR=FastOpenFile(Filename.s)
    SendMessage_(GadgetID(#EditorGadget), #EM_LIMITTEXT, -1, 0) 
     SendMessage_(GadgetID(#EditorGadget), #WM_SETTEXT, 0, ADR)
die erste zeile ist eine adressverknüpfung, die anscheinend zum anbinden einer datei dient, die dann in zeile drei dem editorgadget übergeben wird...
(ich kenn die lib von rings auch nich)

der knackpunkt ist die zweite zeile:
hier wird (anscheinend) dem editorgadget eine maxgröße von -1 übergeben, also wohl so einigermaßen "unlimited"...

ich würde einfach mal ausprobieren, ob dieser API aufruf alleine dir schon hilft...
musst halt dann noch text reinkriegen...

der einwand von ts hat aber gültigkeit: streaming ist besser.

natürlich kannst du auch mit der PBOSL arbeiten, wie von bobobo vorgeschlagen...

Verfasst: 12.04.2006 21:50
von AND51
bobobo hat geschrieben:... &highlight=bibeltext ...
Sag mal, nach welchen Stichworten suchst du eigentlich? :lol: :D :mrgreen:

Verfasst: 12.04.2006 22:04
von Kaeru Gaman
nach signifikanten, von denen er weis, dass sie in seinen posts drin sind...

...oder würdest du nach "Procedure" suchen...?

Verfasst: 13.04.2006 10:29
von bobobo
@Andi
Suchen is halt 'ne Wissenschaft für sich 8)