Gridbox
-
-
-
Halo,
einfach den Namen der Message (LVM_GETCOLUMNORDERARRAY) in Google eingeben und das erste Ergebnis anklicken:
LVM_GETCOLUMNORDERARRAY message (Windows)
Ich fürchte allerdings, dass diese Message nicht die ist, die Du suchst.
Gruß
Roland -
Scheint die falsche Message zu sein.
Kommt auch nichts zurück.
In der VB-Ecke schicken die als 3 + 4 Parameter
ein Int-Array, also SizeOf(Array[]) und Array[]
Habs jetzt schon mit Array, Bereichen und Pointer
probiert.
Schade, daß Frank Abbing nicht mehr so oft da ist.
Der hatte das in seiner Listview.dll drin und könnte
mir weiterhelfen.
Brauche es aber für 64 Bit. -
So, die Anzahl Spalten bekomme ich schon mal :
Code
Alles anzeigen$H commctrl.ph $H Structs.ph $H Messages.ph Proc CountGridColumns Parameters Handle hGrid Declare Memory b Declare flag& Var TotalColumns& = 0 Struct LV_COLUMN = ~LV_COLUMN Dim b, LV_COLUMN b.mask& = ~LVCF_WIDTH Repeat Inc TotalColumns& flag& = SendMessage(hGrid, ~LVM_GETCOLUMN, TotalColumns&, b) Until flag& = 0 Dispose b Return TotalColumns& EndProc
Vielleicht kanns wer brauchen.
Es müssen halt die .ph - Dateien eingebunden werden.
Jetzt wühle ich mal noch die Strukturen durch.:-) -
So, hab was gefunden, die Spaltennamen
auszulesen. Klappt bei X2 bestens, stürzt
aber bei FreeProfan 64 Bit ab. Wenn ich die
Grenzen des Bereichs auf 8 Byte ändere,
wird nichts angezeigt :
Long Column#,0=~LVCF_TEXT
Long Column#,24=Addr(Text$)
Long Column#,32=160' s.o.
Vielleicht weiß Roland was man ändern muß.
Code
Alles anzeigen' Original - Code : Proc LV_GETCOLUMN Parameters Handle Hdl,Index& Declare Column#,Text$,Erfolg% Dim Column#,24 Text$ = MkStr$("\z",160)' hier anpassen, wenn die Texte länger sein sollten Long Column#,0=~LVCF_TEXT Long Column#,12=Addr(Text$) Long Column#,16=160m ' s.o. SendMessage(Hdl,~LVM_GETCOLUMN,Index&,Column#) Return Text$ EndProc
Normalerweise ist da ja nichts dabei, was in 64 Bit nicht geht.
Handle von Gridbox habe ich schon geändert. (Hdl& zu Handle Hdl).
Könnte höchstens an den Strukturen bzw. Werten , die in den
.ph Dateien definiert sind, liegen. -
Hallo,
das kann so unter 64 Bit ja nicht funktionieren, da dort Adressen ja 64 Bit = 8 Byte groß sind, du aber nur Platz für 32 Bit einräumst:
Hinzukommt, dass unter 64 Bit alle 8-Byte-Werte auch an 8-Byte-Grenzen ausgerichtet sind, was den Zugriff erheblich beschleunigt.
Um das Ganze müsste man sich nicht kümmern, wenn man anstelle einer einfachen Bereichsvariablen eine Struktur verwendet:Code
Alles anzeigenStruct LVCOLUMN = mask&, \ fmt&, \ cx&, \ pszText%%, \ cchTextMax&, \ iSubItem&, \ iImage&, \ iOrder& ' Original - Code : Proc LV_GETCOLUMN Parameters Handle Hdl,Index& Declare Column#,Text$,Erfolg% Dim Column#, LVCOLUMN Text$ = MkStr$("\z",160) ' hier anpassen, wenn die Texte länger sein sollten Column#.mask& = ~LVCF_TEXT Column#.pszText%% = Addr(Text$) Column#.cchTextMax& = 160 ' s.o. SendMessage(Hdl,~LVM_GETCOLUMN,Index&,Column#) Return Text$ EndProc
Das Element pszText%% ist unter 32 Bit nun 4 Byte groß und unter 64 Bit eben 8 Byte. Außerdem wird es unter 64 Bit automatisch korrekt ausgerichtet.
So müsste der Code also unter 32 und 64 Bit gleichermassen funktionieren. (Wenn Du nicht nur die Prozedur, sodern einen kompletten Beispielcode gepostet hättest, hätte ich es sogar testen können.)Gruß
Roland -
Danke Roland,
so funktioniert es. -
Wie bekomme ich die TABs weg ?
Zitatcolumn$ = "<th>" + LV_GETCOLUMN(dGrid, anz&) + "</th>"
'Print #1, "<th>" + LV_GETCOLUMN(dGrid, anz&) + "</th>";
Print #1, column$;
Hier wird das </th als TAB erkannt. Schalte ich mit
Set("Escape",0) aus, kommen lauter \z
Das Ganze läuft in einer Schleife ( Proc DruckeGrid) :HTML
Alles anzeigen$H commctrl.ph $H Structs.ph $H Messages.ph Declare Handle Grid, btn1, btn2 Declare csvdatei$, htmdatei$ csvdatei$ = $ProgDir + "data.csv" htmdatei$ = $ProgDir + "Grid.html" WindowTitle "HTML - Window" Window 800, 600 Proc CountGridColumns Parameters Handle hGrid Declare Memory b Declare flag& Var TotalColumns& = 0 Struct LV_COLUMN = ~LV_COLUMN Dim b, LV_COLUMN b.mask& = ~LVCF_WIDTH Repeat Inc TotalColumns& flag& = SendMessage(hGrid, ~LVM_GETCOLUMN, TotalColumns&, b) Until flag& = 0 Dispose b Return TotalColumns& EndProc Proc LV_GETCOLUMN Parameters Handle Hdl,Index& Declare Column#,Text$,Erfolg% Struct LVCOLUMN = mask&, fmt&, cx&, pszText%%, cchTextMax&, iSubItem&, iImage&, iOrder& Dim Column#, LVCOLUMN Text$ = MkStr$("\z",160) ' hier anpassen, wenn die Texte länger sein sollten Column#.mask& = ~LVCF_TEXT Column#.pszText%% = Addr(Text$) Column#.cchTextMax& = 160 ' s.o. SendMessage(Hdl,~LVM_GETCOLUMN,Index&,Column#) Return Text$ EndProc Proc DruckeGrid Parameters Handle dGrid Declare anz&, zeile$, cols&, column$, tmp$ cols& = CountGridColumns(dGrid) Declare Memory b Dim b, cols& * 4 [EMAIL=''@Set("Escape']'@Set("Escape[/EMAIL]", 0) Assign #1, csvdatei$ Rewrite #1 anz& = @GetCount(dGrid) WhileLoop 0, anz& - 1 zeile$ = @Translate$(GetString$(dGrid, &Loop), "|", ",") Print #1, zeile$ EndWhile Close #1 Assign #1, htmdatei$ Rewrite #1 Print #1, "<html>" Print #1, "<head><title>Tabelle</title></head>" Print #1, "<body>" Print #1, "<table border=" + Chr$(34) + "1" + Chr$(34) Print #1, "<table datasrc='#data'>" Print #1, "<thead>" Print #1, "<tr>"; anz& = 0 WhileLoop 1, Cols& column$ = "<th>" + LV_GETCOLUMN(dGrid, anz&) + "</th>" 'Print #1, "<th>" + LV_GETCOLUMN(dGrid, anz&) + "</th>"; Print #1, column$; Inc anz& EndWhile Print #1, "</tr>" Print #1, "</thead>" Print #1, "<tbody> <tr>" anz& = 0 WhileLoop 1, cols& column$ = "<td><span datafld='" + LV_GETCOLUMN(dGrid, anz&) + "'> </span></td>" If &LOOP = (cols& - 1) Print #1, column$ Else Print #1, column$; EndIf Inc anz& EndWhile Print #1, "</tbody>" Print #1, "</table>" Print #1, "<object ID=data classid=" + Chr$(34) + "clsid:333C7BC4-460F-11D0-BC04-0080C7055A83" + Chr$(34) + ">" Print #1, "<param nAme=" + Chr$(34) + "DataURL" + Chr$(34) + " value=" + Chr$(34) + csvdatei$ + Chr$(34) + ">" Print #1, "<param nAme=" + Chr$(34) + "UseHeader" + Chr$(34) + " value=" + Chr$(34) + "true" + Chr$(34) + ">" Print #1, "</object>" Print #1, "</body>" Print #1, "</html>" Close #1 Messagebox("Fertig !", "Info", 0) Dispose b [EMAIL=''@Set("Escape']'@Set("Escape[/EMAIL]", 1) EndProc btn1 = @Create("Button", %Hwnd, "Ende", 10, 10, 60, 25) btn2 = @Create("Button", %HWnd, "Drucke Grid", 100, 10, 100, 25) Grid = @Create("Gridbox", %HWnd, "Name;0;240;Vorname;0;100;Ort;0;240", 0,10,50,600,300) AddString(Grid, "Maier|Hugo|Hamburg") AddString(Grid, "Müller|Gerda|Köln") AddString(Grid, "Schneider|Klaus|München") AddString(Grid, "Zimmer|Rosi|Kiel") AddString(Grid, "Schmitt|Melani|Stuttgart") WhileNot @Clicked(btn1) WaitInput If @Clicked(btn2) DruckeGrid(Grid) EndIf EndWhile End
Hatte da was im Netz gefunden, womit man .csv Dateien
in Html Tabellen umwandeln kann :Zitat
<html>
<head><title>Reading values into a table</title></head>
<body>
<table border="1"
<table datasrc='#data'>
<thead>
<tr><th>Number</th><th>English</th><th>French</th><th>German</th></tr>
</thead>
<tbody> <tr>
<td><span datafld='number'> </span></td>
<td><span datafld='english'></span></td>
<td><span datafld='french'> </span></td>
<td><span datafld='german'> </span></td>
</tbody>
</table>
<object ID=data classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
<param nAme="DataURL" value="data.csv">
<param nAme="UseHeader" value="true">
</object>
</body>
</html>
-
*** gelöscht ***
-
Dachte immer, das wäre nur der Backslash (\), der als
Escape-Sequenz gilt. Ich hab ja den Slash (/).
Wie auch immer, im Moment bekomme ich es nicht
in den Griff. Bei doppelten /, also //, werden die auch
doppelt in die Datei geschrieben, was ja nicht Sinn
der Sache ist. Auch die Tabs bleiben.
Da muß ich mir noch was überlegen, aber trotzdem danke. -
Zitat von H.Brill;982281
Dachte immer, das wäre nur der Backslash (\), der als
Escape-Sequenz gilt. Ich hab ja den Slash (/).SORRY! Du hast recht! Das war ganz großer Blödsinn von mir. Man sollte so früh nicht posten, bevor der erste Kaffee seine Wirkung entfalten kann.
Gruß
Roland -
Ach, ich Trottel !
Ich hatte ja oben in der Structur 160 Zeichen
vorgegeben :
CodeText$ = MkStr$("\z",160) ' hier anpassen, wenn die Texte länger sein sollten Column#.mask& = ~LVCF_TEXT Column#.pszText%% = Addr(Text$) Column#.cchTextMax& = 160 ' s.o.
Da ist ja klar, daß ich den String auch trimmen muß.
Zitat
Rausgehen vor die Tür, eine rauchen und eine Flasche Bier
wirken Wunder. Ist mir schon früher so ergangen.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!