Deutsch
Rokosofts Object Creator (ROC)

Treeviewabfrage

 
Hallo zusammen,

habe heute ROC runtergeladen und installiert.

Wichtigstes Teil war für mich das Treeviewobject. Nun suche ich nach einem Beispiel wie die angklickte Zeile abgefragt wird, will ja schließlich auf den Text reagiern können.

Habe auch in diesem Forum mit Search [B]ROC+TREEVIEW [/B]nichts dazu gefunden. Bilde mir allerings en schon mal irgendwo im Web etwas gelesen zu haben.

Habe ich Brett vorm Kopf??

Gibt es den DblClick und SelChange Event eigentlich auch??

Für Hilfe dankbar.

Rainer
 
20.03.2005  
 




Frank
Abbing
Hi,

habe dir hier bereits zu Ähnlichem geantwortet, du mußt auch mal darauf reagieren: [...] 
Ist eine Notifymessage, die du auslesen mußt, TVN_SELCHANGED. Bei meinen Versuchen im Dialogstyle mußte ich sowohl die A (-402), als auch die W-Variante (-451) der Message abfragen, zumindest im Dialogstyle. Einen Code in Profan hab ich nicht für dich, wahrscheinlich geht eine sichere Abfrage nur mit Subclassing, also ab XProfan.
 
21.03.2005  
 




Rolf
Koch
Hi Rainer,

naja Frank hat ja schon geantwortet

Rolf
 
21.03.2005  
 



Hallo Frank,
hallo Rolf,

danke für die Antworten.

Frank,
ich hatte Deine Nachricht auch im Profanforum schon gelesen, nur noch nicht beantwortet. Auch diese Abfragen funktionieren bei mir nicht. Auch dieses SetActiveWindow usw. haben nicht den Erfolg den ich möchte und das Verhalten daß man von anderen Win-Programmen kennt. Im Übrigen hatte mich der Hinweis auf eine Assembler-Routine auch abgeschreckt, da ich davon nun ÜBERHAUPT NICHTS VERSTEHE!

Rolf,
meine Frage war eigentlich ob im ROC diese Events programmiert sind und ich sie nur nicht entdeckt habe. Denn ein Event ist ja da zu finden, der normale Klick auf einen Eintrag, und ich mir dachte wenn jemand so einen schönen ObjectCreator bastelt, daß dann die wichtigsten Events berücksichtigt sind.

Ich bin immer noch einer der ewig gestrigen PrFellow-Anwender (Sorry Rolf, wird wohl wirklich Zeit zu lernen und zum ROC umzuschwenken!) und hatte die Events auch in der WfEvents aufgenommen, leider ohne Erfolg. Dann kam eben der Versuch mit ROC da ich hoffte in einem Programm das immer UpToDate in der Entwicklung ist das Gesuchte zu finden.

Werde selber weiter versuchen mein Ziel zu erreichen, dennoch bin ich weiterhin für jede Hilfe dankbar.

MfG

Rainer Hoefs
 
21.03.2005  
 



Gug mal vielleicht hilft Dir das hier weiter:
KompilierenMarkierenSeparieren
DEF GetTreeItem(1) sendmessage(@&(1),$110A,$0009,TVitem#)
DEF SetTreeItem(2) sendmessage(@&(1),$110B,$0009,@&(2))
DEF TreeHitTest(2) sendmessage(@&(1),4369,0,@&(2))
DEF GetTreeCount(1) Sendmessage(@&(1),$1105,0,0)
DEF TreeExpand(2) sendmessage(@&(1),$1102,$0002,@&(2))
DEF TreeColapse(2) sendmessage(@&(1),$1102,$0001,@&(2))

So nach dem Motto if getfocus(treeview) und GetTreeItem<>oldtreeitem dann erfolg

Salve, iF
 
21.03.2005  
 




Frank
Abbing
Hi,

ich hab hier einen Code von Richard Maurukas. Der ermittelt einfach nur das erste selektierte Item. Klappt hervoragend und kommt ganz ohne Notifies aus. Nicht die feine Art, aber funktioniert ...
KompilierenMarkierenSeparieren
TreeView32-Control mit Imagelist (P)FairWare, FreeWare...
Für Profan² 6.0, 32 Bit
(c) 1998 Richard Maurukas
----------------------------------------------------------------
DEF GetModuleHandle(1) !"KERNEL32","GetModuleHandleA"
DEF LoadIcon(2) ! "USER32","LoadIconA" "&#","&"
DEF LoadBitmap(2) ! "USER32","LoadBitmapA"
DEF ImageList_Create(5) !"COMCTL32","ImageList_Create"
DEF ImageList_AddIcon(2) !"COMCTL32","ImageList_AddIcon"
DEF ImageList_Destroy(1) !"COMCTL32","ImageList_Destroy"
Declare hImageList&,hIcon&,Iconname#,Executehandle&
Declare Imagelist&,HIcon#
dim Iconname#,25
dim Hicon#,24
declare TVItem#
declare Treeview&
declare TVitemtext#
declare TVInsert#
dim Tvitem#,40
dim TVInsert#,48
dim TVitemtext#,255
Let Imagelist&=ImageList_Create(16,16,$0001,3,3) Imagelist erzeugen
Let ExecuteHandle&=GetModuleHandle(0)  Handle des laufenden Programms
Icon 0
String Iconname#,0="EDITOR"       Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
Icon 1
String Iconname#,0="A"            Icon-Name
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)
Icon 2
String Iconname#,0="GESICHT"
Let Hicon&=loadicon(Executehandle&,Iconname#) Handle des Icons ok
ImageList_AddIcon(Imagelist&,HIcon&)

PROC TVITEM

    TVITEM und TVINSERT-Struktur-------------------------------
    String TVitemtext#,0=@$(4)      Der Text im Label
    long TVInsert#,0=@&(1)          TVins-Parent
    long Tvinsert#,4=@&(2)         TVins-Insert After
    long TVInsert#,8=$0027          mask IF_TEXT,IF_IMAGE,If_SelectedImage
    long TVInsert#,12=0            Htreeitem
    long TVInsert#,16=0             State
    long TVInsert#,20=0             StateMAsk
    long TVInsert#,24=Tvitemtext#   Adress of Label
    long TVInsert#,28=len(@$(4))   len of Label(länge GeDimt in Tvitemtext#)
    long TVInsert#,32=@&(2) 0      Image          z.B Ordner
    long TVInsert#,36=@&(3) 0      Selected Image z.B geöffneter Ordner
    long TVinsert#,40=0             cChildren
    long TVInsert#,44=0             Lparam
    -----------------------------------------------

ENDPROC

Declare TRoot&,TRoot1&,troot3&
Declare infotext&,ende%,Edithandle&
Window 0,0-350,440
Windowtitle "TreeViewControl32, (c) Richard Maurukas"
settruecolor 1
cls rgb(192,192,192)
let Infotext&=createtext(%Hwnd,"",40,0,250,20)
Let TreeView&=@control("SysTreeView32","",$5080002F,40,20,250,340,%Hwnd,200,%Hinstance)
sendmessage(TreeView&,$1109,0,Imagelist&) Associate the image list with the tree
TVITEM 0,0,1,"Richard Maurukas"
Let TRoot&= sendmessage(Treeview&,$1100,0,TVInsert#)  Insertitem in Root 0
TVITEM TRoot&,1,1,"präsentiert"
let TRoot1&=sendmessage(Treeview&,$1100,0,TVInsert#)  Insertitem in TRoot&
TVITEM TRoot&,0,0,"das TreeView32 Control"
let TRoot1&=sendmessage(Treeview&,$1100,0,TVInsert#)  Insertitem in TRoot&
TVITEM TRoot1&,1,1,"für Profan² Ver. 6.0 32 Bit"
sendmessage(Treeview&,$1100,0,TVInsert#)              Insertitem in TRoot1&
TVitem 0,1,0,"Roland G. Hülsmann"
let Troot3&=sendmessage(Treeview&,$1100,0,TVInsert#)  Insertitem in Root
TVitem Troot3&,2,2,"Entwickler von Profan²"
sendmessage(Treeview&,$1100,0,TVInsert#)              Insertitem in Troot3&
USefont "Times New Roman",18,0,1,1,0
sendmessage(Treeview&,$030,%Font,0)
settext infotext&,add$("Anzahl der Items im Control: ",
str$(Sendmessage(Treeview&,$1105,0,0))) TVM_Getcount
sendmessage(Treeview&,$1102,$0002,Troot&)     TV_Expand, Expand
sendmessage(Treeview&,$1102,$0002,Troot3&)    TV_Expand, Expand
sendmessage(Treeview&,$1102,$0001,Troot&)    TV_Expand, Colapse

Whilenot equ(Ende%,1)

    waitinput
    Das Selektierte Itemhandle im Treeview ermitteln
    TVM-Getnextitem=$110A, TVN_Caret=$0009, Eine Adresse=TVitem#
    Let Edithandle&= sendmessage(Treeview&,$110A,$0009,TVitem#)
    Settext infotext&,""
    Das ermittelte Handle mit dem erhaltenen Handle
    aus der Insertitem Message vergleichen und anzeigen.
    case equ(Troot&,Edithandle&):
    Settext infotext&,"Selected Text: Richard Maurukas"
    case equ(Troot1&,Edithandle&):
    Settext infotext&,"Selected Text: das TreeView32 Control"
    case equ(Troot3&,Edithandle&):
    Settext infotext&,"Selected Text: Roland G. Hülsmann"

wend

Dispose TVitemtext#
dispose TVInsert#
dispose TVitem#
ImageList_Destroy(hImagelist&)
Dispose Iconname#
Dispose Hicon#
 
21.03.2005  
 



Hallo Frank...

[quote:c1cab62e5c]
...wahrscheinlich geht eine sichere Abfrage nur mit Subclassing, also ab XProfan.
[/quote:c1cab62e5c]
Ich habe dein Messageproblem schon seit einiger Zeit mitverfolgt, habe leider aber noch zu wenig mit Treeviews gearbeitet, um dort wirklich mitreden zu können.
Was du da über die A und W Messages schreibst, scheint mir so, als würde da das Profan Messagehandling etwas durcheinanderschmeißen. Demnach ist das aber auch keine Sache für Subclassing. Hat Roland schon mal was zu dem Thema gesagt?

Um Subclassing überhaupt realisieren zu können, muß (soweit ich weiß) das Profan Messagehandling abgeschaltet werden. Ist allein mit dem Abschalten des Messahgehandlings die Ursache der Fehlfunktion aber nicht schon behoben und muß dann Subclassing überhaupt noch stattfinden?

Einge Messages werden nur von den jeweiligen Fensterclassen bearbeitet ( z.B. die CTLCOLOR Messages, WM_ERASEBKGND und WM_QUERRYENDSESSION). Nur für diese Messages ist Subclassing interessant. Gehört die von dir aufgeführte Message wirklich dazu oder ist das Profankram?

Nochmals zu Subclassing im allgemeinen (ich hoffe, ich langweile nicht):
Farbige Buttons, farbige Edits, Listboxen und vor allen Dingen das Abfangen des Herunterfahrens (sogar NotePad macht das), sind vernünfig nur über Subclassing zu realisieren.
Wenn ich Subclassing richtig verstanden habe, ist das eigentlich eine unkomplizierte und sehr einfache Sache.
Das man richtiges Subclassing vernünfig mit Profan realisieren kann (auch mit XProfan), ist aber äußerst schwierig. Eine Komponente, die Profan so extrem einfach in der Handhabung macht, würde komplett wegfallen - das Messagehandling => Chaos für Einsteiger.
Subclassing der Messages WM_QUERYENDSESSION und WM_ENDSESSION wäre demnach eine sehr notwendige Erweiterung für DLLs für Profan (damit müßte es eigentlich gehen, ohne das Messagehandling zu killen)...
 
21.03.2005  
 




Rolf
Koch
Hi Rainer,

Du musst Dich doch nicht Entschuldigen, daß Du ein Prfellow Nutzer bist
Leider hab ich ja einen Hauptberuf (Leider ist gut - natürlich in Bezug auf die Sache) und wenn ich könnte würde ich gerne mehr Zeit in den ROC hängen. Ausserdem hab ich im Moment soviel um die Ohren - aber wer kennt dies nicht. Bin aber trotzdem an einem Update am arbeiten.
Aber nochmals: ROC ist ein Fenster- und Dialoghelfer und keine IDE.
Der Actionwriter ist nur da, um gewisse einfache Procs einzubauen um es später im Code einfacher zu haben.

Aber wie bereits oben erwähnt, haben die anderen hier ja einige Sachen zum Thema aufgezeigt.

Rolf
 
21.03.2005  
 




Frank
Abbing
Hallo Andreas,

> Ich habe dein Messageproblem schon seit einiger Zeit mitverfolgt, habe leider aber noch zu wenig mit Treeviews gearbeitet,
> um dort wirklich mitreden zu können.
> Was du da über die A und W Messages schreibst, scheint mir so, als würde da das Profan Messagehandling etwas durcheinanderschmeißen.
> Demnach ist das aber auch keine Sache für Subclassing. Hat Roland schon mal was zu dem Thema gesagt?

Ja, er sagte mir, er könne sich die Unterschiede zwischen Dialogmodus und dem normalen Windowmodus nicht recht erklären. Nur wird einmal die die Dialogproc angesprungen und einmal die Windowproc. Anscheinend macht Windows hier Unterschiede.

Messages werden normal im Superclassing abgefragt. Das ist die normale Abfrageroutine für Messages in einem Programmes. Verbiegt man den Zeiger auf die Fensterprozedur im nachhinein, spricht man vom Subclassing. Und genau in der Fensterprozedur werden Messages erkannt, verändert oder gelöscht. So ist es in anderen Sprachen. Profan ist etwas anderes, weil es die Messages für uns filtert und nur die wichtigsten an uns weiterleitet. Es bemuttert uns, was aber nicht immer erwünscht ist, und darum kann man dieses Verhalten abschalten.

> Um Subclassing überhaupt realisieren zu können, muß (soweit ich weiß) das Profan Messagehandling abgeschaltet werden.

Was ich eben ja schon sagte.

> Ist allein mit dem Abschalten des Messahgehandlings die Ursache der Fehlfunktion aber nicht schon behoben und muß dann Subclassing
> überhaupt noch stattfinden?

Ja. Weil Messages oft so schnell hintereinander kommen, das Profan die Werte zu langsam in seine Variablen schreibt. So werden viele Messages verschluckt, weil schon wieder aktuellere angekommen sind.

> Einge Messages werden nur von den jeweiligen Fensterclassen bearbeitet ( z.B. die CTLCOLOR Messages, WM_ERASEBKGND und WM_QUERRYENDSESSION).
> Nur für diese Messages ist Subclassing interessant. Gehört die von dir aufgeführte Message wirklich dazu oder ist das Profankram?

Alle Messages können subgeclassed werden. Die oben aufgeführte ist eine Notifymessage, also eine Sammelmessage, die unter WM_NOTIFY geführt wird.

> Nochmals zu Subclassing im allgemeinen (ich hoffe, ich langweile nicht):
> Farbige Buttons, farbige Edits, Listboxen und vor allen Dingen das Abfangen des Herunterfahrens (sogar NotePad macht das),
> sind vernünfig nur über Subclassing zu realisieren.
> Wenn ich Subclassing richtig verstanden habe, ist das eigentlich eine unkomplizierte und sehr einfache Sache.

Eigentlich ja.

> Das man richtiges Subclassing vernünfig mit Profan realisieren kann (auch mit XProfan), ist aber äußerst schwierig. Eine
> Komponente, die Profan so extrem einfach in der Handhabung macht, würde komplett wegfallen - das Messagehandling => Chaos
> für Einsteiger.

Richtig. Profan versucht die Sache für den User zu vereinfachen und läßt nur wichtige Messages durch. Will man alle Messages erhalten, dann ist dieses Profanverhalten abzustellen. Einige messages werden dennoch verschluckt. Subclassed man das Profanfenster aber, erhält man alle Messages, bevor Profan sie in die Finger bekommt.
Ich selber benutzte die Profan-Subclassing-Technik nicht, weil sie trotz allem immer noch zeilenweise interpretiert wird, wie das normale Programm auch. Darum verzögert es das ganze Messageshandling. Bestes Beispiel ist Andreas Miethes Splitterbar-Subclassingcode, der quälend langsam ist.
Von einer Dll aus aber macht Subclassing richtig Spass und es gibt keine Einschränkungen.

> Subclassing der Messages WM_QUERYENDSESSION und WM_ENDSESSION wäre demnach eine sehr notwendige Erweiterung für DLLs
> für Profan (damit müßte es eigentlich gehen, ohne das Messagehandling zu killen)...

Wenn du Profan2Cpp hast, wirst du sehr bald Dlls aus Profancode erzeugen können. Nativen Code.
Dann wird uns eine wahre Dll-Schwemme überrollen, jede Wette!
 
21.03.2005  
 




rainerhoefs
Hallo Frank, Andreas, Rolf und allen anderen die auf meine Frage geantwortet haben.

Mein Problem habe ich gelöst. Treevieweinträge werden ausgelesen, das Treeview verliert den Focus nach dem Doppelklick auf einen Eintrag, sodaß ich den erhaltenen String weiterverarbeiten kann, Auch wenn ich die Tatstautr benutze und mit + die einzelnen Einträge aufklappe, mit Hoch und Runter anwähle und mit Enter hole klappt alles, und jederzeit kann in den anderen Elemente geklickt und geschrieben werden. Menü und Toolbar funktionieren und so weiter. Ich habe nur die Events _OnEnter (_in der Api _OnReturn) und _OnDblclk in die WfEvents.Inc eingebaut. Damit war dann mein Problem gelöst.

Für all das was Ihr mit Assembler, SubClassing usw. geschrieben habt nochmals Danke, ist aber viel zu hoch für mich.

Frank,
Du erwähntest Prf2Cpp in der letzten Nachricht. Ja, ich habe die Testversion. Mein Profan Quellcode wird ohne jegliche Fehler auch Übersetzt. Wenn ich den allerdings mit DevC++ 4.* kompilieren will funktioniert überhaupt nichts. Manchmal gelingt es das Programm im RUN-Modus zum Laufen zu bringen. Allerdings wird dann der Dialog der beim Anklicken eines Toolbaricons erscheinen sollte nicht gestartet. Gibt es irgendwo genaue Angabe wie ich den Compiler einstellen muß damit auch eine EXE entsteht. (in der Form das auch ich es verstehe.) Denn das würd ich gerne noch kapieren und anwenden, da schon im Run-modus das Programm (Leider nur das HWND) super schnell läuft!

Danke im Voraus

Rainer Hoefs
 
22.03.2005  
 




Frank
Abbing
Hallo Rainer,

interessant, ich selber benutze auch den DevC++4 als Compiler, ohne Probleme. Ist wahrscheinlich nur eine Einstellungssache. Am besten fragst du mal direkt den Sebastian König im offiziellen Profan2Cpp Forum: [...] 
 
22.03.2005  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.713 Betrachtungen

Unbenanntvor 0 min.
Member 862464116.04.2024
RudiB.07.04.2022
Peter Max Müller23.10.2017
p.specht19.02.2017
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