Deutsch
Forum

XProfan Editierbare Tabellenfelder

 
- Seite 1 -



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
 
25.08.2013  
 



 
- Seite 1 -



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! ;)
 
26.09.2013  
 




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

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

EndWhile


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




Thomas
Freier
Dann scheidet die Variante 1 aus. Nur über Variante 3 ist das möglich.
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

EndIf


PS. Variante 2 geht natürlich 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) 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? ;)
 
26.09.2013  
 



 
- Seite 2 -



Thomas
Freier
Die Abfrage über
KompilierenMarkierenSeparieren
IF (&uwParam=1) OR (&uwParam=2) OR (&uwParam=3)

oder
KompilierenMarkierenSeparieren
IF (&uwParam>0) AND (&uwParam<4)

oder
KompilierenMarkierenSeparieren
Minibeispiel Listview-/Gridboxgröße zum Fenster
KompilierenMarkierenSeparieren
Set("ErrorLevel", 2)
 $H Windows.ph
 $H messages.ph
DECLARE LV&,a$

SubClassproc

    IF SUBCLASSMESSAGE(%HWND,~WM_SIZING) or SUBCLASSMESSAGE(%HWND,~WM_SIZE)

        SETWINDOWPOS LV&=10, 30 - (Width(%HWND)-20), (Height(%HWND)-60)
        SET("WinProc",0)

    ENDIF

endproc

CLS
~SetClassLong(%hwnd, ~GCL_STYLE, (~GetClassLong(%hwnd, ~GCL_STYLE)- ~CS_HREDRAW - ~CS_VREDRAW))
a$ = "Links;0;180;Mitte;2;100;Rechts;1;80"
LV&=Create("GridBox", %HWND, a$, 3, 10, 30, (Width(%HWND)-20), (Height(%HWND)-60))
SUBCLASS %HWND,1

WHILE 1

    WAITINPUT

ENDWHILE

END
 
Gruß Thomas
Windows XP SP2, XProfan X2
26.09.2013  
 




Energizer
Also für die Abfrage fand ich deine erste Möglichkeit am besten, hat soweit auch geklappt doch wie mach ich das für Zeilen?

Und mit der Listboxgröße komm ich noch nicht ganz klar ...

Nach CLS fängst du ja an mit setclasslong

ab dem punkt war ja dein erstes programm ganz anders, da konnte ich dann alle tabellen ändern und jetzt steht ja hinter jedem spaltennamen zwei zahlen und die felder sind gar nicht editierbar?

ja sry ich weiß ist ne schwere geburt mit mir hier ;)
 
27.09.2013  
 




Thomas
Freier
Das war nur ein Beispiel mit der internen Gridboxfunktion wie sich die Gridbox einer Größenveränderung des Hauptfensters anpasst.
Um Beispiele zum "Abiturrechner" anzupassen, müßten mehr Informationen vorliegen, z.B.: Soll es ein in der Größe unveränderbares oder veränderbares Hauptfenster werden. Erforderliche Breite der Listbox , wenn nicht horizontal gescrollt werden soll. Wieviele Zeilen sind vorgesehen. Hat das Hauptfenster eine Toolbar und/oder Statuszeile?
 
Gruß Thomas
Windows XP SP2, XProfan X2
27.09.2013  
 




Energizer
Also das Hauptfenster kann ruhig in seiner größe veränderbar sein, dass wäre mir egal und manchmal wahrscheinlich auch sehr passend

wie breit die listbox sein soll kann ich eigentlich nicht sagen, da ich die genaue breite weiß also wäre ein anpassen an das fenster sehr gut ... sollte das nicht gehen könnte ich natürlich auch die längste kombination von buchstaben, zahlen etc. die für fächer in frage kommen eingeben und dir ne pixelzahl oder so nennen

zeilen sind es 15, spalten 6

wenn du mit toolbar oben die leiste meinst wo datei speichern etc kommen soll dann ja ;)

ich werde demnächst die einzelnen unterprogramme meines abirechners zusammenfügen und dann hier mal nen beispiel posten, vllt könnt ihr euch dann besser hinein versetzen.
 
27.09.2013  
 




H.Brill
Ich weiß jetzt nicht, ob ImportDLL schon in der Version 11.2 Free
verfügbar war. Wenn ja, kann man die DLL auch ohne Includedatei
(Listview_funktionen.inc) nutzen. Es fehlen halt nur die paar Procs,
die in der Include zusätzlich definiert sind. Aber die kann man ja
auch in seinen Quellcode kopieren.
Das sähe dann so aus :
KompilierenMarkierenSeparieren
Declare hd%, ende%, lvdll&, Grid&, edits$
Declare datensatz#
Declare sp1$, sp2$, sp3$, sp4$, Name$, Ort$, Strasse$, Telefon$
sp1$ = "Name"
sp2$ = "Wohnort"
sp3$ = "Strasse"
sp4$ = "Telefon"
Dim datensatz#, 20
lvdll& = Importdll("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
IColumn(Grid&, addr(sp1$), 220, 0)
IColumn(Grid&, addr(sp2$), 150, 0)
IColumn(Grid&, addr(sp3$), 150, 0)
IColumn(Grid&, addr(sp4$), 120, 0)
' zwei Einträge ins Listview
Name$    = "Maier"
Ort$     = "Hamburg"
Strasse$ = "Hauptstr"
Telefon$ = "4711"
Long datensatz#, 0  =  Addr(Name$)
Long datensatz#, 4  =  Addr(Ort$)
Long datensatz#, 8  =  Addr(Strasse$)
Long datensatz#, 12 =  Addr(Telefon$)
SItem(Grid&, datensatz#, 4)
Name$    = "Müller"
Ort$     = "Köln"
Strasse$ = "Rheinstr."
Telefon$ = "4712"
Long datensatz#, 0  =  Addr(Name$)
Long datensatz#, 4  =  Addr(Ort$)
Long datensatz#, 8  =  Addr(Strasse$)
Long datensatz#, 12 =  Addr(Telefon$)
SItem(Grid&, datensatz#, 4)
' 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

Dispose datensatz#
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.
28.09.2013  
 




Thomas
Freier

wenn du mit toolbar oben die leiste meinst wo datei speichern etc kommen soll dann ja ;)

So wie ich es sehe reicht ein Menü. Die Button einer Toolbar sind bei umfangreichen Menüs für schnelle Einklickaktionen von Vorteil.
Eine Statuszeile ist geeignet eine gewählte Datei/Informationen anzuzeigen, d.h., wenn nach einer Berechnug diese gespeichert und später wieder angezeigt werden soll.



Bei der Fächerauswahl würde ich diese für DRAG&DROP anbieten.
Beispiel
KompilierenMarkierenSeparieren
 $H Windows.ph
 $H messages.ph
 $I Listview_Funktionen.inc
Def GetSysColor(1) !"USER32","GetSysColor"
var Font& = @CREATE("FONT","NEW TIMES ROMAN",14,0,0,0,0)
Window 930,350
WindowTitle "Abiturrechner"
SetTrueColor 1
Cls GetSysColor(15)
SetDialogFont Font&
' Menü
PopUp "Programm"
AppendMenu 109,"Ende"
PopUp "Fächer"
AppendMenu 102,"übernehmen"
AppendMenu 103,"ausblenden"
AppendMenuBar 104,"Berechnen"
AppendMenuBar 105,"Drucken"
AppendMenuBar 106,"Eingaben löschen"
' Listview
Declare lvdll&,text$,x&,y&,z&,x%,y%,z%,listview&
lvdll&=usedll("Listview.dll")
listview&=CreateListView(%hwnd,%hinstance,0,GetSysColor(24),-1,$431)
'bei +400 kann der Anwender die Spaltenbreite nicht verändern
text$="Spalte 1,Spalte 2,Spalte 3,Spalte 4,Spalte 5,Spalte 6"
SetColumnsFromMem(listview&,addr(text$),0)
SetFont listview&,Font&

Whileloop 15

    SetItem listview&,str$(&loop),"","","","",""

EndWhile

SetColumnWidth(listview&,0,80)
SetColumnWidth(listview&,1,240)
SetColumnWidth(listview&,2,140)
SetColumnWidth(listview&,3,140)
SetColumnWidth(listview&,4,140)
SetColumnWidth(listview&,5,140)
ShowListView(listview&,10,10,900,270)
' damit beim Fensterverändern die Anzeige ruhiger bleibt:
~SetClassLong(%hwnd, ~GCL_STYLE, (~GetClassLong(%hwnd, ~GCL_STYLE)- ~CS_HREDRAW - ~CS_VREDRAW))
' Liste mit den Fächern
Declare Fach&, LV_F&
LV_F&=CreateListView(%hwnd,%hinstance,0,GetSysColor(24),-1,$431)
text$="Fach"
SetColumnsFromMem(LV_F&,addr(text$),0)
SetColumnWidth(LV_F&,0,80)
SetFont LV_F&,Font&
AddString(LV_F&,"Fach 1")
AddString(LV_F&,"Fach 2")
AddString(LV_F&,"Fach 3")
EnableDragDrop(listview&,1+16)
EnableDragDrop(LV_F&,1+16)

Proc FAECHEROPEN

    ShowListView(listview&,10,10,(Width(%HWND)-160),270)
    ShowListView(LV_F&,(Width(%HWND)-140),10,100,100)

EndProc

Proc FAECHERCLOSE

    ShowListView(LV_F&,0,0,0,0)
    ShowListView(listview&,10,10,(Width(%HWND)-20),270)

EndProc

' ermöglicht Aktionen beim Fensterverändern (durchbricht Waitinput)
SUBCLASS %HWND,1
InitMessages(%hwnd)
usermessages $1407, 16

While 1

    waitinput
    Case (%UMessage = 16) OR MenuItem(109) : BREAK

    If %umessage=$1407'nach Doppellinksklick

        If Getfocus(Listview&)

            IF (&uwParam=2) OR (&uwParam=3) OR (&uwParam=4)

                EditManual(listview&,&uwParam, &ulParam,0)'Spaltenindex, Zeilenindex (nullbasierend)

            Endif

        EndIf

    ElseIf MenuItem(102)

        FAECHEROPEN

    ElseIf MenuItem(103)

        FAECHERCLOSE

    ElseIf MenuItem(104)

        messagebox("berechnet was auch immer","Programm",32)

    ElseIf MenuItem(105)

        messagebox("druckt die Tabelle","Programm",32)

    ElseIf MenuItem(106)'leeres Listview

        DeleteAllItems(Listview&)

        Whileloop 15

            SetItem listview&,str$(&loop),"","","","",""

        EndWhile

        DeleteAllItems(LV_F&)
        AddString(LV_F&,"Fach 1")
        AddString(LV_F&,"Fach 2")
        AddString(LV_F&,"Fach 3")

    ElseIf MenuItem(15000)' Fenstergröße wurde verändet. Höhe soll bleiben

        x%=%WinLeft
        y%=%WinTop
        z%=Width(%HWND)+8
        SETWINDOWPOS %hwnd=x%,y% - z%,(270+80);0

    endif

Wend

messagebox("wird beendet","Programm",32)
CloseMessages(%hwnd)
freedll lvdll&
End

SubClassproc

    IF SUBCLASSMESSAGE(%HWND,~WM_SIZING) or SUBCLASSMESSAGE(%HWND,~WM_SIZE)

        case ~WM_LBUTTONUP: SetMenuItem 15000' für Aktionen nach der Fenstergrößenänderung
        SETWINDOWPOS Listview&=10, 10 - (Width(%HWND)-22), 270
        SET("WinProc",0)

    ENDIF

endproc


Soll DROP nur nach einer Spalte der Hauptliste zulässig sein, muß dieses über GetDragDropParas(B) gesteuert werden. Auch, wenn in der Fächertabelle die Faktoren zu den Fächern hinterlegt sind und diese in der Hauptliste übernommen werden sollen.

19 kB
Hochgeladen:28.09.2013
Ladeanzahl148
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
28.09.2013  
 




Energizer
So erstmal danke für eure Hilfe!

Bin jetzt erstmal bis 10.10 im Urlaub, werde mich dann wieder bei euch melden

lg ;)
 
28.09.2013  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

12.835 Betrachtungen

Unbenanntvor 0 min.
Thomas Zielinski20.12.2022
Walter08.05.2021
Normann Strübli24.03.2020
Jörg Sellmeyer12.06.2019
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