Deutsch
Forum

Feste Spaltenbreite

 
- Seite 1 -



Normann
Strübli
Hallo,

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 ich den genialen
XPIA endlich vernünftig nutzen kann
Habe mir das Buch Assembler - Grundlagen der Programmierung von
Marcus Roming und Joachin Rhode gekauft was meiner Meinung nach für
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

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 für die Farbe Rot und 123 halt für 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 breiter 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 könnte 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
 
07.03.2005  
 



 
- Seite 1 -



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:
KompilierenMarkierenSeparieren
x&=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
Übrigens kannst du ja auch noch ein zweites, unsichtbares Listview generieren...

Willkommen bei Assembler, Normann! Allerdings muß ich dir sagen: Windows 64 Bit steht vor der Tür und da wird sich für Assembler einiges ändern... :roll:
 
08.03.2005  
 




Normann
Strübli
[quote:07f3459f4b]Windows 64 Bit steht vor der Tür und da wird sich für Assembler einiges ändern...[/quote:07f3459f4b]Na Du bist ja gut - mach mir nur mut!
Bleibt doch aber alles Abwärtskompatibel... oder nicht?!
Außerdem wenn man die Grundlagen kennt dann kanns ja nicht verkehrt sein.

 
09.03.2005  
 




Normann
Strübli
Und es geht doch!

unzwar viel eleganter

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 für 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.inc
End
 
09.03.2005  
 




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
If And(@GetCheck(Check&),HD_NOTIFY#.iButton& = 1)

    Messagebox("Das geht nicht!","Ätsch!!",0)
    return 1

EndIf


Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
09.03.2005  
 




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 Header-index bestückt und nicht mit der gedrückten Maus-Taste?
Hä?

Gruß
Normann
 
09.03.2005  
 




Jörg
Sellmeyer
Tja, da wirst Du wohl BG fragen müssen. Ich habs durch puren
Zufall rausgekriegt. Bevor ich in der Hilfe nachgelesen habe,
habe ich einfach mal den Wert für Button getestet.
Hätte ich vorher nachgelesen, wäre ich wohl auch nicht drauf
gekommen
Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
09.03.2005  
 




Frank
Abbing
Hi,

ja, funktioniert gut! Mit dieser Notifymessage hatte ich mich noch gar nicht richtig beschäftigt
Werde ich fest einbauen.
 
10.03.2005  
 




Normann
Strübli
Dankeschön!

PS: Bin das Wochenende mal wieder nicht da, also nicht wundern falls ich
auf etwas nicht Antworte.

gruß
Normann
 
10.03.2005  
 




Frank
Abbing
Hi,

fertig. Hab es als Ex-Style für 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 für alle Spalten.
 
11.03.2005  
 




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.

Gruß
Normann
 
02.11.2005  
 



 
- Seite 2 -



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.
 
03.11.2005  
 




Frank
Abbing
So, Fehler gefunden. In der nächsten Version funktionieren die festen Spalten wieder.
 
20.11.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.114 Betrachtungen

Unbenanntvor 0 min.
Joerg28.06.2016

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