Mittels der Anleitung von MK-Soft habe ich meinen funktionierenden Editor in OOP umgeschrieben. Er liest und schreibt eine Datei im temporären Verzeichnis namens "quickPAD.txt", sonst tut er nichts.
Leider zeigt das Programm in seiner jetzigen Form nur ein leeres Fenster an. Eigentlich müsste ein schwarzer Editor angezeigt werden. Kann mir das jemand ausdeutschen?
Code: Alles auswählen
declareModule qui
interFace iQui
;{
queryInterface ( *riid,
*addr )
addRef ( )
release ( )
;}
endInterFace
structure sQui
;{
*vTable
cntRef. i
objMutex. i
;}
endStructure
declare new ( )
define fl$ = "quickPAD.txt"
endDeclareModule
module qui
declare executing ( *gadget )
declare. b loadFromTmpFile ( *gadget )
declare. q open ( )
declare. b storeToTmpFile ( *gadget )
procedure addRef ( *this. sQui )
lockMutex ( *this\ objMutex )
*this\ cntRef + 1
unlockMutex ( *this\ objMutex )
procedureReturn *this\ cntRef
endProcedure
procedure queryInterface ( *this. sQui,
*riid,
*addr )
procedureReturn 2147500034
endProcedure
procedure release ( *this. sQui )
protected index, cnt
with *this
lockMutex ( \ objMutex )
If \ cntRef = 0
freeMutex ( *this\ objMutex )
freeStructure ( *this )
procedureReturn 0
else
\ cntRef - 1
endIf
unlockMutex ( *this\ objMutex )
procedureReturn \ cntRef
endWith
endProcedure
procedure executing ( *ga_i )
repeat
until waitWindowEvent ( ) = #pb_event_closeWindow
storeToTmpFile ( *ga_i )
endProcedure
procedure. b loadFromTmpFile ( *ga_i )
define. b re_v
define *fi_i
*fi_i = readFile ( #pb_any,
getTemporaryDirectory ( ) + fl$ )
if *fi_i and
isFile ( *fi_i ) and
isGadget ( *ga_i ) and
gadgetType ( *ga_i ) = #pb_gadgetType_editor
repeat
addGadgetItem ( *ga_i,
-1,
readString ( *fi_i ) )
until eOF ( *fi_i )
re_v = #true
endIf
if *fi_i and
isFile ( *fi_i )
closeFile ( *fi_i )
endIf
procedureReturn re_v
endProcedure
procedure new ( )
protected *object. sQui
*object = allocateStructure ( sQui )
if *object
*object\ vTable = ?vTQui
*object\ objMutex = createMutex ( )
*object\ cntRef = 0
endIf
open ( )
procedureReturn *object
endProcedure
procedure. q open ( )
define. q re_v
define *wi_i
;{
define. w wi_x = 200
define. w wi_y = 150
define. w wi_w = 600
define. w wi_h = 400
define. q wi_f = #pb_window_systemMenu
define$ wi_t = "quickPAD"
;}
define *g_e_i
;{
define. w g_e_x = 0
define. w g_e_y = 0
define. w g_e_x = wi_w
define. w g_e_x = wi_h
define. q g_e_f = #pb_editor_wordWrap
;}
*wi_i = openWindow ( #pb_any,
wi_x,
wi_y,
wi_w,
wi_h,
wi_t,
wi_f )
setWindowColor ( *wi_i,
#white )
*g_e_i = editorGadget ( #pb_any,
g_e_x,
g_e_y,
g_e_w,
g_e_h,
g_e_f )
setGadgetColor ( *g_e_i,
#pb_gadget_frontColor,
#white )
setGadgetColor ( *g_e_i,
#pb_gadget_backColor,
#black )
re_v = loadFromTmpFile ( *g_e_i )
executing ( *g_e_i )
procedureReturn re_v
endProcedure
procedure. b storeToTmpFile ( *ga_i )
define. b re_v
define *fi_i
define. q co_i
*fi_i = createFile ( #pb_any,
getTemporaryDirectory ( ) + fl$ )
if *fi_i and
isFile ( *fi_i ) and
isGadget ( *ga_i ) and
gadgetType ( *ga_i ) = #pb_gadgetType_editor
for co_i = 0 to countGadgetItems ( *ga_i )
if co_i
writeStringN ( *fi_i,
#empty$ )
endIf
writeString ( *fi_i,
getGadgetItemText ( *ga_i,
co_i ) )
next
endIf
if *fi_i and
isFile ( *fi_i )
closeFile ( *fi_i )
endIf
procedureReturn re_v
endProcedure
dataSection
vTQui:
data. i @ queryInterface ( )
data. i @ addRef ( )
data. i @ release ( )
endDataSection
endModule
*qui = qui::new ( )
Salut!