Forum | | | | Energizer | Hallo liebes Form ;), bin nun auch neu dabei und an der Arbeit mit XProfan 11.2 Free (das ist doch die aktuellste oder?)
Habe schon ein wenig herumgestöbert und dank der Hilfe vom XLehrbuch von Dietmar Horn auch schon kleinere Programme geschafft.
Nun soll ich für eine zwölfte Klasse einen Abiturrechner programmieren. Dieser soll so funktionieren, dass man alle Fächer inkl. Punkte eingibt und der Abirechner anhand div. Vorgaben (Abiprüfungsfächer werden 5-fach gewertet, bei Wahl einer Zusatzprüfung 4-fach etc.) die Endpunktzahl errechnen.
Nun bin ich am Überlegen, wie man das mit der Eingabe am besten regeln sollte. Am liebsten wäre mir ja eigentlich eine Tabelle (ähnlich Excel) in die der Anwender einfach selber Werte eingebn kann. Da ich dafür direkt nichts gefunden habe, wollte ich das ganze über einen Umweg machen, indem der Anwender in vordefinierten CheckBoxen seine Fächer auswählt und diese dann auf die Tabelle übertragen werden. Ist es dabei möglich zu definieren, wie viele Checkboxen gewählt werden dürfen?
Vielleicht kann mir jemand von euch bei der Lösung dieses Problems helfen, bzw. mir sogar eine noch bessere Lösung für die Implementierung der Userdaten in mein Programm vorschlagen.
Mfg Peter |
| | | | |
| | Julian Schmidt | Energizer (25.08.13)
Nun bin ich am Überlegen, wie man das mit der Eingabe am besten regeln sollte. Am liebsten wäre mir ja eigentlich eine Tabelle (ähnlich Excel) in die der Anwender einfach selber Werte eingebn kann. Da ich dafür direkt nichts gefunden habe, wollte ich das ganze über einen Umweg machen, indem der Anwender in vordefinierten CheckBoxen seine Fächer auswählt und diese dann auf die Tabelle übertragen werden.
Nimm dafür doch einfach Choiceboxen/Auswahllisten. Und bau deine Tabelle z.B. ähnlich wie hier auf [...] . Für die Beschriftung kannst du z.B. CreateText verwenden.
Alternativ könntest du auch die Listview.dll[...] verwenden. Diese Tabelle würde dann der Optik und den Feeling von Excel näher kommen. |
| | | | |
| | Energizer | So erstmal danke für deinen Hinweis. Tut mir Leid, dass ich jetzt erst antworte hatte etwas um die Ohren ;) Hab jetzt auch schon beide Varianten probiert und etwas damit rumgespielt. Jedoch ist die Sache mit der Listview.dll für mich überzeugender, schon allein weil dass Programm ja nicht nur für mich ist, sondern auch für ein paar Schüler ;)
Wie kriege ich das jetzt mit der Tabelle so hin, ich werde aus der Hilfe leider nicht schlau ^^
Also ich hatte mir gedacht, dass meine Felder ja eigentlich alle per Hand eintragbar sein sollen, außer die letzte Spalte in der lediglich berechnet wird. Dazu hatte ich mir in der Listview.dll Hilfe die Funktion EditManual angeschaut. Jedoch ist das alles für mich absolutes Neuland, könnte mir das vielleicht jemand erklären ?
lg Energizer |
| | | | |
| | Thomas Freier | Beim Einsatz der Listview.dll gibt es drei Möglichkeiten die Items zu editieren. Mit EnableEdits(listview&,1+4) . Nach Aktivierung können alle Items über die Pfeiltasten angesteuert und editiert werden. Mit SelectColumnEdits(listview&,addr(text$)) können Spalten ausgeschlossen werden. KompilierenMarkierenSeparierenDeclare lvdll&,text$,x&,y&,z&,listview&
Def GetSysColor(1) !"USER32","GetSysColor"
var Font& = @CREATE("FONT","NEW TIMES ROMAN",14,0,0,0,0)
$I Listview_Funktionen.inc
lvdll&=usedll("Listview.dll")
SetTrueColor 1
Window 400,400
Cls GetSysColor(15)
listview&=CreateListView(%hwnd,%hinstance,0,GetSysColor(24),-1,$31)
'Spalten erstellen
text$="A,B,C"
SetColumnsFromMem(listview&,addr(text$),0)
SetFont listview&,Font&
SetDialogFont Font&
'Leerzeilen erstellen
Whileloop 5
SetItem listview&,"","",""
EndWhile
'Spaltenbreite
SetColumnWidth(listview&,0,100)
SetColumnWidth(listview&,1,100)
SetColumnWidth(listview&,2,100)
ShowListView(listview&,10,48,354,270)
InitMessages(%hwnd)
EnableEdits(listview&,1+4)'Item editierbar nach Doppellinksklick
UserMessages 16
While 1
waitinput
Case %UMessage = 16 : BREAK
Wend
messagebox("wird beendet","Programm",32)
setfocus(%hwnd)
DestroyWindow(%hwnd)
CloseMessages(%hwnd)
freedll lvdll&
End
Mit EditManual(listview&,&uwParam, &ulParam,0) wird nur im gewähltem Item ein Edit-Feld erstellt. KompilierenMarkierenSeparierenDeclare lvdll&,text$,x&,y&,z&,listview&
Def GetSysColor(1) !"USER32","GetSysColor"
var Font& = @CREATE("FONT","NEW TIMES ROMAN",14,0,0,0,0)
$I Listview_Funktionen.inc
lvdll&=usedll("Listview.dll")
SetTrueColor 1
Window 400,400
Cls GetSysColor(15)
listview&=CreateListView(%hwnd,%hinstance,0,GetSysColor(24),-1,$31)
text$="A,B,C"
SetColumnsFromMem(listview&,addr(text$),0)
SetFont listview&,Font&
SetDialogFont Font&
Whileloop 5
SetItem listview&,"","",""
EndWhile
SetColumnWidth(listview&,0,100)
SetColumnWidth(listview&,1,100)
SetColumnWidth(listview&,2,100)
ShowListView(listview&,10,48,354,270)
InitMessages(%hwnd)
usermessages $1407, 16
While 1
waitinput
Case %UMessage = 16 : BREAK
'nach Doppellinksklick Item,
If %umessage=$1407
If Getfocus(Listview&)
IF &uwParam=1'hier nur 2.Spalte(Index =1) editieren
EditManual(listview&,&uwParam, &ulParam,0)'Spaltenindex, Zeilenindex (nullbasierend)
Endif
EndIf
EndIf
Wend
messagebox("wird beendet","Programm",32)
CloseMessages(%hwnd)
freedll lvdll&
End
Dann noch die Möglichkeit alles selbst in die Hand nehmen um z.B. auch ein Edit mit besonderen Eigenschaften(z.B.:nur Zahlen), eine Auswahlbox, ein "DateEdit", usw., beim Item zu platzieren, und ggf. per TAB die Items zu wechseln. KompilierenMarkierenSeparierenDeclare bereich#,lvdll&,text$,x&,y&,z&,listview&
Def GetSysColor(1) !"USER32","GetSysColor"
Dim bereich#,256
var Font& = @CREATE("FONT","NEW TIMES ROMAN",14,0,0,0,0)
$I Listview_Funktionen.inc
lvdll&=usedll("Listview.dll")
SetTrueColor 1
Window 400,400
Cls GetSysColor(15)
listview&=CreateListView(%hwnd,%hinstance,0,GetSysColor(24),-1,$31)
text$="A,B,C"
SetColumnsFromMem(listview&,addr(text$),0)
SetFont listview&,Font&
SetDialogFont Font&
Whileloop 5
SetItem listview&,"","",""
EndWhile
SetColumnWidth(listview&,0,100)
SetColumnWidth(listview&,1,100)
SetColumnWidth(listview&,2,100)
ShowListView(listview&,10,48,354,270)
InitMessages(%hwnd)
usermessages $1407
AddHotKey 7001, 13, 0'Return
AddHotKey 7002, 9, 0'TAB Links
AddHotKey 7003, 9, 2'TAB Rechts
AddHotKey 7009, 27, 0
While 1
waitinput
Case %key=2:BREAK
case %umessage=$1407: EDIT &uwParam, &ulParam'Spaltenindex ,'Zeilenindex (nullbasierend)
Wend
CloseMessages(%hwnd)
freedll lvdll&
End
Proc Edit
Parameters spalte%,zeile%
Declare Ede_del2&
INHALT
@Create("Tooltip", %hWnd ,Ede_del2& ,"Esc=Abbruch, Wert mit Enter übernehmen.")
Setfocus(Ede_del2&)
While 1
WaitInput
case iskey(27):BREAK'Abbruch ESC
If MenuItem(7001) OR (%MouseKey=2)'Speichern: Enter oder rechte Maustaste gedrückt
SetText Listview&,Zeile%,Spalte%,trim$(GetText$(Ede_del2&))
BREAK
ElseIf MenuItem(7002)'TAB vor
SetText Listview&,Zeile%,Spalte%,trim$(GetText$(Ede_del2&))
case Spalte%<GetColumns(Listview&)-1: inc Spalte%
INHALT
ElseIf MenuItem(7003)'TAB rück
SetText Listview&,Zeile%,Spalte%,trim$(GetText$(Ede_del2&))
case Spalte%>0 : dec Spalte%
INHALT
EndIf
Ifnot getfocus(Ede_del2&)' Edit verliert den Focus, Eingabe verwefen
BREAK
EndIf
wend
DestroyWindow(Ede_del2&)
setfocus(%hwnd)
EndProc
Proc Inhalt
DestroyWindow(Ede_del2&)
Clear bereich#
Text$=trim$(GetText$(Listview&,Zeile%,Spalte%))'alter Inhalt
GetOwnControlParas(bereich#,Listview&,Spalte%,Zeile%)
var opx&=Long(bereich#,12)'X Offset
var opy&=Long(bereich#,16)'Y Offset
var opb&=Long(bereich#,20)'Breite
var oph&=Long(bereich#,24)'Höhe
Ede_del2&= @Create("Edit", Listview& ,Text$,opx&,opy&,opb&,oph&)
SetFont Ede_del2&,Font&
Setfocus(Ede_del2&)
SendString(Ede_del2&,"+({END})")'Text Markieren und Cursor ans Ende
Endproc
|
| | | | |
| | H.Brill | Hier mal ein kleines Beispiel von mir. Da kannst du dir ja was raussuchen: KompilierenMarkierenSeparieren $I Listview_Funktionen.inc
Declare hd%, ende%, lvdll&, Grid&, edits$
lvdll&=usedll("Listview.dll")
edits$ = "1111"' alle Spalten editierbar
hd% = @Create("Window",%HWnd,"Editieren mit rechter Maustaste",10,10,800, 300)
ende% = @Create("Button", hd%, "Ende", 20, 10, 120, 20)
Grid&=CreateListview(hd%,%hinstance,0,$ffffff,-1,$31)
' Spalten definieren
InsertColumn(Grid&, "Name", 220, 0)
InsertColumn(Grid&, "Wohnort", 150, 0)
InsertColumn(Grid&, "Straße", 150, 0)
InsertColumn(Grid&, "Telefon", 120, 0)
' zwei Einträge ins Listview
SetItem Grid&, "Maier", "Hamburg", "Hauptstr.", "4711"
SetItem Grid&, "Müller", "Köln", "Feldstr.", "4711"
' Listview anzeigen u. Optionen (EnableEdits) setzen
ShowListview(Grid&, 10, 40, 600, 200)
InitMessages(hd%)' nötig wegen EnableEdits
EnableEdits(Grid&, 1+8)
SelectColumnEdits(Grid&, Addr(edits$))
WhileNot @Clicked(ende%)
WaitInput
EndWhile
FreeDll lvdll&
End
|
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 25.09.2013 ▲ |
| |
| | Energizer | Bei der Zeile:
$I Listview_Funktionen.inc
Bringt er bei mir immer den Abbruch. Woher bekomme ich denn diese Datei? |
| | | | |
| | Thomas Freier | Die ist in der ListviewDll.zip . Je nach dem wie man arbeitet, muß, wenn sie in einem anderen Ordner abgespeichert, den Pfad zu ihr anpasst werden, wenn man das nicht im Programmeditor einstellen kann. Das Sicherste ist, sie mit der Listview.dll im Arbeitsordener abzuspeichern. |
| | | | |
| | Energizer | @Thomas Freier: Danke für deine schnelle Hilfe! Deine erste Möglichkeit gefällt mir sehr gut, da werde ich mal etwas weiter rumprobieren ;)
@H.Brill: Auch deine Variante ist ähnlich der von Thomas, ich denke mal da werde ich mir was zusammenschustern ;)
1. Finde die Variante von Thomas aufgrund der Funktion zum "sperren" einer Spalte sehr gut. Mit welchem Befehl bekomme ich hier nun einen Vorgabetext hinein? Hätte mir gedacht da Vorgaben wie "LK1" etc. reinzuschreiben ... für die nicht so mit Wissen bedachten Leute ;)
Vielen Dank Leute, Ihr helft einem Anfänger wie mir wirklich sehr! ;) |
| | | | |
| | Thomas Freier | Über die Funktionen der Listview.dll beim Anlegen der Leerzeilen z.B.: KompilierenMarkierenSeparieren Ein Item mit SetItemText(H,T,S,L) . Da XProfan 11.n verwendet wird, können auch die Funktionen zu den Gridboxen verwendet werden. |
| | | | |
| | Energizer | ok also Ich habe jetzt eine Tabelle mit mehreren Spalten und zeilen, so wie ich mir das ganze wünsche ;) auch mit vorschrift in den feldern.
jetzt würde ich nur gerne eine einzelne zeile und eine einzelne spalte "schreibgeschützt" machen
z.b. für spalte 6 und zeile 12
PS: außerdem würde ich gerne die tabelle größer machen, so dass ich alle felder gleichzeitig sehe, finde leider nur ne option um das fenster zu vergrößern?
lg ;) |
| | | | |
| | Thomas Freier | Dann scheidet die Variante 1 aus. Nur über Variante 3 ist das möglich. Einfach die Bedingungen abfragen, z.B.: KompilierenMarkierenSeparieren PS. Variante 2 geht natürlich auch, wenn keine speziellen EDITs verwendet werden. |
| | | | |
| | Energizer | gut also hab jetzt probiert, spalten/zeilen schon wieder drin udn so aber wie bekomme ich jetzt mehrer zeilen oder spalten "editierfähig" ?
hab jetzt versucht in folgende zeile: KompilierenMarkierenSeparieren
IF &uwParam=1'hier nur 2.Spalte(Index =1) editieren
hinter die 1 noch 2, 3 etc zu schreiben (mit kommas für die anderen spalten) hat aber leider nicht geklappt
wie mach ich das jetzt? ;) |
| | | | |
|
AntwortenThemenoptionen | 12.859 Betrachtungen |
ThemeninformationenDieses Thema hat 4 Teilnehmer: |