Forum | | | | 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 |
| | | | |
| | | [tb]minimalbeispiel[/tb] PS: qui Dateiendung quelle Du im Thema angibst pourrait sur un syntaktisches Problem hinweisen là XProfanQuelltexte plutôt avec .prf ou bien .xprf ou bien .inc enden - statt avec qui PureBasicDateiendung .pb. |
| | | | |
| | Frank Abbing | là cela Problem avec Profan pas besteht, schliesse je une faute qui Listview.dll aus. qui (avec den Dll-Funktionen) erstellten Listviews sommes entier normale Windowscontrols (SYSLISTVIEW32), sodass qui Dll ici aussi keinen faute faire peux. je tippe là plutôt sur PBs Messagehandling et une verschluckte WM_PAINT-Message. Im Zweifelsfall sollte tout autor que voici aider:
SendMessage(listviewhandle&,4138,-1,0)
Musst encore pour PB mise en œuvre volonté. s'il te plaît la fois testen. |
| | | | |
| | | PB hat un Messagehandling? oO |
| | | | |
| | | [quote-part:fbe1ea6c86=iF]PB hat un Messagehandling? oO[/quote-part:fbe1ea6c86]là braucht on aucun on.dll |
| | | | |
| | Frank Abbing | Hab je n'en sais rien de PB. |
| | | | |
| | 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. |
| | | | |
|
répondreOptions du sujet | 2.399 Views |
Themeninformationencet Thema hat 6 participant: |