| |
|
|
- Page 1 - |
|
![Normann Strübli: 07.03.2005](.././../../i/a/12207944441fcd654bf55d.gif) Normann Strübli | Ciao,
von mir war in letzter Zeit wieder wenig zu lesen da ich mich mehr um mein Hardware-Projekt gekümmert habe. Aber tut ja nix zur Sache :roll:
Außerdem hab ich angefangen mit MASM angefangen damit Io l' genialen XPIA endlich vernünftig nutzen kann ![](.././../../i/s/__upl_ext_1111498489.gif) Habe mir das Buch Assembler - Grundlagen der Programmazione von Marcus Roming und Joachin Rhode gekauft was meiner Meinung nach per Assembler Anfänger bestens geeignet ist. Sicherlich gibt es im Internet auch viele Anleitungen, aber ein klein wenig Werbung musste an diese Stelle mal sein da mir das Buch so gut gefällt ![](.././../../i/s/icon_redface.gif)
Und Frank hat recht wenn er sagt Assembler ist generell gar nicht so schwer - also ran! Es lohnt sich.
So NU aber endlich meine eigentliche Frage: Ich möchte bei den Spalten gerne eine Sortierung nach eigenen Kriterien durchführen lassen. Ich möchte also nach mehreren Eigenschaften gleichzeitig sortieren lassen - z.B. nach Produktgruppe UND Farbe. Dazu habe ich einfach eine Spalte erstellt mit dem Inhalt R123 als Beispiel. R steht per die Farbe Rot und 123 halt per was anderes. Wenn ich diese Spalte nun Sortiere lasse habe ich mein Ziel schon erreicht, allerdings soll der Anwender von diese Spalte ja nix sehen - wär ja blöd. Einfach die Spaltenbreite auf 0 zu setzen bringt ja nix da man sie ja wieder più ampia machen kann. Kann man also bestimmte spalten in der Breite irgendwie fixieren? Wenn das auf normalen wege nicht geht siehst Du Frank da eine Chance das in Deine Dll irgenwie mit aufzunehmen? Dann potuto man auch andere Informationen in der Listview verstecken z.B. eindeutige ID-Nummern die der Anwender nicht sieht man aber trotzdem auslesen kann.
gruß Normann |
|
|
| |
|
|
|
| |
|
- Page 1 - |
|
![Frank Abbing: 08.03.2005](.././../../i/a/noavatar.gif) Frank Abbing | Hallo Normann und iF,
[quote:a341181023]Kann man einer solchen Listview nicht sagen das die Spaltenbreiten nicht durch den Anwender veränderbar sind? [/quote:a341181023] Das geht meines Wissens nach nicht. Aber es gibt dennoch eine Methode, die du in deine Profan-Waitinput-Schleife packen kannst. Mein Testcode Gebührenverwaltung_Stammtisch.prf macht das ja auch so: KompilierenMarkierenSeparierenx&=0
y&=GetColumnWidth(listview&,0)
Case y&<>130:x&=1
y&=GetColumnWidth(listview&,1)
Case y&<>110:x&=1
y&=GetColumnWidth(listview&,2)
Case y&<>110:x&=1
y&=GetColumnWidth(listview&,3)
Case y&<>110:x&=1
y&=GetColumnWidth(listview&,4)
Case y&<>110:x&=1
y&=GetColumnWidth(listview&,5)
Case y&<>110:x&=1
If x&
*** Wenn ja, dann "linker Mausknopf losgelassen" simulieren und ursprüngliche
*** Spaltenbreiten wieder herstellen.
mouse_event(4,0,0,0,0)
SetColumnWidth(listview&,0,130)
SetColumnWidth(listview&,1,110)
SetColumnWidth(listview&,2,110)
SetColumnWidth(listview&,3,110)
SetColumnWidth(listview&,4,110)
SetColumnWidth(listview&,5,110)
EndIf
Da es bei dir nur um eine Zeile geht, ist der Aufwand ja noch geringer ![](.././../../i/s/__upl_ext_1111498539.gif) Übrigens kannst du ja auch noch ein zweites, unsichtbares Listview generieren...
Benvenuto bei Assembler, Normann! Allerdings muß ich dir sagen: Windows 64 Bit steht vor der Tür und da wird sich per Assembler einiges ändern... :roll: |
|
|
| |
|
|
|
![Normann Strübli: 09.03.2005](.././../../i/a/12207944441fcd654bf55d.gif) Normann Strübli | [quote:07f3459f4b]Windows 64 Bit steht vor der Tür und da wird sich per Assembler einiges ändern...[/quote:07f3459f4b]Na Du bist ja gut - mach mir nur mut! ![](.././../../i/s/__upl_ext_1148399572.gif) Bleibt doch aber alles Abwärtskompatibel... oder nicht?! Außerdem wenn man die Grundlagen kennt dann kanns ja nicht verkehrt sein.
![](.././../../i/s/_n_shades_smile.gif) |
|
|
| |
|
|
|
![Normann Strübli: 09.03.2005](.././../../i/a/12207944441fcd654bf55d.gif) Normann Strübli | Und es geht doch!
unzwar viel eleganter ![](.././../../i/s/__upl_ext_1111498489.gif)
Frank, bitte guck dir das ganze mal genauer an. Eigentlich gar nicht so schwer, wäre also schön wenn Dus dann doch in deine Listview.dll integrieren könntest (büdde!) Dann braucht man den kram mit dem Subclassing nicht. Der Quelltext ist ein geänderter von Deinen Beispielen - weils per mich so schneller ging.
Ich möchte das auch noch dahingehend erweitern, das nur bestimmte Spalten fest sind.
Was meint Du? KompilierenMarkierenSeparieren $H windows.ph
$H structs.ph
$H messages.ph
$H commctrl.ph
$H Structs.ph
set("FastMode",1)
Strukturen
STRUCT HD_NOTIFY = ~HD_NOTIFY
DECLARE HD_NOTIFY#
Dim HD_NOTIFY#,HD_NOTIFY
Declare bereich#,listview&,lvdll&,text$,bytes&,bereich#,x&,y&,z&
Def GetSysColor(1) !"USER32","GetSysColor"
$I Listview_Funktionen.inc
proc ListviewCallback
Parameters Wnd&, Msg&, WParam&, LParam&
if Msg& = ~WM_NOTIFY
HD_NOTIFY# = lparam&
if HD_NOTIFY#.iItem& = ~HDN_BeginTrackW Die HDN_BeginTrack Botschaft abfangen und löschen!
If @GetCheck(Check&)
return 1
endif
else
Return ~CallWindowProc(~GetProp(Wnd&,"OldCallback"),Wnd&, Msg&,WParam&,LParam&)
endif
endif
Return ~CallWindowProc(~GetProp(Wnd&,"OldCallback"),Wnd&, Msg&,WParam&,LParam&)
Endproc
lvdll&=usedll("Listview.dll")
SetTrueColor 1
Windowstyle 543
Windowtitle "Listview mit fester Spaltenbreite"
Window 0,0-600,600
Cls GetSysColor(15)
Usefont "MS Sans Serif",10,0,0,0,0
SetDialogFont 1
x&=MixRGBs(GetSysColor(15),$00ffffff)
listview&=CreateListView(%hwnd,%hinstance,0,x&,-1,$31)
Declare Check&
Check& = @Create("CheckBox",%hwnd,"Spaltenbreite Fixieren",400,30,120,20)
text$="LVData/Laeufer_mit_Header.csv"
bytes&=@FileSize(text$)
If bytes&>0
Dim bereich#,bytes&
ReadFileQuick(addr(text$),bereich#,0,bytes&)
x&=SetColumnsFromMem(listview&,bereich#,addr(y&))
CsvToListview(listview&,(bereich#+y&),(bytes&-y&),x&)
Dispose bereich#
EndIf
*** Die Breite der drei ersten Spalten korregieren
SetColumnWidth(listview&,0,-1)
SetColumnWidth(listview&,1,-1)
SetColumnWidth(listview&,2,-1)
AutoSortListview listview&,1,1,1,1,2,2
ShowListView(listview&,32,32,354,456)
InitMessages(%hwnd)
~SetProp(listview&,"OldCallback",~SetWindowLong(listview&,~GWL_WNDPROC, ProcAddr(ListviewCallback,4)))
While 1
waitinput
Case %key=2:BREAK
Wend
CloseMessages(%hwnd)
freedll lvdll&
$I Listview_Dispose font>
End
|
|
|
| |
|
|
|
![Jörg Sellmeyer: 09.03.2005](.././../../i/a/8132362004294faafc5e8c.jpg) Jörg Sellmeyer | Hallo Normann, Das ist ja fantastisch. Außerdem ist die festlegung bestimmter Spalten recht einfach. Man muß nur in der Callbackroutine die If-Abfrage erweitern: KompilierenMarkierenSeparieren Saluto Jörg |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... ![](https://www.wuestensand.info/images/CoverFataMorganaklein.jpg) | 09.03.2005 ▲ |
|
|
|
|
![Normann Strübli: 09.03.2005](.././../../i/a/12207944441fcd654bf55d.gif) Normann Strübli | Hi Jörg,
*lol* wie einfach. Aber nu sag mir noch bitte wieso das so ist. (Seh gerade den Wald vor lauter Bäumen nicht) In der Win32 steht doch folgendes: [quote:75fbb01985] iButton Index of the mouse button involved in generating the notification message. This member can be one of these values:
ValueMeaning 0Left button 1Right button 2Middle button [/quote:75fbb01985] Also wieso ist das iButton mit dem Testata-index bestückt und nicht mit der gedrückten Maus-Taste? Hä?
Saluto Normann |
|
|
| |
|
|
|
![Jörg Sellmeyer: 09.03.2005](.././../../i/a/8132362004294faafc5e8c.jpg) Jörg Sellmeyer | Tja, da wirst Du wohl BG fragen müssen. Ich habs durch puren Zufall rausgekriegt. Bevor ich in der Aiuto nachgelesen habe, habe ich einfach mal il valore per Button getestet. Hätte ich vorher nachgelesen, wäre ich wohl auch nicht drauf gekommen ![](.././../../i/s/__upl_ext_1111498539.gif) Saluto Jörg |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... ![](https://www.wuestensand.info/images/CoverFataMorganaklein.jpg) | 09.03.2005 ▲ |
|
|
|
|
![Frank Abbing: 10.03.2005](.././../../i/a/noavatar.gif) Frank Abbing | Hi,
ja, funktioniert gut! Mit dieser Notifymessage hatte ich mich noch gar nicht richtig beschäftigt ![](.././../../i/s/icon_redface.gif) Werde ich fest einbauen. |
|
|
| |
|
|
|
![Normann Strübli: 10.03.2005](.././../../i/a/12207944441fcd654bf55d.gif) Normann Strübli | Dankeschön!
PS: Bin das Wochenende mal wieder nicht da, also nicht wundern falls ich auf etwas nicht Antworte.
gruß Normann |
|
|
| |
|
|
|
![Frank Abbing: 11.03.2005](.././../../i/a/noavatar.gif) Frank Abbing | Hi,
fertig. Hab es als Ex-Style per CreateListview() realisiert. Ist Style $400 gesetzt, dann kann die Breite der Spalten in diesem Listview nicht verändert werden. Ist also ein lokaler Style, gilt aber immer per alle Spalten. |
|
|
| |
|
|
|
![Normann Strübli: 02.11.2005](.././../../i/a/12207944441fcd654bf55d.gif) Normann Strübli | Hallo Frank,
kann es sein das der Style $400 nicht funktioniert? Habe ihn bisher nicht benutzt da ich immer nur bestimmte Spalten unveränderbar gemacht habe.
Saluto Normann |
|
|
| |
|
|
| |
|
- Page 2 - |
|
|
![Frank Abbing: 03.11.2005](.././../../i/a/noavatar.gif) Frank Abbing | Hallo Normann,
ja, du hast recht. Er hatte funktioniert, aber irgendwie ist er in der letzten Version wieder verloren gegangen. Ich kümmere mich darum. |
|
|
| |
|
|
|
![Frank Abbing: 20.11.2005](.././../../i/a/noavatar.gif) Frank Abbing | So, Fehler gefunden. In der nächsten Version funktionieren die festen Spalten wieder. ![](.././../../i/s/__upl_ext_1111498557.gif) |
|
|
| |
|
|