Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Dialoge erstellen - Beispiele für verschiedene Boxen und deren Auswertung
Lauffähig ab Profan-Version 5.0
Beispiele verschiedener Boxen und die Auswertung derselben. Für Profan 6.6.
Version 2.1 11.12.2001. Das Programm kann frei benutzt werden, für
Schäden kann keine Haftung übernommen werden.
Autor: Gerhard Putschalka zum Teil unter Verwendung von Ideen die in der Mailingliste
bzw. im Profanboard angeboten wurden.
email: g.putschalka@web.de
homepage: http://members.telering.at/g.putschalka/index.html
In diesem Programm ist zu beachten, daß nicht jede Aktion bei einem Objekt ein Ereignis
auslöst das die Kontrolle an das Programm übergibt.
Es ist daher wichtig zu wissen wie Aktionen des Benutzers (z.B. anklicken einer Zeile in
einer Listbox, oder Eingabe von Daten in ein Editfeld) ausgewertet werden.
Folgende Objekte werden hier angewendet:
Listboxen (Dialoge in sortierter und unsortierter Form), Standardlistbox, Auswahlboxen
(als ComboBox in unsortierter Form und auch mit einem Eingabefähigen Feld), Standardaus-
wahlbox (welche den Inhalt immer in sortierter Form anzeigt), Checkbox, Radiobuttons
verbunden mit einer Groupbox, ein einfaches Edit (Eingabefeld), ein MultiEdit (mehrzeilige
Eingabebox und ein Control bei dem Werte ausgewählt werden können, wobei unterster und
oberster Wert festgelegt werden.
Bei einer Listbox werden auch Tabulatoren gesetzt um bei der Anzeige Kolonnen zu bilden.
bei den Listboxen gibt es 2 Arten: den fertigen Listboxdialog (mit @ListBox$ erstellt und
wird nur in der Prozedur MakeListBox benutzt) und Listboxen die mit Create... erstellt
werden.
======================================
Declare _ende%,_dlg%,Lbox%,SBox%,ABox%,EBox%,UBox%,EFeld%,Ende%,Bok%,EndPrt%
Declare Zeile%,Zeile$,Inx%,Ecb%,Libx%,Ra1%,Ra2%,Ra3%,ChBx%,SkpCtl&,SkpEdt&,Tabs#
======================================
Def CreateUpDownCtl(12) !COMCTL32,CreateUpDownControl
Def GetUpDownHdl(1) SendMessage(@&(1),1130,0,0)
======================================
anzeigen der Inhalte der Objekte, die bei Änderung kein Ereignis auslösen. Diese Prozedur
wird über einen Button aufgerufen.
Es betrifft die Inhalte der Objekte in der rechten Dialoghälfte: EditChoiceBox, EditBox
(MultiEdit), Eingabefeld (einfaches Edit) und Auf/Ab Box.
Proc ZeigeFelder
Declare Text$
1. ausgew. Zeile der EditChoiceBox anzeigen
Let Zeile$ = @GetText$(Ecb%)
Print EditChoiceBox: ,Zeile$
2. Alle Zeilen der Editbox (CreateMultiEdit, Mehrzeiliges-Eingabefeld) anzeigen
Let Zeile% = @Sub(@GetLineCount(EBox%),1)
Let Inx% = 0
Let Text$ = EditBox:
While @Lt(Inx%,Zeile%)
Let Zeile$ = @GetLine$(EBox%,Inx%)
Print Text$,Zeile$
Let Text$ =
Inc Inx%
EndWhile
3. Zeile des Eingabefeldes (CreateEdit) anzeigen
Let Zeile$ = @GetText$(Efeld%)
Print Eing. Feld: ,Zeile$
4. Wert der Auf/Ab Box anzeigen
Let Zeile$ = @GetText$(SkpEdt&)
Print Auf/Ab Wert: ,Zeile$
5. wurde der Ende-Button gedrückt werden hier auch noch die Auswahlen der RadioButtons
und der CheckBox angezeigt (dies ist nur zusätzlich, da sie direkt eine Ereignis
auslösen und somit sofort angezeigt werden).
If EndPrt%
If @getCheck(Ra1%)
Print R-Button: ,rot
ElseIf @getCheck(Ra2%)
Print R-Button: ,blau
ElseIf @getCheck(Ra3%)
Print R-Button: ,grün
EndIf
If @getCheck(ChBx%)
Print CheckBox: ,JaJa
Else
Print CheckBox: ,Nein
EndIf
EndIf
Return
EndProc
=======================================
fertigen Listboxdialog erstellen, anzeigen und Auswahl sofort anzeigen. Wird durch den
Button ListBox ausgelöst.
Die Auswahl in der Listbox ist auch mit Doppelklick möglich.
Diese Art der Listbox verwendet nur die einfache Listboxliste und ist nicht zu verwechseln
mit den Listboxen die mit Create... erstellt werden.
Proc MakeListBox fertiger ListBoxDialog
Die Liste wird, in diesem Beispiel, mit Dateinamen gefüllt.
ClearList
AddFiles *.* zeigt nur den Namen ...
rem AddFiles **.Prf oder zeigt den ganzen Pfad
Let Zeile$ = @ListBox$(Alle Dateien im Verzeichnis,7) liest den ausgw. Eintrag
If @Neq$(Zeile$,) nur so prüfbar ob überhaupt Auswahl getroffen !
man kann auch die Nummer der mark. Zeile holen und damit den Zeileninhalt lesen
Let Zeile% = %GetCurSel holt die markierte Zeilennummer
Let Zeile$ = @ListBoxItem$(Zeile%) holt auch den Zeileninhalt
Print ListBox Dialog: ,Zeile$
EndIf
Return
EndProc
========================================
erstellen des Dialogs mit allen Objekten
proc dialog
let _dlg%=@createdialog(%Hwnd,Dialog,300,0,480,504)
1. Listboxen (diese werden mit Create... erstellt, können in der Größe und Position frei
gewählt werden und sind nicht mit dem fertigen ListBoxDialog zu verwechseln.
Eine ListBox kann auf zwei Arten gefüllt werden:
a. mit unabhängiger Liste (selbe Liste wie beim ListBoxDialog)
ClearList zuerst lösche die unabhängige Liste
AddString Text füge Eintrag zur Liste
AddString .... weitere Einträgen
MoveListToList(LBox%) übertrage die Liste in die Box (LBox% ist Handle der Box)
b. direkt zur Listboxliste (LBox% ist Handle der ListBox)
@SendMessage(LBox%,$0184,0,0) ggf. löschen eines alten Inhalts, wenn die
ListBox nicht zuvor neu erstellt wurde
@AddString(LBox%,Text)
@AddString(LBox%,....)
füllen und anzeigen einer unsortierten ListBox
@createtext(_dlg%,Listbox,12,8,128,16)
let Lbox%=@createlistbox(_dlg%,ListBox,8,24,100,112)
@Addstring(LBox%,Satz1)
@Addstring(LBox%,Satz13)
@Addstring(LBox%,Satz5)
@Addstring(LBox%,Satz14)
@Addstring(LBox%,Satz2)
@Addstring(LBox%,Satz11)
@Addstring(LBox%,Satz3)
@Addstring(LBox%,Satz15)
@Addstring(LBox%,Satz4)
@Addstring(LBox%,Satz12)
füllen und anzeigen einer sortierten ListBox (es wird ungeordnet geladen!)
@createtext(_dlg%,sort. Listbox,125,8,100,16)
let SBox%=@createsortedlistbox(_dlg%,,120,24,100,112)
es werden 2 Tabulatoren gesetzt (als Beispiel - kann aber mit jeder ListBox erfolgen).
Dim Tabs#,8 pro Tabulator 4 Stellen.
LONG Tabs#,0 =15 1. Tabulator
LONG Tabs#,4 =35 2. Tabulator
@SendMessage(SBox%,$0192,2,Tabs#) Parameter 3 gibt die Anzahl der Tabstopps an
Dispose Tabs#
unsortierte Einträge zur Listbox hinzufügen. Die Zeichenfolge setzt einen Tabulator
ein (könnte ebenso mit @Chr$(9) erreicht werden).
@Addstring(SBox%,Ba 111 10)
@Addstring(SBox%,Ib 111 11)
@Addstring(SBox%,Aa 020 12)
@Addstring(SBox%,Ya a91 13)
@Addstring(SBox%,Bl bii 14)
@Addstring(SBox%,Xf 020 15)
-------------
2. Auswahlboxen. Das Befüllen einer Auswahlbox kann, wie bei den Listboxen, sowohl über
die Listboxliste und danach mit MoveListToChoice(CBox%), als auch direkt erfolgen.
Die Funktion @Sendmessage ist nicht grundsätzlich erforderlich. Beim Weglassen wird
ein leeres Feld angezeigt, die Auswahl ist trotzdem möglich.
füllen und anzeigen einer EditChoiceBox (in PRFELLOW gibt es zwar die Funktion
CreateEditChoiceBox, hier wurde diese Box aber mit @Control gebildet).
@createtext(_dlg%,EditChoiceBox,260,8,100,16)
Ecb%=@Control(ComboBox,,$5401024E,260,24,140,100,_dlg%,2000,%hinstance)
AddChoice(Ecb%,Ausgabe-1)
AddChoice(Ecb%,Ausgabe-4)
AddChoice(Ecb%,Ausgabe-3)
AddChoice(Ecb%,Ausgabe-2)
Mit @SendMessage wird im 3. Parameter angegeben, welche Zeile der Liste in
der 1. Zeile der Box angezeigt wird (mit Null beginnend).
@Sendmessage(Ecb%,$14E,2,0) 3. Zeile anzeigen (3 - 1 = 2)
füllen und anzeigen einer (normalen) ChoiceBox (AuswahlBox). Hier werden die Namen der
Fonts in die Listboxliste und danach in die Choicebox übertragen.
Bei dieser Choicebox werden die Einträge in sortierter Folge angezeigt!
@createtext(_dlg%,Auswahlbox,12,145,110,16)
let ABox%=@createchoicebox(_dlg%,,8,160,210,112)
clearlist
addfonts es werden alle Fonts angezeigt
@movelisttochoice(ABox%)
hier wird nicht eine bestimmte Zeile ausgewählt, sondern der Eintrag der einen
bestimmten String (hier Arial) enthält.
Dim Tabs#,50
String Tabs#,0=Arial
@sendmessage(ABox%,$14D,-1,Tabs#) Eintrag auswählen
Dispose Tabs#
unsortierte ChoiceBox. (Tip vom mephisto). Entspr. der normalen ChoiceBox, die Einträge
werden, so wie geladen, unsortiert angezeigt.
@createtext(_dlg%,uns. Auswahlbox,8,273,150,16)
Let UBox%=Control(COMBOBOX,,$54010243,8,288,118,120,_dlg%,0,%hinstance)
clearlist
Addstring Amerika
Addstring Europa
Addstring Australien
Addstring Asien
Addstring Afrika
@movelisttoChoice(UBox%)
@sendmessage(UBox%,$14E,3,0) 4. Zeile anzeigen
--------------------------
3. Edits (Eingabefelder)
füllen und anzeigen einer MultiEditBox
@createtext(_dlg%,Editbox,260,145,88,16)
let EBox%=@createmultiedit(_dlg%,,260,160,150,64)
ein direktes hinzufügen zur Multi-EditBox gibt es nicht, Umweg über die List-
BoxListe. Sinvollerweise sollte mindestens ein AddString (mit ) erfolgen.
Wurde nämlich nichts hinzugefügt und man positioniert den Cursor in der ersten
Zeile der Listbox müßte sonst nach der Zeile noch die Eingabetaste gedrückt
werden (sonst wird die Zeile in der Listbox nicht ausgelesen).
clearlist
Addstring Satz1
Addstring Satz3
Addstring Satz5
Addstring mindestens dieser AddString
@movelisttoEdit(EBox%)
erstellen eines leeren Eingabefeldes
@createtext(_dlg%,Eingabefeld,260,238,88,16)
let EFeld%=@createedit(_dlg%,,260,256,120,22)
--------------------------
4. Auf/Ab Control
@createtext(_dlg%,Auf/Ab,400,238,40,16)
Die Funktion @CreateEdit ist in der Funktion @CreateUpDownCtl enthalten.
Die Position des Objekts und der Anfangs- und Endwert sind in @CreateEdit enthalten.
Par. 7 gibt das obere, Par. 8 das untereLimit an, mit Par. 9 wird Anfangswert bestimmt
Let SkpCtl&=@CreateUpDownCtl($54000026,0,0,0,0,_dlg%,2002,%hinstance,
@CreateEdit(_dlg%,,400,256,50,22),100,10,20)
Let SkpEdt& = @GetUpDownHdl(SkpCtl&)
--------------------------
5. Radiobuttons, mit GroupBox zusammengefaßt.
Let Ra1% = @CreateRadioButton(_dlg%,rot,150,295,76,16)
Let Ra2% = @CreateRadioButton(_dlg%,blau,150,315,76,16)
Let Ra3% = @CreateRadioButton(_dlg%,grün,150,335,76,16)
@createtext(_dlg%,Radiobuttons,140,273,88,16)
@creategroupbox(_dlg%,,140,280,90,80)
SetCheck Ra1%,1 Button rot vorgeben
--------------------------
6. CheckBox anzeigen
Let ChBx% = @CreateCheckBox(_dlg%,CheckBox,140,375,90,22)
SetCheck ChBx%,1 auf ja setzen
--------------------------
7. Buttons erstellen
let Libx%=@createbutton(_dlg%,ListBox,60,432,80,32)
let Ende%=@createbutton(_dlg%,Ende,200,432,80,32)
let Bok%=@createbutton(_dlg%,Anzeigen,340,432,80,32)
--------------------------
8. auswerten der Eingaben
Beachte, welche Ereignisse direkt und welche erst nach drücken eines
Buttons abfragbar sind (nicht direkt: EditBox, EditFeld,Auf/Ab Box und EditChoiceBox).
let _ende% = 0
EndPrt% = 0
whilenot _ende%
bei Anzeige der MultiEditBox wird der Cursor sinnvollerweise auf die erste
Position der Box gesetzt
@SetFocus(EBox%)
WaitKey
if @equ(%key,2) Abbruch (X in Ecke rechts oben im Dialog)
let _ende% = 1
elseif @getfocus(Lbox%)
Let Zeile% = @GetCursel(Lbox%)
Let Zeile$ = @GetString$(LBox%,Zeile%)
Print Listbox: (;@str$(Zeile%);),Zeile$
elseif @getfocus(SBox%)
Let Zeile% = @GetCursel(Sbox%)
Let Zeile$ = @GetString$(SBox%,Zeile%)
Let Zeile$ = @Translate$(Zeile$, , )
Print S-Listbox: (;@str$(Zeile%);),Zeile$
elseif @getfocus(ABox%)
Let Zeile% = @GetCursel(ABox%)
Let Zeile$ = @GetText$(ABox%)
Print Auswahlbox: ,Zeile$
elseif @getfocus(UBox%)
Let Zeile% = @GetCursel(UBox%)
Let Zeile$ = @GetText$(UBox%)
Print uns. Auswahlbox:,Zeile$
elseif @getfocus(Libx%)
MakeListBox
elseif @getfocus(Ende%)
EndPrt% = 1
Print
Print --- Ende Button
ZeigeFelder
Print
Print === zum Beenden linke Maustaste oder >Enter< drücken ===
let _ende% = 1
ElseIf @getFocus(ChBx%)
If @getCheck(ChBx%)
Print CheckBox: ,Ja
Else
Print CheckBox: ,Nein
EndIf
ElseIf @getFocus(Ra1%) or @getFocus(Ra2%) or @getFocus(Ra3%)
Case @getCheck(Ra1%) : Print R-Button: ,rot
Case @getCheck(Ra2%) : Print R-Button: ,blau
Case @getCheck(Ra3%) : Print R-Button: ,grün
elseif @getfocus(Bok%)
Print
Print --- Anzeige Button
ZeigeFelder
endif
wend
@destroywindow(_dlg%)
endproc
=========
MainLine
=========
windowtitle Dialog-Test
cls
dialog
waitinput damit die Printpan>list respected go can
end