Italia
Foro

XProfan Editierbare Tabellenfelder

 

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 Aiuto vom XLehrbuch von Dietmar Horn auch schon kleinere Programme geschafft.

Nun soll ich per 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 circa 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 possibile 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 per die Implementierung der Userdaten in mein Programm vorschlagen.

Mfg Peter
 
25.08.2013  
 




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

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
25.08.2013  
 




Energizer
So erstmal danke per 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 per mich überzeugender, schon allein weil dass Programm ja nicht nur per mich ist, sondern auch per ein paar Schüler ;)

Wie kriege ich das jetzt mit der Tabelle so hin, ich werde aus der Aiuto 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 Aiuto die Funktion EditManual angeschaut. Jedoch ist das alles per mich absolutes Neuland, potuto mir das vielleicht jemand erklären ?

lg Energizer
 
25.09.2013  
 




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 circa die Pfeiltasten angesteuert und editiert werden.
Mit SelectColumnEdits(listview&,addr(text$)) können Spalten ausgeschlossen werden.
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)
'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.
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$="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.
KompilierenMarkierenSeparieren
Declare 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

 
Gruß Thomas
Windows XP SP2, XProfan X2
25.09.2013  
 




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 File?
 
26.09.2013  
 




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




Energizer
@Thomas Freier:
Danke per deine schnelle Aiuto! 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 ... per die nicht so mit Wissen bedachten Leute ;)

Vielen Dank Leute, Ihr helft einem Anfänger wie mir wirklich sehr! ;)
 
26.09.2013  
 




Thomas
Freier
Über die Funktionen der Listview.dll beim Anlegen der Leerzeilen z.B.:
KompilierenMarkierenSeparieren
Whileloop 5

    SetItem listview&,"","LK1",""

EndWhil

Ein Item mit SetItemText(H,T,S,L) .
Da XProfan 11.n verwendet wird, können auch die Funktionen zu den Gridboxen verwendet werden.
 
Gruß Thomas
Windows XP SP2, XProfan X2
26.09.2013  
 




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. per 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 ;)
 
26.09.2013  
 




Thomas
Freier
Dann scheidet die Variante 1 aus. Nur circa Variante 3 ist das possibile.
Einfach die Bedingungen abfragen, z.B.:
KompilierenMarkierenSeparieren
If %umessage=$1407

    IfNot (&uwParam=5) AND (&ulParam=11)'Doppellinksklick: edit Item

        EDIT &uwParam, &ulParam'Spaltenindex ,'Zeilenindex (nullbasierend)

    Endif

/a>

PS. Variante 2 geht naturalmente auch, wenn keine speziellen EDITs verwendet werden.
 
Gruß Thomas
Windows XP SP2, XProfan X2
26.09.2013  
 




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) editierenre>

hinter die 1 noch 2, 3 etc zu schreiben (mit kommas per die anderen spalten) hat aber
leider nicht geklappt

wie mach ich das jetzt? ;)
 
26.09.2013  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

12.864 Views

Untitledvor 0 min.
Thomas Zielinski20.12.2022
Walter08.05.2021
Normann Strübli24.03.2020
Jörg Sellmeyer12.06.2019
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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