Italia
Foro

Listview.dll: Problem Listview auf TabContol, Problem Aktualisieren

 

Julian
Schmidt
Ciao,
ich stehe gerade vor einen Problem.
Und zwar erstelle ich circa die Listview.dll ein Listview auf einen Tabcontrol.
Diesem Listview würde ich nun gerne per RaiseLine & RaiseColum andere Farben zuordnen.
Diese Befehle scheinen allerdings auf einen Tabcontrol nicht zu funktionieren, da mein Listview nicht mit meiner gewollte Farbdarstellung dargestellt wird.
Sobald ich das Listview auf dem Hauptfenster erstelle wird das Listview mit meiner gewollten Farbdarstellungen dargestellt!
Wenn ich das Listview auf dem Hauptfenster erstelle kommt es leider zu Komplikationen mit anderen Controls, weswegen es so wichtig ist es auf dem Tabcontrol zu lassen.

Wie kann ich die Farbdarstellung eines Listview, welches auf einen Tabcontrol erstellt wurde, ändern?

LG

Julian57
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
27.01.2012  
 




Thomas
Freier
Dieses Problem kenne ich eigentlich nicht. Fehler in deinem Code?
Declare lvdll&,listview&,text$,x&,z&,ilist&
 $I Listview_Funktionen.inc
lvdll&=usedll("Listview.dll")
cls
var T&=CREATE("TABCTRL",%HWND,"Reiter1",10,10,400,360)
Var TAB2&=@InsertTab(T&,2,"Reiter2")
var ELEMENT1&=Control("DIALOG","",$54001100,0,25,400,380,t&,0,%hinstance,$0)
InitMessages(%hwnd)
InitMessages(ELEMENT1&)
var LVIEW&=CREATELISTVIEW(ELEMENT1&,%HINSTANCE,0,$FFFFFF,-1,$21)
InsertColumn LVIEW&,"SPALTE 1",60,0
InsertColumn LVIEW&,"SPALTE 2",60,0
InsertColumn LVIEW&,"SPALTE 3",60,0

whileLoop 10

    SetItem LVIEW&,"123","345","678"

wend

SHOWLISTVIEW(LVIEW&,20,40,325,200)
text$="101"
RaiseColumns(LVIEW&,addr(text$),0,Rgb(185,209,249))
Var ELEMENT2&=Control("DIALOG","",$54001100,0,25,400,380,t&,0,%hinstance,$0)
InitMessages(ELEMENT2&)
var LVIEW2&=CREATELISTVIEW(ELEMENT2&,%HINSTANCE,0,$FFFFFF,-1,$21)
InsertColumn LVIEW2&,"Test 1",60,0
InsertColumn LVIEW2&,"Test 2",60,0
InsertColumn LVIEW2&,"Test 3",60,0

whileLoop 10

    SetItem LVIEW2&,"abc","def","ghu"

wend

SHOWLISTVIEW(LVIEW2&,20,40,325,200)
text$="101"
RaiseColumns(LVIEW2&,addr(text$),0,Rgb(185,209,249))

Whileloop 0,10,2

    RaiseLine(LVIEW2&,(&loop+1000000),0,Rgb(0,128,128))

Endwhile

RaiseLine(LVIEW2&,600,0,Rgb(128,128,128))
usermessages 16'--Beenden abfangen

WHILE 1

    WAITINPUT
    case %umessage=16:break'---Ende
    Case @TabChanged(T&): TAB_WECHSEL GetActiveTab(T&)

ENDWHILE

CloseMessages(%hwnd)
CloseMessages(ELEMENT1&)
CloseMessages(ELEMENT2&)
FREEDLL lvdll&
DestroyWindow(%hwnd)
End

Proc TAB_WECHSEL

    Parameters T_nr%

    IF T_nr% = 0

        Showwindow(Element1&,1)
        Showwindow(Element2&,0)

    ElseIF T_nr% = 1

        Showwindow(Element1&,0)
        Showwindow(Element2&,1)

    EndIf

EndProc

 
Gruß Thomas
Windows XP SP2, XProfan X2
27.01.2012  
 




Julian
Schmidt
Ja, ich habe InitMessages, CloseMessages nicht spezifisch auf den TabControl angewand.
Nun funktioniert das einfärben. Danke Thomas!

Allerdings habe ich festgestellt, dass die Farben ab und zu erst nach einen klick, bzw. scrollen innerhalb des Listview erscheinen,obwohl ich eigentlich mit UpdateListview das Listview aktualisiere!? Weiß jemand Rat?
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
27.01.2012  
 




Thomas
Freier
Ja, ist manchmal ein Problem. Versuch mal beim TAB-Wechsel "nach zu färben"
ElseIF T_nr% = 1

Showwindow(Element1&,0)
Showwindow(Element2&,1)

Whileloop 0,10,2

    RaiseLine(LVIEW2&,(&loop+1000000),0,Rgb(0,128,128))

Endwhile

RaiseLine(LVIEW2&,600,0,Rgb(128,128,128))
oder
ElseIF T_nr% = 1

Showwindow(Element1&,0)
Showwindow(Element2&,1)
RaiseLine(LVIEW2&,600,0,Rgb(128,128,128))
denn meist ist der 1.TAB OK.
 
Gruß Thomas
Windows XP SP2, XProfan X2
27.01.2012  
 




Julian
Schmidt
Ich tue eig. nach färben, dennoch kommt es ab und an zu den Problem.

Noch eine Frage:
Kann man ermitteln, ob die Sortierung der Zeilen geändert wurde?. Sobald man alle Zeilen nach einer Spalte aufwärts, abwärts sortiert, stimmt die Farbgebung leider nicht mehr. Deswegen würde ich gerne abfragen und wenn nötig, das Listview neu einfärben. Jemand eine Idee?
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
27.01.2012  
 



Färben erst wenn der TAB aktiv ist?
Du kannst ja abfragen, ob der Spaltenbutton gedrückt wurde. Eine Spalte mit Farbwert bei 0 Breite. Erst alle Zeilen entfärben und dann den Farbwert auslesen und Zeile per Zeile färben.Wenn die Spaltenbreiten nicht verändert werden dürfen ist es kein Problem. Sonst abfragen ob die Spaltenbreite des Farbwertes verändert wurde und wieder auf 0 setzen.
Saluto Thomas
 
27.01.2012  
 




Julian
Schmidt
Unbenannt (27.01.12)
Du kannst ja abfragen, ob der Spaltenbutton gedrückt wurde. Eine Spalte mit Farbwert bei 0 Breite. Erst alle Zeilen entfärben und dann den Farbwert auslesen und Zeile per Zeile färben.Wenn die Spaltenbreiten nicht verändert werden dürfen ist es kein Problem. Sonst abfragen ob die Spaltenbreite des Farbwertes verändert wurde und wieder auf 0 setzen.


Sry. ich verstehe nicht wie du das meinst? Wie kann ich ermitteln ob die Sortierung des Zeilen geändert wurde?
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
27.01.2012  
 



Du bestimmst doch wo sortiert werden darf circa
{{FROMQUOT2}}
Erklärung nicht gefunden: ASORTLISTVIEW(H,B,A)

AUTOSORTLISTVIEW H,S1,S2,S3,...,S12

BESTIMMT, IN WELCHER ART UND WEISE JEDE EINZELNE SPALTE EINES LISTVIEWS SORTIERT WERDEN SOLL, SOBALD DER ANWENDER
DEN ENTSPRECHENDEN SPALTENBUTTON GEDRÜCKT HAT.


, dann kannst du - siehe Beispiel Alle_Maustasten_abfangen.prf nach einem Linksklick im Listview prüfen, in welcher Spalte der Linksklick statt fand. War es eine Spalte in der eine Sortierung zulässig war, so wurde neu sortiert und die Zeilen müssen, wenn die Farbgebung an eine Zeile gebunden war, neu gefärbt werden.
 
27.01.2012  
 




Julian
Schmidt
Ok so funktioniert zumindest das Abfragen. Es treten allerdings immernoch diverse Probleme mit dem aktualisieren auf!

Hier der wesentliche Quelltext.
'...

while 1

    waitinput 30
    '...

    if (getfocus(neu&) or menuitem(101)) and (Getactivetab(hTab1&)<>4)'Wenn Button Hinzufügen gedrückt wurde....

        '...
        ColorListview(LV&[Getactivetab(hTab1&)])'wird nicht korrekt aktualisiert

    Endif

    '...
    x&=GetVar(4)

    If x&<>-1'Wenn ein beliebiger Spaltbutton gedrückt wurde...

        ColorListview(LV&[Getactivetab(hTab1&)])'wird nicht korrekt aktualisiert

    EndIf

    '...

Endwhile

'...

Proc ColorListview

    Parameters hdl&
    declare spalte&
    case hdl&=LV&[0] : spalte&=4
    case hdl&=LV&[1] : spalte&=5
    case hdl&=LV&[2] : spalte&=2
    case hdl&=LV&[3] : spalte&=2
    var erledigt&=RGB(0,190,0)
    var unerledigt&=RGB(255,30,30)

    whileloop 0,GetLines(hdl&)-1,1

        GetItemText(hdl&,bereich#,spalte&,&loop)
        case String$(bereich#,0)="Erledigt" : RaiseLine(hdl&,&loop+1000000,RGB(255,255,255),erledigt&)
        case String$(bereich#,0)="Unerledigt" : RaiseLine(hdl&,&loop+1000000,RGB(255,255,255),unerledigt&)

    Endwhile

    UpdateListview(hdl&)
    Return 1

EndProc

 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
28.01.2012  
 




Detlef
Jagolski
Versuch mal das!
while 1

    waitinput 30
    '...

    if (getfocus(neu&) or menuitem(101)) and (Getactivetab(hTab1&)<>4)'Wenn Button Hinzufügen gedrückt wurde....

        '...
        ColorListview(LV&[Getactivetab(hTab1&)])'wird nicht korrekt aktualisiert
        ~RedrawWindow(LV&[Getactivetab(hTab1&)],0,0, ~RDW_FRAME | ~RDW_INVALIDATE | ~RDW_ALLCHILDREN | ~RDW_UPDATENOW | ~RDW_INTERNALPAINT)

    Endif

    '...
    x&=GetVar(4)

    If x&<>-1'Wenn ein beliebiger Spaltbutton gedrückt wurde...

        ColorListview(LV&[Getactivetab(hTab1&)])'wird nicht korrekt aktualisiert
        ~RedrawWindow(LV&[Getactivetab(hTab1&)],0,0, ~RDW_FRAME | ~RDW_INVALIDATE | ~RDW_ALLCHILDREN | ~RDW_UPDATENOW | ~RDW_INTERNALPAINT)

    EndIf

    '...

Endwhile

'...

Proc ColorListview

    Parameters hdl&
    declare spalte&
    case hdl&=LV&[0] : spalte&=4
    case hdl&=LV&[1] : spalte&=5
    case hdl&=LV&[2] : spalte&=2
    case hdl&=LV&[3] : spalte&=2
    var erledigt&=RGB(0,190,0)
    var unerledigt&=RGB(255,30,30)

    whileloop 0,GetLines(hdl&)-1,1

        GetItemText(hdl&,bereich#,spalte&,&loop)
        case String$(bereich#,0)="Erledigt" : RaiseLine(hdl&,&loop+1000000,RGB(255,255,255),erledigt&)
        case String$(bereich#,0)="Unerledigt" : RaiseLine(hdl&,&loop+1000000,RGB(255,255,255),unerledigt&)

    Endwhile

    UpdateListview(hdl&)
    Return 1

EndProc

 
XProfan X2
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
28.01.2012  
 




Julian
Schmidt
Detlef Jagolski (28.01.12)
Versuch mal das!


Der Versuch war es Wert. Das Aktualisieren funktioniert Perfekt!
Danke euch beiden!
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
28.01.2012  
 



~Redraw... löst viele Problemchen, aber hast du es nach Franks, der ja sparsam programmiert, Beispiel mal versucht. d.h., n-1 mit &loop+100000 und letzte Zeile mit n?
var Spalte&=1
var text$=""

Whileloop 0,(GetCount(LVIEW2&)-2),1

    text$=trim$(GetText$(LVIEW2&,&loop,Spalte&))

    SELECT text$

        CASEOF "erledigt"

        RaiseLine(LVIEW2&,(&loop+1000000),0,Rgb(109,248,103))'alle unerledigten färben

        CASEOF "unerledigt"

        RaiseLine(LVIEW2&,(&loop+1000000),0,Rgb(210,222,222))'alle unerledigten färben
        OTHERWISE
        RaiseLine(LVIEW2&,(&loop+1000000),0,Rgb(255,255,255))'färben

    ENDSELECT

Endwhile

text$=trim$(GetText$(LVIEW2&,(GetCount(LVIEW2&)-1),Spalte&))

SELECT text$

    CASEOF "erledigt"

    RaiseLine(LVIEW2&,(GetCount(LVIEW2&)-1),0,Rgb(109,248,103))'alle unerledigten färben

    CASEOF "unerledigt"

    RaiseLine(LVIEW2&,(GetCount(LVIEW2&)-1),0,Rgb(210,222,222))'alle unerledigten färben
    OTHERWISE
    RaiseLine(LVIEW2&,(GetCount(LVIEW2&)-1),0,Rgb(255,255,255))'färben

ENDSELECT

 
28.01.2012  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

10.759 Views

Untitledvor 0 min.
Heiko Dix29.10.2023
Michael W.07.07.2016
Christof Neuß11.01.2016
Peter Max Müller16.04.2015
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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