home  |  sitemap  |  kontakt  





Bibliotheken


OO-4-WIN Logo



Inhalt




Allgemeines

Basisklasse einer Applikation (LR_APP)

Datenbank / Arraybrowser (LR_BROWSE)

Editierbare Dialogklasse (LR_EDITDLG)

Hotkey-Klasse (LR_HOTKEYS)

Indexdatei-Klasse (LR_INDEX)

Maskierung von Editelementen (LR_MASKED)

nichtmodale Messagebox (LR_MSG)

netzwerkfähige Datenbank-Klasse
(LR_NETTABLE)


selbstzeichnende Schalter (Ownerdraw Buttons)
(LR_OD_BUTTON)


Statuszeile (Status Bar) (LR_STATUSBAR)

Dialoge mit TAB Reitern (Tabbed Dialoges) (LR_TABDLG)

Hinweise durch Tip-Fenster (Tool Tips) (LR_TIP)

Schalterleiste (Tool Bar) (LR_TOOLBAR)

Basisklasse für Dialoge (LR_WDIALOG)

Beispiel:
Adressenverwaltung (inkl. Quellcode!)



Einführung



Die OO-4-WIN Klassenbibliothek ist für Programmierer gedacht, die mit der
CLIP-4-WIN
Library von John Skelton arbeiten. OO-4-Win bietet umfangreiche GUI-Klassen für das
einfache Erstellen von Windows-Programmen.




Die OO-4-WIN ist eine auf TopClass basierende, objektorientierte Klassenbibliothek.
(TopClass ist Bestandteil der CLIP-4-WIN Librarys von John Skelton)




Beschreibung der einzelnen Klassen




Klasse für die Verwaltung von Applikationen -
LR_APP



Applikationsklasse, die alle notwendigen Aufgaben zur korrekten Erzeugung,
Verwaltung und Beendigung einer Applikation übernimmt, inklusive 3D Effekte,
Focusumschaltung zwischen aktiven Dialogen und dem Hauptfenster, Behalten von
Position/Größe und automatische Anpassung an die Windowsfarben.

Syntax:

LR_APP{cClassName, cCaptionText}


Bsp: adressen

Beispiel:
.
.
.

oApp := LR_APP{"Adressen", ;
"Adressen Demo Programm}
.
.
.


Inhalt
zum Inhaltsverzeichnis


Klasse für das Betrachten von
Datenbankinhalten - LR_BROWSE




Datenbank / Arraybrowser, der nicht nur Datenbankfelder oder Arrayelemente
anzeigen kann, sondern auch Bitmaps in den Listenelementen, inklusive frei
konfigurierbare Spaltenbreite, Spaltenanordnung, Spaltenuntermengenbildung und
Umschaltung von Editier / Nichteditiermodus während der Laufzeit. Des weiteren
können im Editiermodus einzelne Spalten als nichteditierbar markiert werden. Die
zur Zeit unterstützten RDDs sind DBFNTX (CA-CLIPPER dBase) und DBFNTXAX
(Advantage Database Server von Extend Systems)

Syntax:

LR_BROWSE{ hWndParent | oParent, ID_LISTBOX, nArea | aBrowse,
aDBFelder, cBrowserName }

hWndParent: Parent - Fensterbezug
- oder -
oParent: Parent - Dialogobjekt

ID_LISTBOX: ID Der Listbox, die das LR_Browseobjekt aufnimmt

nArea: Arbeitsbereich für die Datenbank
- oder -
aBrowse: Array, auf dem gebrowsed werden soll

aDBFelder: Beschreibendes Array für die Anzeige des
Browsers

cBrowserName: Eindeutige Zeichenkette, um die
Benutzereinstellungen abzuspeichern


ein Objekt der Klasse<br />
LR_BROWSE
Bild 1: ein Objekt der Klasse LR_BROWSE

Änderung der<br />
Spaltenanordnung
Bild 2: Änderung der Spaltenanordnung

Änderung der<br />
Spaltenbreite
Bild 3: Änderung der Spaltenbreite

Beispiel:

LOCAL aDBFelder := {}

AADD(aDBFelder, {"NAME", "C", NO_EDIT,;
GetFieldWidth(::hwnd, 30), "Name", NO_BITMAP})
AADD(aDBFelder, {"VNAME", "C", NO_EDIT,;
GetFieldWidth(::hwnd, 20), "Vorname", NO_BITMAP})
AADD(aDBFelder, {"PLZ", "C", NO_EDIT,;
GetFieldWidth(::hwnd, 5), "PLZ", NO_BITMAP})
AADD(aDBFelder, {"ORT", "C", NO_EDIT,;
GetFieldWidth(::hwnd, 40), "Ort", NO_BITMAP})
AADD(aDBFelder, {"STRASSE", "C", NO_EDIT,;
GetFieldWidth(::hwnd, 40), "Strasse", NO_BITMAP})
AADD(aDBFelder, {"TEL", "C", NO_EDIT,;
GetFieldWidth(::hwnd, 20), "Telefon", NO_BITMAP})
AADD(aDBFelder, {"FAX", "C", NO_EDIT,;
GetFieldWidth(::hwnd, 20), "Telefax", NO_BITMAP})

// Browserobjekt erzeugen
::oVListe := LR_Browse{;
self, ; // Parent Object
IDL_LISTBOX, ; // ID of Listbox in Dialog
::oPers:Area, ; // Workarea
aDBFelder, ; // Array of DBF Fields
"ADRDLG" ; // Unique String for saving
// Custom settings
}


Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_EDITDLG




Eine von TC_WDIALOG abgeleitete Dialogklasse, die alle notwendigen
Mechanismen für das Lesen, Speichern, Hinzufügen und Löschen von
(Datenbank-) Daten beinhaltet. Dazu gehört auch die vollautomatische
Überwachung der Veränderung der Daten und die Reaktion auf die
Veränderung
(Anzeige entsprechender Hinweisdialoge)

Syntax:
LR_EDITDLG{ oParent, cnDlgName [, hDll ]}

oParent: Parentobjekt
cnDlgName: Numerische Templatebezug oder Resourcestring
hDll: optionaler Bezug auf die Instanz, die das Template
enthält. Default ist die Modulinstanz
( _GetInstance() ).


Dialog im<br />
Editiermodus
Bild 1: Dialog im Editiermodus. Das Editiericon wird automatisch im
Dialog eingefügt.

Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_HOTKEYS




Sehr einfach zu definierende Hotkeys, die natürlich nicht nur auf dem
Hauptfenster der Applikation funktionieren (wie die Accelerators), sondern auch auf
allen Dialogen

Syntax:
LR_HotKeys{ aHotKeyArray )

aHotKeyArray: Array von Arrays mit HotKeybeschreibung


aHotKeyArray kann folgende Elemente enthalten ( als Array! ):

1. Element: Extended Key Code
2. Element: Key
3. Element: Ausführungscodeblock


Beispiel:

oApp:oHotKeys := LR_HOTKEYS{HKHotKeys()}


FUNCTION HKHotKeys()
LOCAL aHotKeys := {}

AADD(aHotKeys, {TC_HK_NO_EXTEND, VK_F2, ;
{||PostMessage(oApp:hwnd, WM_COMMAND, ;
USR_EDIT, 0)}})
AADD(aHotKeys, {TC_HK_NO_EXTEND, VK_F3, ;
{||PostMessage(oApp:hwnd, WM_COMMAND, ;
USR_NEW , 0)}})
.
.
.

RETURN aHotKeys


Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_INDEX





Syntax:

LR_Index{ [cReorg | aReorg] [, cDatDir] [, lCloseApp] [, cIndexExt] }


cReorg: optionaler Name der Datenbank, die die
Indexerstellungsinformationen enthält
Default ist "INDEX.DBF"
- oder -
aReorg: Array mit Indexerstellungsinformationen

cDatDir: optionaler Datenpfad der Datenbanken
Default ist aktuelles Verzeichnis

lCloseApp: optionales Flag. Default ist .T.

cIndexExt: optionale Indexerweiterung. Default ist
INDEXEXT()


LR_Index sucht im aktuellen Verzeichnis nach der Datenbank
"INDEX .DBF". Die Datenbank ***MUSS*** folgende Struktur
haben:

DBF-> DATABASE : MSDOS Datenbankname
DBF-> INDEXFILE : MSDOS Indexdateiname
DBF-> INDEX : Indexschlüssel

Es kann auch alternativ ein Array mit Indexerstellungsinformationen
angegeben werden. Dieses Array ***MUSS*** folgende Struktur
haben:

{{cDBFName, cIndexName, cIndexKey}
[, {cDBFName, cIndexName, cIndexKey}]}

Hat lCloseApp den Wert .T., wird die Applikation beim Abbruch der
Indexerstellung durch den Benutzer beendet.

Klasse zur Erstellung beliebiger Indexdateien, inklusive grafische Darstellung
über den Fortschritt der Indexerstellung (Progress Bar)



Beispiel:


LR_INDEX():Init()



Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_MASKED





Klasse zur Maskierung von Editelementen (PICTURE Klauseln)



Syntax:

LR_MASKED{ hControl, cInitValue, cPicture, ;
bPreBlock, bPostBlock, bRetBlock }

hControl: Fensterbezug auf das Dialogelement, welches die
Maskierung enthalten soll.
cInitValue: Initaler Wert des Dialogelements.
cPicture: Pictureklausel.
bPreBlock: Codeblock der ausgeführt wird, bevor das
Dialogelement den neuen Wert enthält.
bPostBlock: Codeblock der ausgeführt wird, nachdem das
Dialogelement den neuen Wert enthält.
bRetBlock: Codeblock der beim Drücken der Returntaste
ausgeführt wird.


Beispiel:

LR_MASKED{GetDlgItem(::hwnd, 1008),SPACE(5),'99999'}

Hier wird ein Editcontrol eines Dialogs mit der ID 1008 maskiert. Der maximale
Eingabelänge beträgt fünf Zeichen, der Initialisierungswert sind
fünf Leerzeichen und es können nur Numerische Zeichen eingegeben
werden.


Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_MSG




Klasse zur Ausgabe einfacher nicht modaler Dialoge. Enspricht nicht modaler
MessageBox


Syntax:

LR_MSG{ cMessage [, hFocus][, Timer]}

cMessage: Die anzuzeigende Zeichenkette
hFocus: optionaler Fensterbezug, der nach Schliessen
der Meldung den Fokus bekommen soll
nTimer : optionaler Timeout in Sekunden, nachdem die
Meldung automatisch beendet wird. Default ist 20
Sekunden

Beispiel:

LR_MSG():Init("Bitte geben Sie den Nachnamen ein",;
GetDlgItem(::hwnd, 101))

oder


oMsg :=LR_MSG{"Bitte geben Sie den Nachnamen ein",;
GetDlgItem(::hwnd, 101)}


Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_NETTABLE




Datenbank Klasse, inklusive Netzwerkunterstützung und Indexe


Syntax:

LR_NETTABLE{oParent, cDBF, lShared, lNew, lReadOnly, aIndex}

oParent: Parentobjekt
cDBF: Datenbankname
lShared: .F. -> Datenbank wird EXCLUSIVE geöffnet
.T. -> Datenbank SHARED geöffnet
Default ist .T.
lNew: .T. -> neuer Arbeitsbereich wird benutzt
.F. -> vorhandener Arbeitsbereich wird benutzt
Deafault ist .T.
lReadOnly: .F. -> Datenbank wird readwrite geöffnet
.T. -> Datenbank wird readonly geöffnet
Default ist .F.
aIndex: Array mit Indexnamen, die mit der Datenbank
cDBF geöffnet werden. Das erste Element dieses
Arrays ist der führende Index


Beispiel:

LOCAL aIndex := {}, oPers

AADD(aIndex, "ADR1")
AADD(aIndex, "ADR2")

oPers := LR_NETTABLE{self, "ADR",,,,aIndex}

IF !oPers:lOK
// Datenbank kann nicht geöffnet werden.
ErrorHandler(1)
RETURN self
ENDIF


Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_OD_BUTTON




Klasse zur Erzeugung von Ownerdraw Buttons

Syntax:

LR_OD_BUTTON{ hwnd, IDButton, cBmp_unpressed, ;
cBmp_pressed, hDLL)

hwnd: Fensterbezug des Parent, auf dem der Button liegt
IDButton: Button ID
cBmp_unpressed: Bitmapresourcestring des ungedrückten Buttons
cBmp_pressed: Bitmapresourcestring des gedrückten Buttons
hDLL: Handle auf Bitmapresource (z.B. eine DLL)
Default ist _GetInstance().

Beispiel:

LR_OD_BUTTON():Init( ::hwnd, ;
1041, ;
"SEARCH_U", ;
"SEARCH_P", ;
hBtnDll)


Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_STATUSBAR




Sehr einfach zu definierende Statuszeile, inklusive konfigurierbare Anzeigen über
Numlockstatus, Einfügen/Überschreiben, Rolltaste und Capslockstatus

Syntax:

LR_STATUSBAR{ [oParent] [, aText] [, u_WM] }

oParent: optinonaler Bezug auf das Parentobjekt.
Default ist oApp.
aText: optionales Array mit
Statusbaranzeigeinformationen.
Default ist linksbündiger Infotext und rechtsseitige
Tastaturzustandsanzeige für
Einfügen/Überschreiben, NUM-Lock und
Feststelltaste.
u_WM: optionale Nachrichtennummer, die bei einer
Mausaktion ( Bewegen der Maus über und Klicken
auf die Statusbar ) an das Hauptfenster geschickt
wird. Default ist WM_STATUSBAR.



Standard Anzeige der<br />
Statuszeile
Bild: Standard Anzeige der StatusBar beinhaltet:

· Linksbündiger Infotext
· Tastaturzustandsanzeige für Einfügen/Überschreiben,
NUM-Lock und Feststelltaste

Beispiel:

oApp:oStatusBar := LR_StatusBar{}


Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_TABDLG




Eine von TC_EDITDLG abgeleitete Dialogklasse für mehrzeilige "Tabbed Dialoge".
Die Definition der einzelnen TAB-Reiter geschieht vollständig grafisch im
Resource Bereich. Der Programmierer muß dafür keine einzige Zeile Code
schreiben !


Syntax:

LR_TABDLG{ oParent, cnDlgName [, hDll ]}

oParent: Parentobjekt
cnDlgName: Numerische Templatebezug oder Resourcestring
hDll: optionaler Bezug auf die Instanz, die das Template
enthält. Default ist die Modulinstanz
( _GetInstance() ).



Bild: Tabbed Dialog mit zwei TAB Reitern


Bild: Dialogschablone (Template) und Definition des ersten TABs im Resource Bereich

Definition des<br />
zweiten<br />
TABs im Resource Bereich
Bild: Definition des zweiten TABs im Resource Bereich

Die einzelnen TABs werden im Dialog durch Gruppenrahmen definiert, deren ID
ganzahlig durch 1000 teilbar sind. Der Text auf den TAB Reitern entspricht dem Text
des Gruppenrahmens. Alle Kontrollelemente, die mit einem TAB geschaltet werden
sollen müssen numerisch im ID Bereich des TAB reiters liegen ( TAB: 1000,
Kontrollelemente 1001, 1005, 1010 ; TAB 2000, Kontrollelemente 2001, 2006 2024,
usw)

Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_TIP




Tip Klasse


Syntax:

LR_Tip{ cTipText, x, y}

cTipText: Text, den das Tipobjekt anzeigen soll
x: x - Koordinate des Tipobjekts
y: y - Koordinate des Tipobjekts





Beispiel:

.
.
.

case wparam == SB_THUMBTRACK
i := C4W_LoWord(lparam)
GetCurPos(@aPT)
aPT[1] += GetSystemMetrics(SM_CXCURSOR)/2
aPT[2] += GetSystemMetrics(SM_CYCURSOR)/2
IF ::oTip == NIL
::oTip := LR_Tip{"Datensatz "+ALLTRIM(STR(i)),;
aPT[1], aPT[2]}
ELSE
::oTip:MoveTip("Datensatz "+ALLTRIM(STR(i)),;
aPT[1], aPT[2])
ENDIF

.
.
.


Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_TOOLBAR




Sehr einfach zu definierende ToolBar, inklusive konfigurierbare ToolTips und
Statuszeilenhilfe.


Syntax:
LR_TOOLBAR{ aButtons [, hInstance] }

aButtons: Array von Array(s) für die Buttonbeschreibung
hInstance: optionaler Instanzbezug für die Buttonbitmaps
( typischerweise DLL - Handle).

Das aButtonsarray ***MUSS*** folgende Struktur haben:

1. Element: ResourceString des Bitmaps für den ungedrückten
Zustand des Buttons.
2. Element: ResourceString des Bitmaps für den gedrückten
Zustand des Buttons.
3. Element: CodeBlock der nach dem Drücken des Buttons
ausgeführt wird.
4.Element: Numerischer Resourcenbezug für den
buttonbezogenen ToolTip - String.
Ist dieser Wert NIL, wird kein ToolTip angezeigt.
5.Element: Numerischer Resourcenbezug für den
statusbarbezogenen Infotext - String.
Ist dieser Wert NIL, wird kein Infotext angezeigt.
6. Element: ToolBarButton - Stil.
Dieser Stil ist einer bzw. eine sinnvolle Kombination
vom folgenden Werten:
TC_BUTTON : Arrayelement ist ein Button
TC_SEPARATOR : Arrayelement ist ein Separator
TCF_DISABLED : Button ist disabled ( grau )
TCF_ENABLED : Button ist enabled ( aktiv,
default)



Bild: Toolbar des Adressen Demo Programms. Die Buttons 2 bis 9 sind inaktiv
geschaltet, da der Adressendialog nicht aktiv ist.


Bild: Toolbar während aktivem Adressendialog. Die Buttons 2 bis 9 sind aktiv.


Beispiel:

.
.
.

oApp:oToolBar := LR_Toolbar{TBButtons()}

.
.
.

FUNCTION TBButtons()
LOCAL aButtons := {}

// Adressendialog aufrufen
AADD(aButtons, {"BU_ADR_U", "BU_ADR_P", ;
{||PostMessage(oApp:hwnd, WM_COMMAND, ;
IDD_ADR_DIALOG, 0)}, ;
TOOLTIP_ADR, STATUSBAR_ADR, TC_BUTTON})

// Separator
AADD(aButtons, {NIL, NIL, NIL, NIL, NIL, TC_SEPARATOR})

// Editieren
AADD(aButtons, {"BU_EDIT_U", "BU_EDIT_P", ;
{||PostMessage(oApp:hwnd, WM_COMMAND, ;
USR_EDIT, 0)}, ;
TOOLTIP_EDIT, STATUSBAR_EDIT, ;
TC_BUTTON + TCF_DISABLED})

.
.
.

RETURN aButtons


Inhalt
zum Inhaltsverzeichnis


Klasse für Datenbankdialoge -
LR_WDIALOG




Basis Dialogklasse, die alle notwendigen Aufgaben zur korrekten Erzeugung,
Verwaltung und Beendigung von Dialogen übernimmt, inklusive Behalten von
Position/Größe und automatische Anpassung an die Windowsfarben

Syntax:
LR_WDIALOG{ oParent, cnDlgName [, hInstDll] }

oParent: Parentobjekt
cnDlgName: Numerische Templatebezug oder Resourcestring
hDll: optionaler Bezug auf die Instanz, die das Template
enthält. Default ist die Modulinstanz
( _GetInstance() ).



Beispiel:


oInfo := LR_WDIALOG{self, "TC_INFO"}



Inhalt
zum Inhaltsverzeichnis

 


 Über Uns
 Essensausgabe
 WinDock
 FreshX
 Kiehle & Partner
 HIPO
 Ferienwohnung
 Impressum
 Kontakt
 Infoanforderung / Fragen
 Impressum
 Download