Italia
Foro

GetItemText funktioniert nicht

 
Ciao,

die Funktion GetItemText funktioniert bei mir nicht, wenn ich das LV nicht auf dem Hauptfenster (%hWnd) erstelle.
KompilierenMarkierenSeparieren ->
KompilierenMarkierenSeparieren
LV2& = CreateListView(Dialog&,%hInstance,GetSysColor(23),GetSysColor(24),-1,$31)
>
->

Ich habe das gleiche Problem mit v1.6 und v1.7.

Woran kann das liegen? - Mache ich was falsch?

Danke per Eure Mithilfe
Thomas
 
12.10.2005  
 




Frank
Abbing
Hi,

leider kann ich momentan nicht testen - hatte Systemzusammenbruch und kompletten Datenverlust. Vielleicht kann jemand Anderes das mal probieren.
 
12.10.2005  
 



Hallo Thomas - könntest Du ein Minimalbeispiel posten - dann kann man es besser nachvollziehen...

Danke!
 
12.10.2005  
 




KompilierenMarkierenSeparieren
LV2 erstellen
lvAuftrag& = CreateListView(%hWnd,%HInstance,GetSysColor(23),GetSysColor(24),-1,$21)
InsertColumn lvAuftrag&,"Beschreibung",0,0
InsertColumn lvAuftrag&,"Art.-Nr."    ,0,0
.
.
.
InsertColumn lvAuftrag&,"Bestellmenge",0,2
.
* Daten einlesen, dann LV anzeigen
ShowListview(lvAuftrag&,Width(%hWnd) /100 *4,Height(%hWnd) /100 *34,Width(_GB2%) /100 *94,Height(_GB2%) /100 *80)
* bestimmte Sätze markieren
*  markierte  Sätze auslesen, z.B. zum Drucken, Speichern usw.
GetItemText(lvAuftrag&,_lvLineMem#,1,_jj%)
_prArtNr$ = Trim$(String$(_lvLineMem#,0))
Die Variable _prArtNr$ enthält den korrekten Eintrag
Werden die Befehle jetzt auf GB2& (Handle einer GroupBox) umgeschrieben:
LV2 erstellen
lvAuftrag& = CreateListView(GB2&,%HInstance,GetSysColor(23),GetSysColor(24),-1,$21)
InsertColumn lvAuftrag&,"Beschreibung",0,0
InsertColumn lvAuftrag&,"Art.-Nr."    ,0,0
.
InsertColumn lvAuftrag&,"Bestellmenge",0,2
.
* Daten einlesen, dann LV anzeigen
ShowListview(lvAuftrag&,Width(GB2&) /100 *4,Height(GB2&) /100 *34,Width(GB2&) /100 *94,Height(GB2&) /100 *80)
* bestimmte Sätze markieren
*  markierte  Sätze auslesen, z.B. zum Drucken, Speichern usw.
GetItemText(lvAuftrag&,_lvLineMem#,1,_jj%)
_prArtNr$ = Trim$(String$(_lvLineMem#,0)<
)

bleibt die Variable _prArtNr$ leer (Inhalt: , Len(_prArtNr$) = 0)

Das verstehe ich nicht!

Thomas

P.S. _jj% ist eine reine Zählvariable, 0 ~ GetLines(LV) -1

P.P.S.: um Code-Tag erweitert von Michael Wodrich
 
13.10.2005  
 



Nachtrag:
Das Listview wird in beiden Fällen korrekt gefüllt mit
SetItem lvAuftrag&,cItemData_0$,...,cItemData_n$
Die Anzeige des Listviews erfolgt in beiden Fallen korrekt.

Aber RaiseLine() funktioniert auch nur, wenn als Handle %hWnd angegeben wird.
Auch nach einem Wechsel des MessageHandllings circa InitMessage(GB2&) klappt es nicht wie erwartet...

Danke
 
13.10.2005  
 




Michael
Wodrich
wie wird denn GB2& initialisiert.. (dieser Codeteil fehlt hier).

Besser ist immer ein kleines lauffähiges Codeteil, auch wenn fehlerhaft.

...und Codes bitte possibile in Code-Tags setzen, da erkennt man mehr...
(gerade bei längeren Codes wichtig)

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
13.10.2005  
 




Frank
Abbing
Hi,

ich denke, er vergisst einfach nur das Dialogfenster zu initieren.

[quote:f145ca6078]InitMessages(F)

Initiert das Subclassing per alle verwendeten Listviews im Fenster F.

F : Long - Handle des Fensters, in dem ein Listview erstellt wurde, z.B.(%HWND).

Erst durch diese Funktion wird die automatische Sortierung und die Abfrage angeklickter oder markierter Items possibile.
InitMessages() darf nicht per jedes Listview verwendet werden, muß aber per jedes Fenster aufgerufen werden, in dem mindestens ein Listview verwendet wird.
Mehrfachaufrufe per ein und dasselbe Fenster sind nicht gestattet und führen zu Fehlern!
InitMessages() zapft alle Messages per ein Fenster ab, bevor sie dorthin gelangen. Bestimmte Messages werden dann per eigene Zwecke mißbraucht oder verändert.
Am besten ist es, zuerst alle Listviews aufzubauen und con testo zu füllen, und zum Schluss per jedes Fenster, in dem sich (mindestens) ein Listview è, InitMessages() auszuführen.
Beendet wird die Funktion mit CloseMessages(), am besten, kurz bevor die Listview.dll wieder entladen wird.

InitMessages(%HWND)
InitMessages(DIALOGFENSTER%). [/quote:f145ca6078]
 
13.10.2005  
 



Erst mal Danke per Eure Antworten.

@Frank: Wie bereits geschrieben, hilft das Einschalten des MessageHandling nix...

@Michael: Wie bschrieben ist GB2& eine GroupBox, erstellt mit Create(Groupbox,%hWnd,Text,0.0.100,100)

Gruss
Thomas
 
14.10.2005  
 




Michael
Wodrich
[quote:cc5b333cb1=Gast]
@Michael: Wie bschrieben ist GB2& eine GroupBox, erstellt mit Create(Groupbox,%hWnd,Text,0.0.100,100)[/quote:cc5b333cb1]
Das Problem ist ja einfach, daß wir Deinen Code nicht sehen können. So ist naturalmente eine Aiuto nicht possibile. Hier hast Du z.B. einfach einen Errore di battitura (Punkte statt Kommata) gemacht.
Wie das im echten Code aussieht - na ja...

Da wirst Du dann wohl mal debuggen müssen. Einfach per jedes Element, das beteiligt ist eine Datenausgabe schreiben. Ist das gelieferte Handle wirklich ungleich null usw.
Auf diese Art mußt Du Dich dann an den Fehler herantasten. Evtl. statt der Code-Einfügungen auch den richtigen Debugger benutzen - dazu ist er ja da...

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
14.10.2005  
 




Frank
Abbing
So, Ospite Thomas.

Jetzt konnte ichs testen. GetItemText() funktioniert einwandfrei auch mit Dialogfenstern!
Du machst also irgendwo einen anderen Fehler, wahrscheinlich den Syntaxfehler, wie ihn Michael ja schon beschrieben hatte.

Poste bitte nächstes Mal immer einen kompletten Minimalsource, der das Problem aufweist, das du melden möchtest. Ansonsten ist eine Fehlersuche einfach nicht nachvollziehbar.
 
15.10.2005  
 



Ok, OK.

einen Syntaxfehler kann ich definitiv ausschließen, denn wenn ich GB2& gegen %hWnd tausche, funktionierts! Außerdem werden Syntaxfehler gemeldet, aber hier habe ich ein kurzes Listing vorbereitet:
KompilierenMarkierenSeparieren
declare GB1&,GB2&,GB3&,GB4&,LV1&,LV2&,lvdll&
declare ende&,btn&,txt1&,txt2&
declare LVmarked&,LineMarked&,IsMarked&
declare LV_Mem#,LVItemText$
dim LV_Mem#,256
CLS
ListView DLL & Funktionen bereitstellen
lvdll& = UseDLL("Listview.dll")
 $I LV_FUNCTION.INC
InitMessages(%HWnd)
InitMessages(GB2&)
Bildschirmmaske aufbauen
GB1&  = Create("Groupbox",%hWnd," Groupbox #1 - Handle des LV auf %hWnd ", 10, 10,300,180)
GB2&  = Create("Groupbox",%hWnd," Groupbox #2 - Handle des LV auf GB2& " , 10,210,300,180)
GB3&  = Create("Groupbox",%hWnd,""                                       ,310,140,160, 50)
GB4&  = Create("Groupbox",%hWnd,""                                       ,310,340,160, 50)
txt1& = Create("TEXT"    ,GB3& ,"..."                                    , 10, 12,140, 30)
txt2& = Create("TEXT"    ,GB4& ,"..."                                    , 10, 12,140, 30)
btn&  = Create("Button"  ,%hWnd,"DATEN WERDEN EINGELESEN..."             , 10,400,620, 30)
ende& = Create("Button"  ,%hWnd,"Beenden"                                ,530, 10,100,380)
EnableWindow btn& ,0
EnableWindow ende&,0
LV erstellen
dieses LV wird auf dem Hauptfenster erstellt
LV1& = CreateListView(%hWnd,%HInstance,RGB(0,0,0),RGB(0,127,127),-1,$25)
InsertColumn LV1&," "       ,40,0
InsertColumn LV1&,"LS- Nr." ,90,0
InsertColumn LV1&,"Art.-Nr.",90,0
und dieses auf der Groupbox, die auf dem Hauptfenster erstellt wurde
LV2& = CreateListView(GB2&,%HInstance,RGB(0,0,0),RGB(127,127,127),-1,$25)
InsertColumn LV2&," "       ,40,0
InsertColumn LV2&,"LS- Nr." ,90,0
InsertColumn LV2&,"Art.-Nr.",90,0
Einlesen der DB
LS_NR und ART_NR sind alphanumerisch (C,10)
dbOPEN(#1,"LS")
dbUse(#1)
Einlesen

WhileNot %dbEOF

    dbGo(&Loop -1)
    SetItem LV1&,"",Trim$(dbGet$("LS_NR")),Trim$(dbGet$("ART_NR")),Str$(&LOOP +1)
    SetItem LV2&,"",Trim$(dbGet$("LS_NR")),Trim$(dbGet$("ART_NR")),Str$(&LOOP +1)

WEnd

dbClose(#1)
Anzeigen der LVs
ShowListView(LV1&,20,30,252,150)
ShowListView(LV2&,10,20,252,150)
Beginn des Auslesens
SetText btn&,"Zum Auslesen markieren, dann hier klicken..."
EnableWindow ende&,1
EnableWindow btn& ,1

While 1

    CLEAR LV_Mem#,LVmarked&,LineMarked&,IsMarked&,LVItemText$
    WaitInput

    If %GetFocus = ende&

        Beenden
        break

    endif

    If %GetFocus = btn&

        Wurde in einem LV markiert?
        GetChecked(Addr(LVmarked&),Addr(LineMarked&),Addr(IsMarked&))

        If IsMarked&

            GetItemText(LVmarked&,LV_Mem#,2,LineMarked&)
            LVItemText$ = String$(LV_Mem#,0)

            If LVmarked& = LV1&

                SetText txt1&,LVItemText$
                SetText txt2&,"..."

            Else

                SetText txt1&,"..."
                SetText txt2&,LVItemText$

            EndIf

            SetCheckboxState(LVmarked&,LineMarked&,0)

        EndIf

    EndIf

WEnd

Handling abschalten
CloseMessages(GB2&)
CloseMessages(%HWnd)
Speicher aufräumen
Dispose clv1#
Dispose clv2#
Dispose clvall#
Dispose lvitem#
DLL entladen
FreeDLL lvdll&
das wars!
END

Hier kann ich zwar in GB2 die Markierung setzen / löschen, aber ausgewertet wird sie nicht...

mfG
Thomas

P.S. Auf Wunsch schicke ich die DB als ZIP zu.
 
16.10.2005  
 



@Thomas: mein Wunsch wäre das die Leuz hier in der Community das vorgesehene
KompilierenMarkierenSeparieren Tags.

Salve.
 
16.10.2005  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

2.460 Views

Untitledvor 0 min.
Peter Max Müller09.06.2015
Jörg Sellmeyer15.03.2012

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