Forum | | | | | Salut,
qui Funktion GetItemText funktioniert chez Je ne, si je cela LV pas sur dem Hauptfenster (%hWnd) erstelle. KompilierenMarqueSéparation -> KompilierenMarqueSéparation ->
j'ai cela gleiche Problem avec v1.6 et v1.7.
Woran peux cela liegen? - fais je quoi faux?
merci pour Eure Mithilfe Thomas |
| | | | |
| | Frank Abbing | Hi,
malheureusement peux je momentan pas testen - hatte Systemzusammenbruch et kompletten Datenverlust. peut-être peux quelqu'un Anderes cela la fois essayer. |
| | | | |
| | | allô Thomas - könntest Du un Minimalbeispiel posten - ensuite peux on es besser nachvollziehen...
merci! |
| | | | |
| | | KompilierenMarqueSéparationLV2 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 qui Variable _prArtNr$ vide (le contenu: , Len(_prArtNr$) = 0)
cela verstehe je pas!
Thomas
P.S. _jj% ist une reine Zählvariable, 0 ~ GetLines(LV) -1
P.P.S.: um Code-journée erweitert de Michael Wodrich |
| | | | |
| | | Nachtrag: cela Listview wird dans beiden Fällen korrekt pleine avec SetItem lvAuftrag&,cItemData_0$,...,cItemData_n$ qui Anzeige des Listviews erfolgt dans beiden tomber korrekt.
mais RaiseLine() funktioniert aussi seulement, si comme Handle %hWnd angegeben wird. aussi pour einem change des MessageHandllings sur InitMessage(GB2&) klappt es pas comment erwartet...
merci |
| | | | |
| | Michael Wodrich | comment wird car GB2& initialisiert.. (cette Codeteil fehlt ici).
Besser ist toujours un kleines lauffähiges Codeteil, aussi si incorrect.
...et Codes s'il te plaît possible dans Code-Tags mettons, là erkennt on plus... (justement chez längeren Codes important)
belle Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 13.10.2005 ▲ |
| |
| | Frank Abbing | Hi,
je denke, il vergisst simple seulement cela Dialogfenster trop initieren.
[quote-part:f145ca6078]InitMessages(F)
Initiert cela Subclassing pour alle verwendeten Listviews im la fenêtre F.
F : Long - Handle des Fensters, dans dem un Listview erstellt wurde, z.B.(%HWND).
seulement par cet Funktion wird qui automatische Sortierung et qui Abfrage angeklickter ou bien markierter Items possible. InitMessages() darf pas pour chaque Listview verwendet volonté, doit mais pour chaque la fenêtre aufgerufen volonté, dans dem mindestens un Listview verwendet wird. Mehrfachaufrufe pour un et même chose la fenêtre sommes pas gestattet et mener trop Fehlern! InitMessages() zapft alle Messages pour un la fenêtre ab, bevor vous dorthin gelangen. Bestimmte Messages volonté ensuite pour eigene Zwecke abus ou bien modifié. Am besten ist es, d'abord alle Listviews aufzubauen et Text trop füllen, et zum Schluss pour chaque la fenêtre, dans dem sich (mindestens) un Listview est, InitMessages() auszuführen. finissez wird qui Funktion avec CloseMessages(), am besten, kurz bevor qui Listview.dll wieder entladen wird.
InitMessages(%HWND) InitMessages(DIALOGFENSTER%). [/quote-part:f145ca6078] |
| | | | |
| | | seulement la fois merci pour Eure répondre.
@Frank: comment bereits geschrieben, hilft cela Einschalten des MessageHandling nix...
@Michael: comment bschrieben ist GB2& une GroupBox, erstellt avec Créer(Groupbox,%hWnd,Text,0.0.100,100)
Gruss Thomas |
| | | | |
| | Michael Wodrich | [quote-part:cc5b333cb1=Gast] @Michael: comment bschrieben ist GB2& une GroupBox, erstellt avec Créer(Groupbox,%hWnd,Text,0.0.100,100)[/quote-part:cc5b333cb1] cela Problem ist oui simple, qui wir Deinen Code pas voyons peut. So ist naturellement une Aider pas possible. ici la hâte Du z.B. simple une Faute de frappe (Punkte statt Kommata) gemacht. comment cela im echten Code aussieht - eh bien...
là wirst Du ensuite wohl la fois debuggen doit. simple pour chaque Element, cela beteiligt ist une Datenausgabe écrivons. Ist cela gelieferte Handle wirklich ungleich zéro usw. sur cet Art dois Du toi ensuite à den faute herantasten. Evtl. statt qui Code-Einfügungen aussi den richtigen Debugger benutzen - en supplément ist il oui là...
belle Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 14.10.2005 ▲ |
| |
| | Frank Abbing | So, Invité Thomas.
maintenant konnte ego testen. GetItemText() funktioniert einwandfrei aussi avec Dialogfenstern! tu fais alors irgendwo une anderen faute, wahrscheinlich den Syntaxfehler, comment ihn Michael oui déjà beschrieben hatte.
Poste s'il te plaît nächstes la fois toujours une kompletten Minimalsource, qui cela Problem aufweist, cela du annoncer vouloir. Ansonsten ist une Fehlersuche simple pas nachvollziehbar. |
| | | | |
| | | Ok, OK.
une Syntaxfehler peux je définitif ausschließen, car si je GB2& vers %hWnd tausche, funktionierts! Aussi volonté Syntaxfehler gemeldet, mais ici habe je un kurzes Listing vorbereitet: KompilierenMarqueSéparationdeclare 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&
cela wars!
FIN
ici peux je zwar dans GB2 qui Markierung mettons / effacer, mais ausgewertet wird vous pas...
mfG Thomas
P.S. sur Wunsch schicke je qui DB comme ZIP trop. |
| | | | |
| | | | | | | |
|
répondreOptions du sujet | 2.496 Views |
Themeninformationencet Thema hat 4 participant: |