Forum | | | | Energizer | So Leute, melde mich seit langem auch mal wieder!
Habe jetzt mal alles etwas für mich angepasst. Dies ist jetzt erstmal der Quelltext für die Tabelle, speichern/laden sowie die Berechnung sind in anderen Schnipseln ;) 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$="Kurs,HJ1,HJ2,HJ3,HJ4,Endpunktzahl"
SetColumnsFromMem(listview&,addr(text$),0)
SetFont listview&,Font&
SetDialogFont Font&
Whileloop 1
SetItem listview&,"Deutsch LK"
SetItem listview&,"Mathematik LK"
SetItem listview&,"Englisch LK"
SetItem listview&,"LK 4"
SetItem listview&,"LK 5"
SetItem listview&,"GK1"
SetItem listview&,"GK2"
SetItem listview&,"GK3"
SetItem listview&,"GK4"
SetItem listview&,"GK5"
SetItem listview&,"GK6"
SetItem listview&,"Optional:"
SetItem listview&,"ZusatzGK1"
SetItem listview&,"ZusatzGK2"
SetItem listview&,"ZusatzGK3"
EndWhile
SetColumnWidth(listview&,0,100)
SetColumnWidth(listview&,1,50)
SetColumnWidth(listview&,2,50)
SetColumnWidth(listview&,3,50)
SetColumnWidth(listview&,4,50)
SetColumnWidth(listview&,5,85)
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) OR (&uwParam=2) OR (&uwParam=3) OR (&uwParam=4)'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
Jetzt habe ich mehrere Fragen/Probleme.
1. Ich würde gerne die Zeile "optional" nicht editierfähig machen, geht das ? Sie muss ja auch nicht unbedingt dort in der Tabelle sein, soll halt nur falls jemand Zusatzkurse gewählt hat möglich sein, diese einzutragen!
2. Soll die Tabelle nach öffnen des Programms möglichst vollständig im Fenster zu sehen sein, so dass ich nicht scrollen muss.
2.1 Ist es möglich, dass sich die Tabelle bei Vergrößern des Programmfensters auch vergrößert?
3. Nachdem in den Spalten 2-5 die Noten eingetragen wurden, brauche ich eine Option, um 42 FELDER mit Noten auszuwählen, welche die Abiturnoten ergeben sollen.
3.1 Besonders nett/hilfreich wäre es, wenn gewisse Felder bereits vordefiniert und nicht änderbar wären (z.B. Z.1-3, sowie Z. 6) Dies würde die verpflichtend einzubringenden Noten kennzeichnen, falls jemand diese nicht kennt.
Vielleicht habt Ihr einige Ideen und Anregungen für mich ;)
LG und einen schönen 1. Advent noch, Peter |
| | | | |
| | Julian Schmidt | Energizer (01.12.13)
1. Ich würde gerne die Zeile "optional" nicht editierfähig machen, geht das ? Sie muss ja auch nicht unbedingt dort in der Tabelle sein, soll halt nur falls jemand Zusatzkurse gewählt hat möglich sein, diese einzutragen!
Natürlich geht das, du musst einfach nur verhindern das er für dieser Zeile die Edierfunktion aufruft, etwa so... KompilierenMarkierenSeparieren Energizer (01.12.13)
2. Soll die Tabelle nach öffnen des Programms möglichst vollständig im Fenster zu sehen sein, so dass ich nicht scrollen muss. 2.1 Ist es möglich, dass sich die Tabelle bei Vergrößern des Programmfensters auch vergrößert?
Das Skalieren des Listviews mit der Fenstergröße ist am einfachsten über %WM_Paint lösbar. Hier mal ein Beispiel mit einem mehrzeiligen Editierfeld. KompilierenMarkierenSeparieren Alternativ wäre das Skalieren auch per Subclassing möglich. Hier wäre beim ziehen des Fensterrahmens fast keine Verzögerung zu bemerken.
Energizer (01.12.13)
3. Nachdem in den Spalten 2-5 die Noten eingetragen wurden, brauche ich eine Option, um 42 FELDER mit Noten auszuwählen, welche die Abiturnoten ergeben sollen.
Schau dir hier zu mal die whileloop Schleife an...
Energizer (01.12.13)
3.1 Besonders nett/hilfreich wäre es, wenn gewisse Felder bereits vordefiniert und nicht änderbar wären (z.B. Z.1-3, sowie Z. 6) Dies würde die verpflichtend einzubringenden Noten kennzeichnen, falls jemand diese nicht kennt.
Was willst du genau?
Gruß
Julian |
| | | | |
| | Energizer | Bzgl. 1.)
Ich habe mehrer Versionen ausprobiert, mal ist gar nichts passiert, teils war zwar die Zeile optional nicht editierbar, dafür aber die komplette 1. Spalte und teils war nur die erste Spalte in Zeile 11 (die in der "optional" steht) gesperrt, die spalten dahinter aber trotzdem editierbar.
Nochmal zum Verständnis: Ich habe diese Tabelle. Dort soll die komplette erste Spalte gesperrt sein! Zusätzlich soll ebenfalls die GESAMTE Zeile 11 (bzw. 12), also die mit dem Text "Optional" gesperrt werden. Ist das realisierbar und wenn ja, an welcher Stelle muss ich da die Zeile einfügen?
2.
Tut mir Leid aber Ich habe hier überhaupt keine Ahnung, wie Ich das Verwenden soll. Ich habe versucht versch. Werte oder Schleifen zu übernehmen, hatte Fehlermeldungen und "nicht-mehr-beendbare" Programme, aber leider keine skalierte Tabelle Habe es nichtmal hinbekommen die Tabelle allgemein Größer zu machen, dass wenigstens wenn ich im Code ein größeres "Window" einstelle, die Tabelle dort komplett angepasst wäre
3. Ach ja, whileloop, gut da hätte ich selber drauf kommen können. Sry da stand ich einfach auf dem Schlauch ... manchmal sind es die simplen Dinge ;)
3.1 Folgendermaßen: Bei einer Minimalbelegung aller Fächer hätte man am Ende des Jahres 44 Semesternoten, aus denen sich die Endpunktzahl berechnen würde (11 Kurse * 4 Semester) (natürlich ohne Abiklausuren).
Davon können aber nur 42 Noten in den Endpunktestand auf dem Abiturzeugnis eingebracht werden, dass heißt 2 Noten fallen weg (logischerweise wählt man die schlechtesten). Belegt man jetzt noch Zusatzkurse, hat man noch mehr Noten zur Verfügung, d.h. man kann am Ende auch mehr schlechte Noten rausfallen lassen.
Jedoch gibt es einige Fächer, wie z.B. die Abiturprüfungsfächer, die zwingend in die Endzensur eingebracht werden müssen. Vermutlich kennt jedoch nicht jeder diese verpflichtend einzubringenden Kurse. Dazu wäre es nun sehr hilfreich, wenn unter den 42 auszuwählenden Semesternoten, bereits die markiert wären, die zwingend eingebracht werden müssen und diese nicht verändert (ausgeklickt) werden können.
War dies verständlich, sonst mach ich schnell nen Bild oder iwas um es zu verdeutlichen? |
| | | | |
| | Thomas Freier | Vielleicht hilft dieses Beispiel weiter: KompilierenMarkierenSeparieren $H windows.ph
$I Listview_Funktionen.inc
var lvdll&=usedll("Listview.dll")
Cls
~SetClassLong(%hwnd, ~GCL_STYLE, (~GetClassLong(%hwnd, ~GCL_STYLE)- ~CS_HREDRAW - ~CS_VREDRAW))
Var bb& = Create("Button",%hwnd,"Ende",0,0,0,0)
var listview&=CreateListView(%hwnd,%hinstance,0,$FFFFFF,-1,$31)
InsertColumn listview&,"1",80,0
InsertColumn listview&,"2",80,0
InsertColumn listview&,"3",80,0
InsertColumn listview&,"4",80,0
InsertColumn listview&,"5",80,0
InsertColumn listview&,"6",80,0
Whileloop 10
AddString(listview&,"Test|||||")
wend
var dlg&=%hwnd
Declare _dlgw&,_dlgh&, _odlgw&, _odlgh&, Ende%,bereich#,S&,Z&,y&
dim bereich#,320
_odlgw&=width(dlg&)
_odlgh&=height(dlg&)
setwindowpos bb&=(_odlgw&-70),5 - 60,20;0
ShowListView(listview&,10,30,(_odlgw&-20),(_odlgh&-40))
InitMessages(%hwnd)
WhileNot Ende%
WaitInput
case %key=4:Grid_do
case Getfocus(bb&): Ende%=1
y&=GetControlParas(bereich#)
S&=Long(bereich#,4)'Spalte
Z&=Long(bereich#,8)'Zeile
If y&=2'rechter Mausknopf wurde gedrück
Ifnot S&=1
IfNot Z&=3
EditManual(Listview&,S&,Z&,0)
EndIf
EndIf
EndIf
Wend
proc Grid_do
_dlgw&=width(dlg&)
_dlgh&=height(dlg&)
if ( ( _odlgw&<>_dlgw& ) or ( _odlgh&<>_dlgh& ) )
_odlgw&=_dlgw&
_odlgh&=_dlgh&
setwindowpos bb&=(_odlgw&-70),5 - 60,20;0
setwindowpos listview&=10,30 - (_odlgw&-20),(_odlgh&-40);0
endif
endproc
dispose bereich#
CloseMessages(%hwnd)
freedll lvdll&
|
| | | | |
| | Thomas Freier |
2. Soll die Tabelle nach öffnen des Programms möglichst vollständig im Fenster zu sehen sein, so dass ich nicht scrollen muss.
Da hilft nur Berechnen von Höhe und max. Breite des Zeilen- bzw. Headertextes : [...] dann den Font (Höhe,ggf. eng) und die erforderliche Spaltenbreite festlegen und testen. |
| | | | |
| | Energizer | vielen Dank Thomas!
Du hast mir sehr geholfen, habe jetzt schon fast alles bei mir erweitert, noch ein paar Zeilen aber das kann ich auch noch später machen!
Damit wären Problem 1 und 2 gelöst !
Jetzt müsste ich nur noch was für Punkt 3 überlegen . |
| | | | |
| | Thomas Freier | Ab XProfan 11 nehme ich die Gridboxfunktionen und wenn nötig die aus der Listview.dll. Zeilen vorgeben z.B.: KompilierenMarkierenSeparierenAddString(listview&,"Deutsch LK|fest|fest|fest|fest")
AddString(listview&,"Mathematik LK|fest|fest|fest|fest")
AddString(listview&,"Englisch LK|fest|fest|fest|fest")
AddString(listview&,"LK 4")
AddString(listview&,"LK 5")
AddString(listview&,"GK1|fest|fest|fest|fest")
AddString(listview&,"GK2")
AddString(listview&,"GK3")
AddString(listview&,"GK4")
AddString( listview&,"GK5")
AddString(listview&,"GK6")
AddString(listview&,"Optional:")
AddString(listview&,"ZusatzGK1")
AddString(listview&,"ZusatzGK2")
AddString(listview&,"ZusatzGK3")
Da vermutlich Zensuren, d.h., nur Zahlen und Trenner eingegeben werden sollen, müssten die Edit-Felder selbst erzeugt werden. Siehe Beispiel: Eigene_Eingaben. Weiterschalten per TAB ist vielleicht nicht unbedingt erforderlich. Beispiel für Edit mit Zahlen: [...] oder KompilierenMarkierenSeparierenDef GetSysColor(1) !"USER32","GetSysColor"
cls GetSysColor(15)
UseFont "Arial",15,0,0,0,0
SETDIALOGFONT 1
CreateText(%hwnd,"num. Eingabe max.: nn.nn",30,120,200,22)
var Ed&=Create("Edit",%hwnd,"",30,165,80,20)
@sendmessage(Ed&,$00C5,3,0)'und auf 3 Stellen (n.n) begrenzt
SetFocus(Ed&)
While 1
WaitInput
case %key=2 : BREAK
case GETFOCUS(Ed&): NUMWERT Ed&,1'Handle, Zeichen vorm Komma
EndWhile
End
Proc NUMWERT' AUSWERTUNG auf Zeichen und Stellen
Parameters ED.N&,ED.N%
var a$="abcdefghijklmnopqrstuvwxyz"
a$=a$+Upper$("abcdefghijklmnopqrstuvwxyz")
a$=a$+"!§$%&/()=?''*':;,-_²³{[]}\^°<>|++-"
var c$=""
WhileLoop len(a$)
c$ = MID$(a$,&Loop,1)' c$= der nte Stringteil
Settext ED.N&,@Translate$(gettext$(ED.N&),c$,"")' unzulässige löschen
Settext ED.N&,@Translate$(gettext$(ED.N&),"..",".")' doppelte löschen
EndWhile
a$=trim$(gettext$(ED.N&))
WhileLoop ED.N%+1
@Match$("~.", a$)
If (%MatchPos>0) AND (%MatchPos<ED.N%+1)
a$=" "+a$' Leerzeichen oder führende Null
EndIf
EndWhile
If len(a$)=ED.N%
case @IsKey(8):a$=left$(a$,len(a$))
casenot @IsKey(8):a$=left$(a$,ED.N%)+"."
EndIf
SetText ED.N&,a$
sendmessage(ED.N&,$00B1,len(gettext$(ED.N&)),-1)'Cursor ans Ende
EndProc
|
| | | | |
|
AntwortenThemenoptionen | 6.260 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |