Deutsch
Forum

Listview1.pb Beispieldatei Darstellungsfehler

 

Fred
Matthiesen
Hallo und Guten Tag zusammen.
Ich begrüße erstmal alle Mitglieder.
Probiere die Listviewdll aus und mußte feststellen, das ich ein Problem nicht in den Griff bekomme.
Wenn die Beispieldatei gestartet wird, ist das Listview zunächst dunkel. Soweit ok. Jetzt lade ich die DBF-Datei und er zeigt oben links auch die Anzahl der eingelesenen Datensätze an. --- Aber---- das Listvier bleibt dunkel. Ein Linksklick mit der Maus: Fehlanzeige. Nun mit der rechten Maustaste: uiii, joh, das Listview ist sichtbar. Nun aber befinde ich mich schon im Editiermodus eines Items. Das ist für die Funktion korrekt.
Nun, ich erwarte, das nach dem Einlesen der DBF-Datei sich das Listview mit seinen Einträgen zeigt.
Welcher Befehl muß nach dem Einlesen erfolgen, damit sich das Listview zeigt.

Grüße
Fred
 
SUSE 10.3 / Listview.dll
03.11.2006  
 



[tb]minimalbeispiel[/tb]
PS: Die Dateiendung welche Du im Thema angibst könnte auf ein syntaktisches Problem hinweisen da XProfanQuelltexte eher mit .prf oder .xprf oder .inc enden - statt mit der PureBasicDateiendung .pb.
 
03.11.2006  
 




Frank
Abbing
Da das Problem mit Profan nicht besteht, schliesse ich einen Fehler der Listview.dll aus. Die (mit den Dll-Funktionen) erstellten Listviews sind ganz normale Windowscontrols (SYSLISTVIEW32), sodass die Dll hier auch keinen Fehler machen kann. Ich tippe da eher auf PBs Messagehandling und eine verschluckte WM_PAINT-Message. Im Zweifelsfall sollte darum das hier helfen:

SendMessage(listviewhandle&,4138,-1,0)

Musst noch nach PB umgesetzt werden. Bitte mal testen.
 
03.11.2006  
 



PB hat ein Messagehandling? oO
 
03.11.2006  
 



[quote:fbe1ea6c86=iF]PB hat ein Messagehandling? oO[/quote:fbe1ea6c86]Da braucht man keine on.dll
 
03.11.2006  
 




Frank
Abbing
Hab keine Ahnung von PB.
 
03.11.2006  
 




H.Brill
Hallo,
meinste PureBasic 4.0 ?
Die Beispielcodes sind noch für die Version 3.94 geschrieben.
Mit Version 4.0 brauchste z.B. das Frame3DGadget nicht mehr.
Hat damals mit der 3.94 nicht anders geklappt.

Hab dir mal das erste Beispiel auf Version 4.0 umgeschrieben.
Ist jetzt nicht ausführlich getestet, hoffe aber, daß es in allen Teilen
funktioniert.
KompilierenMarkierenSeparieren
IncludeFile "Listview.pb"
Global flen.l, lhandle.l, bereich.l, Quit.l
Global datei.s, datei2.s, db_datei.s
Global spalte1.s, spalte2.s, spalte3.s, sp1.s, sp2.s, sp3.s, selected.s
spalte1.s = "Artikel"
spalte2.s = "Menge"
spalte3.s = "Preis"
Dim Spalten.l(3)
Dim Sortspalten.l(3)
; hier wird die Sortierung der einzelnen Spalten festgelegt.
; 0 = nicht sortiert, 2 = Alphabetisch, 3 = Zahlenwert (nur ganze Zahlen)
Sortspalten(0) = 1
Sortspalten(1) = 2
Sortspalten(2) = 2
selected = Space(16384)
; wird global gebraucht, um beim Abfangen von Klicks im LV
; die zeilen hineinzuschreiben. (Siehe Anfang der Repeat - Schleife)
OpenWindow(0, 100, 100, 600, 460,"List - View",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)

If CreateGadgetList(WindowID(0))

    ButtonGadget(5, 5, 10, 70, 20, "Clear")
    ButtonGadget(6, 90, 10, 70, 20, "Set Zeile")
    ButtonGadget(7, 175, 10 ,70, 20, "Ende")
    ButtonGadget(8, 5, 40, 70, 20, "Load DBF")
    ButtonGadget(9, 90, 40, 70, 20, "Save to CSV")
    ButtonGadget(10,175,40, 70, 20, "Load CSV")
    ButtonGadget(11, 175, 70, 70, 20, "Save to DBF")
    TextGadget(20, 5, 70, 80, 25, "Anzahl Zeilen : ")
    TextGadget(21, 90, 70, 40, 25, "")
    TextGadget(22, 270, 10, 40, 20, "Artikel :")
    TextGadget(23, 270, 40, 40, 20, "Menge : ")
    TextGadget(24, 270, 70, 40, 20, "Preis : ")
    StringGadget(25, 320, 10, 240, 20, "")
    StringGadget(26, 320, 40, 40, 20, "")
    StringGadget(27, 320, 70, 80, 20, "")
    ;Frame3DGadget(40, 5, 100, 580, 350, "Listview", #PB_Frame3D_Double)

EndIf

fenster.l = WindowID(0)
; Listview initialisieren und erstellen
; hier mit 3 Spalten
lhandle = CreateListview(fenster, 0, 0, RGB(255, 255, 255), -1, $31)
IColumn(lhandle, @spalte1, 240, 0)
IColumn(lhandle, @spalte2, 80, 1)
IColumn(lhandle, @spalte3, 80, 1)
; Sortierung zulassen
ASortListview(lhandle, @Sortspalten(), 3)
; Editieren zulassen
EnableEdits(lhandle, 1)
; Messageverwaltung einschalten
InitMessages(fenster)
; Listview anzeigen
ShowListview(lhandle, 5, 120, 570, 320)
MessageRequester("Hallo !", "Rechtsklick" + Chr(13) + "zum Editieren " + Chr(13) + "benutzen !", #PB_MessageRequester_Ok)
Quit = 0

Repeat

    x.l = GetSelected(@selected, @y)

    If y = lhandle

        Gosub GetEintrag

    EndIf

    EventID.l = WaitWindowEvent()

    Select EventID

        Case #PB_Event_Gadget

        Select EventGadget()

            Case 5
            ; Clear

            If GetLines(lhandle) > 0

                r.l = DeleteAllItems(lhandle)
                SetGadgetText(21, "0")

            EndIf

            Case 6
            ; Set
            Gosub SetEintrag
            Case 7
            Quit = 1
            Case 8
            ; Load DBF
            datei2 = OpenFileRequester("DBF laden", "", "dBase 3 - Dateien |*.dbf", 0)

            If datei2 <> ""

                Gosub LoadDBF

            Else

                MessageRequester("Info", "Keine Datei gewählt !", #PB_MessageRequester_Ok)

            EndIf

            Case 9
            ; Save to CSV
            datei = SaveFileRequester("CSV speichern", "", "CSV - Dateien |*.csv", 0)

            If datei <> ""

                Gosub SaveToCSV

            Else

                MessageRequester("Info", "Keine Datei gewählt !", #PB_MessageRequester_Ok)

            EndIf

            Case 10
            datei = OpenFileRequester("CSV laden", "", "CSV - Dateien |*.CSV", 0)

            If datei <> ""

                Gosub LoadCSV

            Else

                MessageRequester("Info", "Keine Datei gewählt !", #PB_MessageRequester_Ok)

            EndIf

            Case 11
            db_datei = SaveFileRequester("DBF speichern", "", "dBase 3 - Dateien |*.DBF", 0)

            If db_datei <> ""

                Gosub SaveToDBF

            Else

                MessageRequester("Info", "Keine Datei gewählt !", #PB_MessageRequester_Ok)

            EndIf

        EndSelect

    EndSelect

Until Quit = 1 Or EventID = #PB_Event_CloseWindow

; Messageverwaltung wieder ausschalten
CloseMessages(fenster)
FreeMemory(0)
DestroyWindow_(fenster1)
CloseWindow(0)
CloseLibrary(#lvdll)
End
GetEintrag:
; 3 Spalten
y.l = GetSelectedLine(lhandle)
zeile.s = GetLineText(lhandle, y, @selected)
SetGadgetText(25, StringField(zeile, 1, Chr(9)))
SetGadgetText(26, StringField(zeile, 2, Chr(9)))
SetGadgetText(27, StringField(zeile, 3, Chr(9)))
Return
SetEintrag:
sp1 = GetGadgetText(25)
sp2 = GetGadgetText(26)
sp3 = GetGadgetText(27)
Spalten(0) = @sp1
Spalten(1) = @sp2
Spalten(2) = @sp3
SItem(lhandle, @Spalten(), 3)
anzahl.l = GetLines(lhandle)
SetGadgetText(21, Str(anzahl))
Return
SaveToCSV:
anzb.l = GetNeededMemory(lhandle, 1)
; voraussichtlicher Speicherverbrauch abfragen
bereich = AllocateMemory(anzb)
wbytes.l = ListviewToCsv(lhandle, bereich, 59, 0)
err.l = WriteFileQuick(@datei, bereich, 0, wbytes)

If err <> 0

    MessageRequester("Info !", Str(err) + "  Bytes" + Chr(13) + "in Datei " + datei + Chr(13) + "geschrieben !", #PB_MessageRequester_Ok)

Else

    MessageRequester("Fehler !", "Operation ist fehlgeschlagen !", #PB_MessageRequester_Ok)

EndIf

FreeMemory(0)
Return
LoadDBF:
dbspalten.l
dbzeilen.l

If OpenFile(1, datei2)

    flen = Lof(1)
    CloseFile(1)

EndIf

If flen > 0

    bereich = AllocateMemory(flen)

EndIf

err.l = ReadFileQuick(@datei2, bereich, 0, flen)

If err <> 0

    If GetLines(lhandle) > 0

        r.l = DeleteAllItems(lhandle)

    EndIf

    anz.l = DbfToCsv(bereich, flen, @dbspalten, @dbzeilen, 1)
    CsvToListview(lhandle, bereich, anz, 3)
    SetGadgetText(21, Str(dbzeilen))
    SetIndex(dbzeilen)

Else

    MessageRequester("Info", "Konnte Datei nicht laden !", #PB_MessageRequester_Ok)

EndIf

FreeMemory(0)
Return
LoadCSV:

If OpenFile(1, datei)

    flen = Lof(1)
    CloseFile(1)

EndIf

If flen > 0

    bereich = AllocateMemory(flen)

EndIf

err.l = ReadFileQuick(@datei, bereich, 0, flen)

If err <> 0

    If GetLines(lhandle) > 0

        r.l = DeleteAllItems(lhandle)

    EndIf

    err = CsvToListview(lhandle, bereich, flen, 3)
    anzahl.l = GetLines(lhandle)
    SetGadgetText(21, Str(anzahl))

Else

    MessageRequester("Info", "Konnte Datei nicht laden !", #PB_MessageRequester_Ok)

EndIf

FreeMemory(0)
Return
SaveToDBF:
nb.l = GetNeededMemory(lhandle, 1)
; verfügbarer Platz ermitteln und Speicher allocieren
;            ACHTUNG  !!!
; da GetNeededMemory() den dBase Header nicht berücksichtigt,
; muß diese Bytezahl manuell dazugerechnet werden.
; die Zahl 4260 ist die max. Zahl an Bytes, die ein
; DBF - Header enthalten kann.
; Der erste Teil des DBF Headers ist normalerweise 32 Byte
; groß. Da hier außer Bytes auch 2 Words und 1 Long gespeichert
; sind (rechne mal 4 Btes für jedes), mache ich mal 36 daraus.
; Dann kommen max. 128 Felder mit einer Feldbeschreibung von
; 32 Bytes + 1 Byte (0DH) als Ende - Markierung.
; somit wäre das 36 + (128 * 33) = 4260 .
; Also geizen wir nicht und machen 5000 Bytes dazu
; So ist auf jeden Fall genug Speicher reserviert.
nb = nb + 5000
bereich = AllocateMemory(nb)
wbytes.l = ListviewToDbf(lhandle, bereich, nb, 0)
err.l = WriteFileQuick(@db_datei, bereich, 0, wbytes)

If err <> 0

    MessageRequester("Info !", Str(err) + "  Bytes" + Chr(13) + "in Datei " + db_datei + Chr(13) + "geschrieben !", #PB_MessageRequester_OK)

Else

    MessageRequester("Fehler !", "Operation ist fehlgeschlagen !", #PB_MessageRequester_OK)

EndIf

FreeMemory(0)
Return
 
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.
03.11.2006  
 



Tut mir Leid, aber das ist kein PB Code, das ist Spaghetti

Wozu globale Variablen, wenn Du gar keine Proceduren verwendest. Und warum verwendest Du keine
 
03.11.2006  
 




H.Brill
Heut mach ichs auch anders. Die Beispielcodes hatte ich vor längerer Zeit
mal geschrieben. Wollte halt nur mal auf die Schnelle helfen, damit er es zum
Laufen bringt. Kann sich ja jeder selber zusammenbasteln.

Aber macht ja nix. Werde künftig nichts mehr schreiben.
 
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.
03.11.2006  
 



[quote:d7a00e7ae6]Aber macht ja nix. Werde künftig nichts mehr schreiben.[/quote:d7a00e7ae6]
Das darfst du nicht so verbissen sehen - hier wird manchesmal jemand platt gemacht, der nur helfen wollte - Im Grunde sind es alle liebe Menschen und weil es Menschen sind, haben sie auch ihre Macken nobody is perfect
Wenn dir also wieder mal nach Helfen zumute ist, dann tu es - mir hat hier auch schon mancher geholfen
 
03.11.2006  
 



[quote:d7dc5bb2e7=H.Brill]
Aber macht ja nix. Werde künftig nichts mehr schreiben.[/quote:d7dc5bb2e7]
Mußt doch nicht gleich die beleidigt Leberwurst spielen
Wollte nur vermeiden das diejenigen, die PB nicht kennen, einen schlechten Eindruck gewinnen
 
03.11.2006  
 




Frank
Abbing
[quote:d4d4597af7] Heut mach ichs auch anders. Die Beispielcodes hatte ich vor längerer Zeit
mal geschrieben. Wollte halt nur mal auf die Schnelle helfen, damit er es zum
Laufen bringt. Kann sich ja jeder selber zusammenbasteln.

Aber macht ja nix. Werde künftig nichts mehr schreiben. [/quote:d4d4597af7]
Heinz, seh das bitte nicht so eng. Der Thomas ist schnell mit ner grossen Klappe dabei, ist doch nix Neues.
Ich war sehr froh, dass du mir damals die Codes zur Verfügung gestellt hast. Und immerhin hast du es doch bestens zum Laufen gebracht.
Und für mich sieht der Code aufgeräumt aus - solltest mal meine Assemblercodes sehen.
 
03.11.2006  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.425 Betrachtungen

Unbenanntvor 0 min.
Peter Max Müller29.10.2017
Michael W.04.07.2016
Bernd Lies22.08.2013

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