Deutsch
Forum

XProfan Editierbare Tabellenfelder

Mal wieder Ich ;)

 

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 ;)
KompilierenMarkierenSeparieren
Declare 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
 
01.12.2013  
 




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
Case &ulParam<>11 : EditManual(listview&,&uwParam, &ulParam,0)

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
CLS
Set("AutoPaint", 0)
Var edit&=Create("MultiEdit",%hwnd,"Ich bin skallierbar",10,10,width(%hwnd)-20,height(%hwnd)-20)

While 1

    WaitInput

    If %wmPaint

        SetWindowPos edit&=10,10 - width(%hwnd)-20,height(%hwnd)-20

    EndIf

EndWhile


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
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
01.12.2013  
 




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?
 
03.12.2013  
 




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&
 
Gruß Thomas
Windows XP SP2, XProfan X2
03.12.2013  
 




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.
 
Gruß Thomas
Windows XP SP2, XProfan X2
03.12.2013  
 




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 .
 
04.12.2013  
 




Thomas
Freier
Ab XProfan 11 nehme ich die Gridboxfunktionen und wenn nötig die aus der Listview.dll. Zeilen vorgeben z.B.:
KompilierenMarkierenSeparieren
AddString(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
KompilierenMarkierenSeparieren
Def 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

 
Gruß Thomas
Windows XP SP2, XProfan X2
04.12.2013  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

6.266 Betrachtungen

Unbenanntvor 0 min.
E.T.02.01.2016
RICOSCH12.10.2014
Georg Teles27.08.2014
Andreas Koch15.08.2014
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie