Forum | | | | - page 1 - |
| Fred Matthiesen | allô et Guten journée zusammen. je begrüße erstmal alle Mitglieder. Probiere qui Listviewdll aus et mußte feststellen, le moi un Problem pas dans den Griff bekomme. si qui Beispieldatei gestartet wird, ist cela Listview zunächst dunkel. Soweit ok. maintenant lade je qui DBF-Dossier et il zeigt dessus à gauche aussi le nombre qui eingelesenen Datensätze à. --- mais---- cela Listvier bleibt dunkel. un Linksklick avec qui souris: Fehlanzeige. eh bien avec qui rechten Bouton de la souris: uiii, joh, cela Listview ist sichtbar. eh bien mais befinde je mich déjà im Editiermodus eines Items. c'est pour qui Funktion korrekt. eh bien, je erwarte, cela pour dem Einlesen qui DBF-Dossier sich cela Listview avec seinen Entrées zeigt. quel Befehl doit pour dem Einlesen avoir lieu, avec cela sich cela Listview zeigt.
Grüße Fred |
| | | | |
| | | | | - page 1 - |
| H.Brill | Salut, meinste PureBasic 4.0 ? qui Beispielcodes sommes encore pour qui Version 3.94 geschrieben. avec Version 4.0 brauchste z.B. cela Frame3DGadget pas plus. Hat autrefois avec qui 3.94 pas anders geklappt.
Hab dir la fois cela erste Beispiel sur Version 4.0 umgeschrieben. Ist maintenant pas en détails getestet, hoffe mais, qui es dans allen partager funktioniert. KompilierenMarqueSéparationIncludeFile "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)
Retour
|
| | | 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, mais c'est ne...aucune PB Code, c'est Spaghetti
Wozu globale Variablen, si Du gar aucun Proceduren verwendest. et pourquoi verwendest Du aucun |
| | | | |
| | H.Brill | Heut mach ego aussi anders. qui Beispielcodes J'ai eu avant längerer Zeit la fois geschrieben. voulais arrêt seulement la fois sur qui Schnelle aider, avec cela il es zum courir bringt. peux sich oui chacun selber zusammenbasteln.
mais pouvoir oui nix. Werde künftig rien plus écrivons. |
| | | 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-part:d7a00e7ae6]mais pouvoir oui nix. Werde künftig rien plus écrivons.[/quote-part:d7a00e7ae6] cela darfst du pas so verbissen voyons - ici wird manchesmal quelqu'un platt gemacht, qui seulement aider voulais - Im Grunde sommes es alle liebe les gens et weil es les gens sommes, est-ce que vous avez aussi ses Macken nobody is perfect si dir alors wieder la fois pour aider zumute ist, ensuite tu es - mir hat ici aussi déjà mancher geholfen |
| | | | |
| | | [quote-part:d7dc5bb2e7=H.Brill] mais pouvoir oui nix. Werde künftig rien plus écrivons.[/quote-part:d7dc5bb2e7] dois doch pas juste qui beleidigt paté de foie spielen voulais seulement vermeiden cela diejenigen, qui PB pas connaître, une schlechten impression gewinnen |
| | | | |
| | Frank Abbing | [quote-part:d4d4597af7] Heut mach ego aussi anders. qui Beispielcodes J'ai eu avant längerer Zeit la fois geschrieben. voulais arrêt seulement la fois sur qui Schnelle aider, avec cela il es zum courir bringt. peux sich oui chacun selber zusammenbasteln.
mais pouvoir oui nix. Werde künftig rien plus écrivons. [/quote-part:d4d4597af7] Heinz, seh cela s'il te plaît pas so eng. qui Thomas ist vite avec ner grossen Klappe dabei, mais est nix Neues. j'étais très froh, dass du mir autrefois qui Codes zur Disposition gestellt la hâte. et immerhin la hâte du es doch bestens zum courir gebracht. et pour mich sieht qui Code aufgeräumt aus - devrait la fois mon Assemblercodes voyons. |
| | | | |
| | | | - page 2 - |
| | | Salut, irgendwie merke je doch le moi ici im falschen Forum suis. je hatte angenommen, Frank hätte den Beispielcode erstellt. Daher erstmal merci à Heinz pour sa travail, si bien que on zumindest une ersten impression sur den Einsatz qui Listview.dll gewinnt. si Spaghetti-Code ou bien pas, ist glaube je, vollkommen uninteressant. le principal on hat erstmal un Beispiel et erspart sich dadurch Zeit. comment on selber programmiert liegt à einem selber. je selber avec den den Gosub´s grand geworden. cela étions encore qui Zeiten de Commondire C64 et Schneider CPC. là kannte on prozedurale Programmation encore pas. après kam qui objektorientierte Programmation en supplément qui sich im Extrem dans C++ wiederfindet. Comme je le disais, es venez toujours puis à, quand on avec Purebasic anfängt et aus quel Programiererlinie on vient. c'est pourquoi sollte on pas rouspéter mais überhaupt froh son, cela quelqu'un einem anderen weiterhilft. aussi si einer z.B. pas richtig écrivons peux sur Grund irgendwelcher Erkrankungen ou bien Mängel, so ist überhaupt anzuerkennen, cela so quelqu'un, trotz des Wissens cet Mangels dans un Forum écrit et sogar versucht un eigenes Forum aufzubauen.Hut ab. si ensuite bestimmte gens sich ensuite par-dessus lustig faire, ist cela äußert tant pis. Ok. on sollte ici mais pas cela Thema plus behandeln mais und dir ici um un Problem.
cela konnte je zwischenzeitlich selber lösen. Heinz hat cela Framegadget herausgenommen, dadurch venez es maintenant zur sofortigen Anzeige des vider Gadgets. quoi à cette Stelle peut-être. gar pas wünschenswert wäre. cela Gadget sollte sich pour dem inviter qui données montrer. oui c'est ca cet Problem hatte Heinz aussi im Purebasicforum posté. qui Solution habe je réellement ici im Forum trouvé. Pour dem inviter qui données doit cet la ligne avoir lieu: SendMessage_(lhandle,4138,-1,0) ;LVM_UPDATE ensuite erscheinen qui données. jusqu'à dahin bleibt cela Listview-Gadget blass. je findet, so ist cela Verhalten des Gadgets korrekt. Es soll sich oui seulement montrer, si données vorhanden sommes.
merci pour qui Posts, avec cela sollte cet Thema abgeschlossen son. |
| | | | |
| | | eh bien - und dir aussi encore anders!
Du könntest sur cela framegadged (je ne sais pas wirklich quoi c'est comme non-pbler) verzichten indem Du dem LV auparavant un sendmessage (listviewhandle,11,0,0) sendest, (schaltet ab cela es sich zeichnet) et après un sendmessage (listviewhandle,11,1,0).
avec einem invalidaterect (listviewhandle,0,0), redrawwindow (listviewhandle) sollte es ensuite getan son.
Somit devrait sogar cela Hinzufügen qui Elemente deutlich plus rapide ablaufen. |
| | | | |
| | Frank Abbing | c'est unnötig, iF. Listview.dlls CreateListview() sendet bereits Message 11 (0) et ShowListview() wird qui Message wieder aufgehoben (1). Alle Funktionen, qui entre liegen, peut cela Listview aufbauen, sans dass es ständig aktualisiert wird. avec LVM_UPDATE (4138) wird un Listview gezwungen, sich einmal récente aufzubauen et c'est aussi oui c'est ca qui pour vorgesehene Message. et sonst aucun.
je melde mich domain soir, Fred. |
| | | | |
| | | bien konnte je oui pas savons.
[quote-part:46fe2d090d]et sonst aucun.[/quote-part:46fe2d090d] bien sûr allez redrawwindow. |
| | | | |
| | Fred Matthiesen | Anstatt den SendMessage-Befehl trop prendre peux on folgenden Befehl benutzen: KompilierenMarqueSéparation Hat qui gleiche Wirkung et ist justement pour Débutant verständlicher, weil il cette Befehl dans qui Aider nachlesen peux |
| | | | |
| | Frank Abbing | qui benutzt qui Message aussi. Ab qui prochain Version sommes alle Funktionen dans qui Inc-Dossier fest dans qui Dll eigebaut (aussi avec Beschreibung) et stehen là aussi anderen Sprachen zur Disposition. |
| | | | |
|
répondreOptions du sujet | 2.349 Views |
Themeninformationencet Thema hat 6 participant: |