Source/ Codesnippets | | | | Christian Eichler | comment peux je dans Profan² 6.6 Tabs erstellen ? Irgenwie hab je là dans qui Profan - Aider rien trouvé ... aussi google hat pas sonderlich geholfen (um honnête trop son: gar pas !)
mfg Christian |
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 06.07.2007 ▲ |
| |
| | RGH | cela Tab-Contrôle wurde malheureusement seulement avec Version 7 eingeführt.
Salut Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 06.07.2007 ▲ |
| |
| | Christian Eichler | Öhm ... bof, tant pis ... mais cela Problem peut sich oui ensuite lösen ...
|
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 06.07.2007 ▲ |
| |
| | Dietmar Horn | allô Christian,
lade Dir den XProfan-Manager runter, ensuite la hâte Du alles, quoi Du pour Profan² et XProfan besoin. quoi im Manager pas enthalten ist, cela brauchst Du aussi pas absolument.
ici une de mehreren Demos trop Tab-Controls: KompilierenMarqueSéparationTabControl (Registerkarten) erstellen (ab Profan² 6.6)
Lauffähig ab Profan-Version 5.0
Beispiel zur Verwendung eines TabControls (Registerkarten).
Version 1.5 8.12.2002. Das Programmbeispiel kann frei benutzt werden, für
Schäden kann keine Haftung übernommen werden.
Autor: Gerhard Putschalka
email: g.putschalka@web.de
homepage: http://members.telering.at/g.putschalka/index.html
-------------------------------------------------------------------------------
Das Beispiel läuft ab Version 6.6. Es kann aber auch mit Version 5 benutzt werden.
Dazu sind 2 kleine Änderungen erforderlich, die im Programm beschrieben sind.
-------------------------------------------------------------------------------
Um Registerkarten in einem Dialog verwenden zu können sind folgende Schritte
erforderlich:
- TabControl erstellen
- TabItems (Registerkarten) einfügen
- Elemente wie Texte, Editfelder, Icons etc. erstellen
- diese Elemente, abhängig davon, welche Registerkarte gewählt ist aktivieren bzw.
deaktivieren
-------------------------------------------------------------------------------
Im Programm wird auf der ersten Registerkarte eine Listbox angezeigt. Wird eine Zeile
ausgewählt, werden die weiteren Daten zu dieser Zeile in den anderen Registerkarten
angezeigt.
Mit dem Ende Button werden die Daten der ausgewählten Zeile angezeigt und das
Programm beendet.
-------------------------------------------------------------------------------
Declare Text21%,Text22%,Text23%,Edit21%,Edit22%,Edit23%,Libx1%,Libx2%,Libx3%,Index%
Declare Text31%,Edit31%,Text32%,Edit32%,Text33%,Edit33%,Edit41%,Libx0%,IcHndl&
Declare Akt%,TabDlg&,TabCntrl&,TabAktKz&,OK%,Abbruch%,Text#,ItText#,AusLoop%,PrtKz%
Declare Feld01$,Feld21$,Feld22$,Feld23$,Feld31$,Feld32$,Feld33$,Feld41$
= = = = = = = = =
>>> hier aktivieren für Profan Version 5 <<<
Def @CreateWindowEx(12) ! USER32,CreateWindowExA
>>> Ende aktivieren <<<
= = = = = = = = =
Proc Setze_Text
die Texte werden in Listboxes gespeichert. Libx0 wird direkt auf der ersten
Registerkarte angezeigt, die anderen Boxen sind unsichtbar und werden nur zum
Speichern der Texte benutzt (könnten ebensogut Arrays sein).
Texte für Registerkarte 1
@AddString(Libx0%,Augenoptik Fritz)
@AddString(Libx0%,Der Computershop)
@AddString(Libx0%,Meyers Schuhladen)
@AddString(Libx0%,Sanitär Baumarkt)
@AddString(Libx0%,Taucherparadies)
@AddString(Libx0%,Tiefenrausch)
@AddString(Libx0%,Tierfutterhandel)
Texte für Registerkarte 2 - bestehen aus 3 Substrings
@AddString(Libx1%,Brillenweg 30;22864;Norderstedt)
@AddString(Libx1%,Computerstraße 8;65760;Eschborn)
@AddString(Libx1%,Steinplatz 2;14089;Berlin;)
@AddString(Libx1%,Wasserleitungsstraße25;40764;Langenfeld)
@AddString(Libx1%,Hahnenstraße 52;63128;Dietzenbach)
@AddString(Libx1%,Kaiserstraße 10;60313;Frankfurt)
@AddString(Libx1%,Im Taubengrund 1;84028;Landshut)
Texte für Registerkarte 3 - bestehen aus 3 Substrings
@AddString(Libx2%,040;521020-0;521020-35)
@AddString(Libx2%,06196;909911;909912)
@AddString(Libx2%,030;45042389-0;45042389-21)
@AddString(Libx2%,02173;708050-0;708050-10)
@AddString(Libx2%,06074;43878;43879)
@AddString(Libx2%,069;5091719-0;5091719-0)
@AddString(Libx2%,0871;80140;80144)
Texte für Registerkarte 4
@AddString(Libx3%,Gustav Mahler Klappe 13)
@AddString(Libx3%,Franz Liszt)
@AddString(Libx3%,Richard Wagner, Klappe526)
@AddString(Libx3%,Johann S. Bach, Klappe 23)
@AddString(Libx3%,Emmerich Kalman)
@AddString(Libx3%,Franz Lehar)
@AddString(Libx3%,Robert Stolz)
Return
EndProc
==== die Daten der einzelnen Registerkarten müssen so manipuliert werden, daß
immer nur die Daten einer Karte aktiv sind. Die anderen werden deaktiviert.
PROC Control_Tab1
Parameters OpCode% 0 = Elemente verstecken, 1 = Elemente anzeigen
anzeigen heißt, das Element auf richtige Größe setzen und enablen anzeigen hei t das Element auf richtige Gr” e setzen und enablen
verstecken heißt das Element auf Größe 0 setzen und disablen
If OpCode%
setwindowpos Libx0% = 30,60-280,64;0 Listbox mit Kundenname zeigen
setwindowpos IcHndl& = 0,0-0,0;0
Else
setwindowpos Libx0% = 0,0-0,0;0 Listboxgröße auf 0 setzen
EndIf
Enablewindow Libx0%,OpCode% Listbox anzeigen / verbergen
Return
ENDPROC
PROC Control_Tab2
Parameters OpCode%
If OpCode%
setze Größe von Text- und Editfeldern
Setwindowpos Text21% = 50, 85-60,20;0 Text: Straße
Setwindowpos Text22% = 50,110-60,20;0 Text Plz
Setwindowpos Text23% = 50,140-60,20;0 Text Ort
Setwindowpos Edit21% = 100,85-220,20;0 Edit Straße zeigen
Setwindowpos Edit22% = 100,110-60,20;0 Edit Plz zeigen
Setwindowpos Edit23% = 100,140-220,20;0 Edit Ort zeigen
Setwindowpos IcHndl& = 20,160-32,32;0
Else
setze Größe von Text- und Editfeldern auf 0
Setwindowpos Text21% = 0,0-0,0;0 Text: Straße
Setwindowpos Text22% = 0,0-0,0;0 Text Plz
Setwindowpos Text23% = 0,0-0,0;0 Text Ort
Setwindowpos Edit21% = 0,0-0,0;0 Edit Straße
Setwindowpos Edit22% = 0,0-0,0;0 Edit Plz
Setwindowpos Edit23% = 0,0-0,0;0 Edit Ort
EndIf
Enablewindow Edit21%,OpCode% Edit Stra e
Enablewindow Edit22%,OpCode% Edit Plz
Enablewindow Edit23%,OpCode% Edit Ort
Return
ENDPROC
PROC Control_Tab3 Telefonregister
Parameters OpCode%
If OpCode%
setze Größe von Text- und Editfeldern
Setwindowpos Text31%= 40, 85-60,20;0
Setwindowpos Text32%= 40,110-60,20;0
Setwindowpos Text33%= 40,140-60,20;0
Setwindowpos Edit31%= 100, 85-60,20;0
Setwindowpos Edit32%= 100,110-100,20;0
Setwindowpos Edit33%= 100,140-100,20;0
Setwindowpos IcHndl& =0, 0-0,0;0
Else
setze Größe von Text- und Editfeldern auf 0
Setwindowpos Text31% =0,0-0,0;0
Setwindowpos Text32% =0,0-0,0;0
Setwindowpos Text33% =0,0-0,0;0
Setwindowpos Edit31% =0,0-0,0;0
Setwindowpos Edit32% =0,0-0,0;0
Setwindowpos Edit33% =0,0-0,0;0
EndIf
Enablewindow Edit31%,OpCode%
Enablewindow Edit32%,OpCode%
Enablewindow Edit33%,OpCode%
ENDPROC
PROC Control_Tab4
Parameters OpCode%
If OpCode%
Setwindowpos Edit41%=40,80-200,20;0
setwindowpos IcHndl& =0, 0-0,0;0
Else
Setwindowpos Edit41%=0,0-0,0;0
EndIf
Enablewindow Edit41%,OpCode%
ENDPROC
PROC INITTAB
erstelle den Dialog, das TabControl und alle zugehörigen Elemente
die hier verwendete Struktur TC_ITEM ist in Win32.hlp beschrieben.
sie hat eine Länge von 28 Bytes
verwenden wir einen Font
Usefont Arial,15,0,0,0,0
Dialog und darinnen das TabControl und die beiden Buttons erstellen
Let TabDlg&=Createwindow(%Hwnd,Test mit TABs,240,100,350,280)
= = = = = Entweder/Oder für Profan Version 5 oder > 5 - Anfang
>>> hier 4 Zeilen aktivieren für Profan Version 5 <<<
String Text#,0 = SysTabControl32
String Text#,20 =
Let TabCntrl&=@CreateWindowEx($0,Text#,@Add(Text#,20),$50010000,8,20,329,
200,TabDlg&,100,%HInstance,0)
>>> ODER hier 2 Zeilen aktivieren für Profan Version 6.6 <<<
Let TabCntrl&=@control(SysTabControl32,,$50010000,8,20,329,
200,TabDlg&,100, %HInstance)
>>> Ende aktivieren <<<
= = = = = Entweder/Oder für Profan Version 5 oder > 5 - Ende
Font für Beschriftung der Tabs zuordnen
@SendMessage(TabCntrl&,$030,%Font,0)
Let ok%=createbutton(TabDlg&,Ende,150,225,80,20)
Let Abbruch%=createbutton(TabDlg&,Abbrechen,250,225,80,20)
Long ItText#,0 = 1 Maske. $1 für text, $2 für Icons
Long ItText#,12 = Text# Adresse des Textstrings
Tab-Items Einfügen (4 Registerkarten erstellen)
String Text#,0= Kunde / Firma Text für ersten Reiter
Long ItText#,20=0 0 = 1. Tabcontrol
@SendMessage(TabCntrl&,$1307,0,ItText#) fügt das 1. TabControl ein
String Text#,0= Anschrift Text für zweiten Reiter
Long ItText#,20=1 1 = 2. Tabcontrol
@SendMessage(TabCntrl&,$1307,1,ItText#) fügt das 2. TabControl ein
String Text#,0= Telefon / Fax Text für dritten Reiter
Long ItText#,20=2
@SendMessage(TabCntrl&,$1307,2,ItText#)
String Text#,0= Vertreter
Long ItText#,20=3
@SendMessage(TabCntrl&,$1307,3,ItText#)
erstellen der Texte und Editfelder für alle Registerkarten.
Für die erste Registerkarte wird eine Listbox verwendet
die hier erstellten Elemente sind noch nicht einer bestimmten Karte zugeordnet!
ein Icon soll auf einer Registerkarte angezeigt werden
Let IcHndl& = @CreateIcon(TabCntrl&,DRUCKER,20,160)
Let Text21% =Createtext(TabDlg&,Straße,0,0,1,0)
Let Text22% =Createtext(TabDlg&,Plz,0,0,1,0)
Let Text23% =Createtext(TabDlg&,Ort,0,0,1,0)
Let Edit21% =createedit(TabDlg&,,0,0,0,1)
Let Edit22% =createedit(TabDlg&,,0,0,0,1)
Let Edit23% =createedit(TabDlg&,,0,0,0,1)
Let Text31% =Createtext(TabDlg&,Vorwahl,0,0,1,0)
Let Text32% =Createtext(TabDlg&,Telefon,0,0,1,0)
Let Text33% =Createtext(TabDlg&,Fax,0,0,1,0)
(wahlweise) Font den Texten zuordnen
@SendMessage(Text21%,$030,%Font,0)
@SendMessage(Text22%,$030,%Font,0)
@SendMessage(Text23%,$030,%Font,0)
@SendMessage(Text31%,$030,%Font,0)
@SendMessage(Text32%,$030,%Font,0)
@SendMessage(Text33%,$030,%Font,0)
Let Libx0% =createListbox(TabDlg&,,0, 0,0,1)
Let Edit31% =createedit(TabDlg&,,0,0,0,1)
Let Edit32% =createedit(TabDlg&,,0,0,0,1)
Let Edit33% =createedit(TabDlg&,,0,0,0,1)
Let Edit41% =createedit(TabDlg&,,0,0,0,1)
Let Libx1% = @CreateListBox(%Hwnd,,0,0,0,0)
Let Libx2% = @CreateListBox(%Hwnd,,0,0,0,0)
Let Libx3% = @CreateListBox(%Hwnd,,0,0,0,0)
Texte setzen
Setze_Text
ENDPROC
PROC TABDIALOG
die angezeigten Daten können zwar geändert werden, aber es erfolgt kein Update in den
jeweiligen Listboxen (beim blättern auf einen anderen Kunden verschwinden die Änderungen).
Waitinput kann hier nicht angewendet werden, weil es auf einen Klick auf
das Register nicht reagiert.
daher wird hier auf @Sendmessage gewartet.
Whilenot AusLoop%
Let Akt% = @SendMessage(TabCntrl&,$130B,0,0)
IfNot equ(TabAktKz&,Akt%)
Let TabAktKz& = Akt%
If equ(TabAktKz&,0)
Control_Tab1 1
Control_Tab2 0
Control_Tab3 0
Control_Tab4 0
Elseif equ(TabAktKz&,1)
Control_Tab2 1
Control_Tab1 0
Control_Tab3 0
Control_Tab4 0
Elseif equ(TabAktKz&,2)
Control_Tab3 1
Control_Tab1 0
Control_Tab2 0
Control_Tab4 0
Elseif equ(TabAktKz&,3)
Control_Tab4 1
Control_Tab1 0
Control_Tab2 0
Control_Tab3 0
Endif
Elseif Getfocus(Libx0%)
Let Index% = @GetCursel(Libx0%)
SetText Edit21%,@Substr$(@GetString$(Libx1%,Index%),1,;)
SetText Edit22%,@Substr$(@GetString$(Libx1%,Index%),2,;)
SetText Edit23%,@Substr$(@GetString$(Libx1%,Index%),3,;)
SetText Edit31%,@Substr$(@GetString$(Libx2%,Index%),1,;)
SetText Edit32%,@Substr$(@GetString$(Libx2%,Index%),2,;)
SetText Edit33%,@Substr$(@GetString$(Libx2%,Index%),3,;)
SetText Edit41%,@GetString$(Libx3%,Index%)
@Setfocus(TabDlg&)
Elseif Getfocus(OK%)
Let PrtKz%=1
Let AusLoop%=1
Elseif Getfocus(Abbruch%)
Let AusLoop%=1
Endif
EndWhile
es erfolgt hier die Sicherung der Felder der zuletzt angezeigten Zeile.
das muß in separate Felder erfolgen, weil der Dialog zerstört wird.
Let Feld01$ = @GetString$(Libx0%,Index%)
Let Feld21$ = @GetText$(Edit21%)
Let Feld22$ = @GetText$(Edit22%)
Let Feld23$ = @GetText$(Edit23%)
Let Feld31$ = @GetText$(Edit31%)
Let Feld32$ = @GetText$(Edit32%)
Let Feld33$ = @GetText$(Edit33%)
Let Feld41$ = @GetText$(Edit41%)
@Destroywindow(TabDlg&)
ENDPROC
===============
Start Programm
===============
WindowTitle Test mit Tabcontrols
Window 0,0-600,350
settruecolor 1
cls
Dim ItText#,28
Dim Text#,30
INITTAB Tabcontrol und alle Tab-Elemente in den Tabs aufbauen
Control_Tab1 1 Erstes Tab und deren Elemente aktivieren. Andere deaktivieren
Control_Tab2 0
Control_Tab3 0
Control_Tab4 0
im Tabdialog erfolgt die normale Bearbeitung. Er wird mit Ende oder Abbruch
beendet.
TABDIALOG
wurde mit dem Ende-Button beendet so wird jetzt die zuletzt angezeigte Zeile angezeigt
If PrtKz%
Print Feld01$
Print
Print Feld21$
Print Feld22$
Print Feld23$
Print
Print Feld31$
Print Feld32$
Print Feld33$
Print
Print Feld41$
Print
Print === Ende. Mit Entertaste beenden. ===
< s=s4 href='./../../function-references/XProfan/waitinput/'>WaitInput
EndIf
Dispose Text#
Dispose ItText#
Fin
Salut Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 06.07.2007 ▲ |
| |
| | Christian Eichler | Hehe... non, den XProfan - Manager werde je Je ne runterladen. qui hat oui mind. 80 MB ! cela überlastet mon ISDN - Leitung malheureusement völlig ... (tja, si on am pays lebt et es ne...aucune DSL gibt ...)
quoi mich seulement wundert, ist, dass là gar pas sur qui WinAPI zugegriffen wird ! mais égal ...
qui Code funktionniert, merci ! paraphraser peux je ihn ensuite aussi encore |
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 07.07.2007 ▲ |
| |
| | RGH | Christian Eichler
quoi mich seulement wundert, ist, dass là gar pas sur qui WinAPI zugegriffen wird!
Zum Verwenden de pas direct dans XProfan/Profan integrierten Controls nécessaire on dans qui règle aucun API, là qui entsprechenden Funktionen bereits dans XProfan/Profan vorhanden sommes:
@Contrôle(...) @SendMessage(...)
avec cela devrait sich alle regulären Windows-Controls realisieren laisser.
Salut Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 07.07.2007 ▲ |
| |
| | Thomas Freier | Gerhards Beispiel ist qui Einstieg, cependant wunderte je mich, dass qui Laptoplüfer permanent ansprang. Taskmanager sagte : 100% PCU Auslastung. cela Problem bekam je pas dans den Griff. Beim Einsatz de Tabs sollte qui Aufstieg trop 7.0 (ca. 19€ +), besser 8.x (ca. 29€ +) folgen. |
| | | | |
| | RGH | Thomas Freier
Taskmanager sagte : 100% PCU Auslastung.
cela liegt daran, qui dans qui Tandis que-Boucle des Dialoges ne...aucune WaitInput ist. un Klick sur une Tab serait cela WaitInput nämlich pas sortir de. (cela geschieht chez Tabs sur Notify-Messages et qui volonté seulement ab Profan 7 berücksichtigt ... plan à cause de des là ensuite vorhandenen Tabcontrols.)
je serait naturellement aussi sur alle Fälle trop einem Update deviner ;) , mais un Sleep 1 dans qui Whileschleife serait qui Prozessorlast aussi sur un Normalmaß zurückschrauben. quand même bliebe es plutôt une Notlösung.
là mais aussi Sleep seulement avec Version 7 un Profan-Befehl wurde, doit il dans précédent Versionen per API défini volonté: KompilierenMarqueSéparationAnschließend peux qui Funktion Sleep(n%) verwandt volonté, wobei n% qui Zeit dans Millisekunden ist, qui cela Programme anhält et anderen Prozessen qui möglichkeit gibt, trop travailler. un Sleep(1) pour qui la ligne avec Tandis que sollte ensuite aider!
Salut Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 07.07.2007 ▲ |
| |
| | Christian Eichler | Avec l' Sleep(1) verwende je sowieso déjà ... mais je volonté ensuite la fois regarder, quoi sich faire peut ... je find là déjà une Solution, merci pour eure Aider
mfg Christian |
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 08.07.2007 ▲ |
| |
|
Zum QuelltextOptions du sujet | 7.648 Views |
Themeninformationencet Thema hat 4 participant: |