Deutsch
Forum

Erledigt: Seltsames Phänomen Listview für Directories

 
- Seite 1 -



Dieter
Zornow
Ich habe mich mal an einem Listview versucht, das Directories einliest, dabei werden die zum Eintrag
passenden Icons verwendet, eben wie bei Totalcommander oder Freecommander.
Das funktioniert auch sehr gut, aber auf meinem Hauptrechner und auf meinem Notebook stürzt das Programm
bei nur einem Verzeichnis "Adressen" ab. Unter Profan spätestens beim zweiten öffnen, mit Profan2CPP kompiliert
kann ich es bis zu 5x öffnen bevor es abstürtzt. Ich suche nun schön seit Tagen nach einem Fehler und kann nichts
finden, da es ja auf jedem Rechner nur diese eine Verzeichnis ist, alle anderen funktionieren einwandfrei.
Das Verzeichnis hat keinerlei Besonderheiten und ist auch nicht groß. Weder XPSE noch der in profan2cpp eingebaute
Inspector haben einen Fehler im Code gefunden. Könnte mal jemand testen, ob es auf seinem Rechner ebenfalls so
ein Phänomen gibt.
Lauffähiger Quelltext und Exe mit Profan2Cpp kompiliert liegen bei. Funktioniert wegen Subclassing Doppelklick und
Rechtsklick nur unter XProfan 11. Die Hauptbestandteile dürften aber auch in anderen Versionen laufen.

237 kB
Hochgeladen:15.07.2009
Ladeanzahl52
Herunterladen
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
15.07.2009  
 



 
- Seite 2 -



Dieter
Zornow
Verstehe jetzt nicht was du meinst, kannst du das mal im Code zeigen oder ein Beispiel zeigen
KompilierenMarkierenSeparieren
SubClassProc

    If &sWnd = gb&

        If SubClassMessage(gb&, 515) doppel Klick

            case execute$ <> "":RunItem(gb&,execute$,maske$)
            Set("WinProc", 1)

        elseIf SubClassMessage(gb&,516) rechts Klick

            Messagebox("Rechtsklick","",0)
            Set("WinProc", 1)

        EndIf

    Endif

EndProc

 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
16.07.2009  
 



So
KompilierenMarkierenSeparierenstatt so:
KompilierenMarkierenSeparierenoder warsch. einfacher nach Rolands Art per setMenuItem statt sendMessage und %menuItem statt %uMessage. (dafür aber weniger Infos mgl.)
 
16.07.2009  
 




Jörg
Sellmeyer
Ich meinte auch die SubClassProc. Was ist denn in Deinem Verzeichnis drin. Wie gesagt: Bei mir stürzt es auch häufiger bei "A" ab aber eben auch bei anderen Verzeichnissen.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
16.07.2009  
 




Frank
Abbing
Stell mal sicher, dass am Pfadende kein "/", bzw. "" steht. Bzw. dass es dort steht, habs nicht mehr so gut in Erinnerung. Ich meine, ich hätte auch schon diese Probleme damit gehabt bei der Listview.dll.
 
16.07.2009  
 




Dieter
Zornow
Danke für die Tipps, aber es ändert sich nichts.

@If: mein subclassing ist vielleicht ungewöhnlich und einfach, aber es funktioniert einwandfrei und dürfte somit zulässig sein. Wenn ich das Subclassing herausnehme und auf einfachen Klick reagiere ändert sich nichts am Absturz.
@Jörg in dem Verzeichnis sind normale Dateien, hat aber damit auch nichts zu tun, da es mit dem Namen BAdressen ohne Problem geht.
@Frank in der Richtung ist alles ok, habe mir schon alle Pfade anzeigen lassen.

Da es scheinbar keine Lösung gibt, muss ich das Ding wohl aufgeben, obwohl es mich brennend interessiert was der Grund ist.
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
17.07.2009  
 



Wenn man die subClassProc umgestellt hat, dann reicht ein
KompilierenMarkierenSeparieren
Proc AddAssociatedIcon

    Parameters name$,i&,Imagelist&
    return 0//<--
damit nichts abstürzt.

Ich hab zwar mit imageListen noch nichts angefangen aber ohne Icons kann ich in jedes Verzeichnis wechseln.
 
17.07.2009  
 



Schau mal:
KompilierenMarkierenSeparieren
Proc AddAssociatedIcon

    Parameters name$,i&,Imagelist&
    var Hicon&= External("Shell32","ExtractAssociatedIconA",%hinstance,addr(name$),addr(i&))
    External("comctl32.dll","ImageList_AddIcon",Imagelist&,HIcon&)       Icon in Imagelist hinzufügen
    External("USER32.DLL","DestroyIcon",HIcon&)                         Handle löschen
    messagebox str$(imageList&),name$,0
    var a&=External("comctl32.dll","ImageList_GetImageCount",Imagelist&)
    messagebox "5","",0
    return a&

endproc

 
17.07.2009  
 



Ohne:
KompilierenMarkierenSeparieren
Proc PlusBackslash

    parameters pfad$
    declare pfad#,result$
    Dim pfad#,len(pfad$)+1
    string pfad#,0 = pfad$
    External("shlwapi","PathAddBackslashA",pfad#)
    result$ = string$(pfad#,0)
    Dispose pfad#
    return result$

endproc

stürzt das Programm nicht mehr ab, zumindest das hier: [...]  . Ich habe einfach bisl rückwärts "geproggt" (im Sinne des Minimalbeispieles) bis es fehlerfrei funzt. Das heisst natürlich nicht, dass Fehler nicht auch an anderen Stellen entstanden sein können, aber eine funktionierende Basis ist selten schlecht zum Fehlerfinden. ^^
 
17.07.2009  
 




Dieter
Zornow
Ok, Danke

Ich werde es mal ausprobieren, wenn das bei mir auch läuft, werde ich den Fehler bestimmt finden, durch hinzutun Schritt für Schritt.
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
17.07.2009  
 




Dieter
Zornow
@IF Dank deiner Vorarbeit funktioniert es nun bei mir einwandfrei. Ich kann Adressen zig mal öffnen. Ich habe zu Beginn erst mal alle Api-Funktionen so umgestellt wie in deinem Beispiel, von Addr() zu Bereich# und bei der Stringzuweisung einer Bereichsvariablen ein Null-Byte angehängt. Schon das hat es gebracht. Ist mir allerdings unverständlich Profan sollte das richtig machen und bei String Bereich#,0 bereits ein Null-Byte anhängen. mit addr(variable) muss dann scheinbar auch sehr vorsichtig umgehen, am besten gar nicht verwenden. Im Anhang ist die neue Version mit Icons und allem, könnte jemand mal testen ob es jetzt überall funktioniert, das wäre super wenn es so wäre.

Auf jeden Fall herzlichen Dank, ich hatte die Hoffnung schon fast aufgegeben, hier noch weiterzukommen.

5 kB
Hochgeladen:17.07.2009
Ladeanzahl21
Herunterladen
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
17.07.2009  
 



Gern geschehen!

Aus solch reagierendem ListView könnte man auch ein Control machen, dann hätte man es immer und überall und müsste sich nicht ums Drumherum kümmern. create("loadFile",getDir$("@"),10,10,200,200)
 
17.07.2009  
 




Frank
Abbing
Dein Code liesse sich sicher noch optimieren. So sehen die Icons leider recht bescheiden aus, irgendwas passt noch nicht so ganz.
Links eine Fileliste mittels der Listview.dll, rechts das Ergebnis mit deinem Code.

 
17.07.2009  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

8.763 Betrachtungen

Unbenanntvor 0 min.
Michael W.07.07.2016
Ernst21.05.2016
Michael Borowiak29.12.2012
Jörg Sellmeyer06.11.2011
Mehr...

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