Deutsch
Forum

TreeView Problem die zweite

 

Alfred
Wagner
Hallo Profaner

Zuerst mal der code zum testen
KompilierenMarkierenSeparieren
!
 $P+
SetErrorLevel 0
DEF GETSYSCOLOR(1) !"USER32","GetSysColor"
 $U F:PROGRAMMETOOLSXPROFAN9ROCKLIBTRV.PCU = TRV_ (Treeview Unit...) Pfad Anpassen !!
DECLARE TRVDLL$,BUTTON1&,TVITEM0&,TVITEM1&,Checkbox1&,Text1$,Text2&,Text3&
DECLARE TREEVIEW&,IMAGELIST&
TRVDLL$= "Shell32.DLL"
IMAGELIST&=IMAGELIST_CREATE(16,16,32,3,3) IMAGELIST ERZEUGEN

PROC CREATETREEVIEW

    TRV_CREATETREEVIEW %HWND,0013,0010,0120,0285
    TREEVIEW&=&(0)
    REPAINT

ENDPROC

PROC TREEVIEWITEMS

    TRV_SETTEXTCLR TREEVIEW&,0
    TRV_SETBACKCLR TREEVIEW&,RGB(255,255,255)
    TRV_INSERTICON "#1",TRVDLL$
    TRV_INSERTITEM TVITEM0&,0,"1",TREEVIEW&
    TVITEM0&=&(0)
    TRV_INSERTICON "#2",TRVDLL$
    TRV_INSERTITEM TVITEM0&,1,"2",TREEVIEW&
    TVITEM1&=&(0)
    TRV_EXPAND TREEVIEW&,TVITEM0&
    TRV_EXPAND TREEVIEW&,TVITEM1&

ENDPROC

PROC GET_TREEVIEW ABFRAGEN DER TREEVIEWITEMS

    IF GETFOCUS(TREEVIEW&)

        IF TRV_GETITEM(TREEVIEW&)=TVITEM0&

            TVITEM0_ONCLICK
            SETFOCUS(%HWND)

        ENDIF

        ----------------------------------------------------------

        IF TRV_GETITEM(TREEVIEW&)=TVITEM1&

            TVITEM1_ONCLICK
            SETFOCUS(%HWND)

        Endif

    Endif

ENDPROC

Proc Löschen

    @DestroyWindow (Text2&),1
    @DestroyWindow (Text3&),1
    @DestroyWindow (Checkbox1&),1Checkbox verschwindet
    @DestroyWindow (Text1$),1Text verschwindet nicht

Endproc

PROC TVITEM0_ONCLICK

    Löschen
    Text1$ = "Dieser Text sollte beim Klick auf das zweite Treeview verschwinden"
    TextColor RGB($FF,$00,$00),-1
    Drawtext 170,50,Text1$
    Checkbox1& = @Control("BUTTON","",$50008003,150,50,12,12,%HWND,100,%Hinstance,$10000)

ENDPROC

PROC TVITEM1_ONCLICK

    Löschen
    Text2& = @Create("Text",%HWND,"Tut er aber nicht ! Liegt wahrscheinlich an DrawText oder?",150,80,300,15)
    Text3& = @Create("Text",%HWND,"Weiß jemand Rat ?",150,100,300,15)

ENDPROC

WINDOWSTYLE 31
WINDOWTITLE "Neues Fenster"
WINDOW SUB(DIV(%MAXX,2),DIV(543,2)),SUB(DIV(%MAXY,2),DIV(344,2))-543,344
SETTRUECOLOR 1
DECLARE ENDE%
CLS GETSYSCOLOR(15)
USEFONT "MS Sans Serif",13,0,0,0,0
SETDIALOGFONT 1
CREATETREEVIEW TREEVIEW ERSTELLEN
TREEVIEWITEMS ITEMS IN TREEVIEW EINFÜGEN
BUTTON1& = CREATE("BUTTON",%HWND,"Ende",0407,0268,0070,0021)
Hauptschleife
SETFOCUS(%HWND)

WHILENOT ENDE%

    WAITINPUT
    GET_TREEVIEW TREEVIEW ABFRAGE

    If @EQU(%KEY,2)

        LET ENDE%= 1

    ELSEIF @EQU(%KEY,4)

    ELSEIF GETFOCUS(BUTTON1&) BUTTON

        ENDE%=1

    ELSEIF GETFOCUS(TVITEM0&) BUTTON

        TVITEM0_ONCLICK

    ELSEIF GETFOCUS(TVITEM1&) BUTTON

        TVITEM1_ONCLICK

    ENDIF

WEND

IMAGELIST_DESTROY(IMAGELIST&)

geht es daß der besagte Text der mit DrawText erstellt wurde gelöscht wird?

danke schon mal im vorhinein

Alfred mit Familie
 
WinXP-Home ,XProfan10

Alfreds ... Freeware :  [...] 
07.07.2006  
 



Hallo Alfred
Es liegt an Drawtext....

DrawText hat kein Handle und kann deshalb nicht zerstört (Destroy...) werden
ich habe es mal abgeändert und so klappt alles
KompilierenMarkierenSeparieren
DECLARE txt%

Proc Löschen

    @DestroyWindow (Text2&),1
    @DestroyWindow (Text3&),1
    @DestroyWindow (Checkbox1&),0Checkbox verschwindet
    @DestroyWindow (txt%),0Text verschwindet jetzt

Endproc

PROC TVITEM0_ONCLICK

    Löschen
    Text1$ = "Dieser Text sollte beim Klick auf das zweite Treeview verschwinden"
    TextColor RGB($FF,$00,$00),-1
    Drawtext 170,50,Text1$
    txt%=CREATE("TEXT",%HWnd,text1$,170,50,400,20)
    Checkbox1& = @Control("BUTTON","",$50008003,150,50,12,12,%HWND,100,%Hinstance,$10000)

ENDPROC


DrawText überschreibe ich immer mit MKSTR$( ,anzahl%) und setze dabei TEXTCOLOR auf RGB(hintergrund%),RGB(hintergrund%)
 
07.07.2006  
 




Alfred
Wagner
Hallo Horst
danke für deine Hilfe

Aber leider ist der Text nicht mehr farbig,oder hab ich was übersehen

Grüße

Alfred mit Familie
 
WinXP-Home ,XProfan10

Alfreds ... Freeware :  [...] 
07.07.2006  
 



Hallo Alfred
Ein Text, der mit CREATE(TEXT,usw..... erstellt wird, ist immer schwarz
Daher mein Tipp mit MKSTR$( ,anzahl%)
Beispiel:

CLS
TEXTCOLOR RGB(200,0,0),RGB(255,255,255)
DrawText 50,100,Dieser Text ist rot auf weissem Hintergrund

- in die Procedur Löschen schreibst Du jetzt:

TEXTCOLOR RGB(255,255,255),RGB(255,255,255)
DrawText 50,100,MKSTR$(X,50)

Die Zahl 50 ist nur angenommen. Musst Du anpassen. Jetzt wird beim Aufruf der Procedur Löschen der rote Text weiss (Hintergrund) überschrieben. Das kannst Du natürlich mit jeder Farbe machen. - GetSyscolor(15) z. B.
 
07.07.2006  
 



Hab jetzt nochmal den Text komplett umgeschrieben. Drawtext stellt jetzt farbigen Text zur Verfügung und dieser wird gelöscht - Denke ich konnte helfen
KompilierenMarkierenSeparieren
 $P+
SetErrorLevel 0
DEF GETSYSCOLOR(1) !"USER32","GetSysColor"
 $U G:XPROFAN_10_ENTWICKLUNGSANDKISTETRV.PCU = TRV_ (Treeview Unit...) Pfad Anpassen !!
DECLARE TRVDLL$,BUTTON1&,TVITEM0&,TVITEM1&,Checkbox1&,Text1$,Text2&,Text3&
DECLARE TREEVIEW&,IMAGELIST&
TRVDLL$= "Shell32.DLL"
IMAGELIST&=IMAGELIST_CREATE(16,16,32,3,3) IMAGELIST ERZEUGEN

PROC CREATETREEVIEW

    TRV_CREATETREEVIEW %HWND,0013,0010,0120,0285
    TREEVIEW&=&(0)
    REPAINT

ENDPROC

PROC TREEVIEWITEMS

    TRV_SETTEXTCLR TREEVIEW&,0
    TRV_SETBACKCLR TREEVIEW&,RGB(255,255,255)
    TRV_INSERTICON "#1",TRVDLL$
    TRV_INSERTITEM TVITEM0&,0,"1",TREEVIEW&
    TVITEM0&=&(0)
    TRV_INSERTICON "#2",TRVDLL$
    TRV_INSERTITEM TVITEM0&,1,"2",TREEVIEW&
    TVITEM1&=&(0)
    TRV_EXPAND TREEVIEW&,TVITEM0&
    TRV_EXPAND TREEVIEW&,TVITEM1&

ENDPROC

PROC GET_TREEVIEW ABFRAGEN DER TREEVIEWITEMS

    IF GETFOCUS(TREEVIEW&)

        IF TRV_GETITEM(TREEVIEW&)=TVITEM0&

            TVITEM0_ONCLICK
            SETFOCUS(%HWND)

        ENDIF

        ----------------------------------------------------------

        IF TRV_GETITEM(TREEVIEW&)=TVITEM1&

            TVITEM1_ONCLICK
            SETFOCUS(%HWND)

        Endif

    Endif

ENDPROC

Proc Löschen

    @DestroyWindow (Text2&),1
    @DestroyWindow (Text3&),1
    ------------------------------------------------------------------------- NEU
    @DestroyWindow (Checkbox1&),0Checkbox verschwindet
    TEXTCOLOR GetSyscolor(15),GetSyscolor(15) Vorder- Hintergrund gleich
    DrawText 170,50,text1$
    TextColor RGB($FF,$00,$00),-1 alte Farben wieder einstellen für neuen Aufruf
    ------------------------------------------------------------------------- NEU

Endproc

PROC TVITEM0_ONCLICK

    Löschen
    Text1$ = "Dieser Text sollte beim Klick auf das zweite Treeview verschwinden"
    TextColor RGB($FF,$00,$00),-1
    Drawtext 170,50,Text1$
    Checkbox1& = @Control("BUTTON","",$50008003,150,50,12,12,%HWND,100,%Hinstance,$10000)

ENDPROC

PROC TVITEM1_ONCLICK

    Löschen
    Text2& = @Create("Text",%HWND,"Tut er aber nicht ! Liegt wahrscheinlich an DrawText oder?",150,80,300,15)
    Text3& = @Create("Text",%HWND,"Weiß jemand Rat ?",150,100,300,15)

ENDPROC

WINDOWSTYLE 31
WINDOWTITLE "Neues Fenster"
WINDOW SUB(DIV(%MAXX,2),DIV(543,2)),SUB(DIV(%MAXY,2),DIV(344,2))-543,344
SETTRUECOLOR 1
DECLARE ENDE%
CLS GETSYSCOLOR(15)
USEFONT "MS Sans Serif",13,0,0,0,0
SETDIALOGFONT 1
CREATETREEVIEW TREEVIEW ERSTELLEN
TREEVIEWITEMS ITEMS IN TREEVIEW EINFÜGEN
BUTTON1& = CREATE("BUTTON",%HWND,"Ende",0407,0268,0070,0021)
Hauptschleife
SETFOCUS(%HWND)

WHILENOT ENDE%

    WAITINPUT
    GET_TREEVIEW TREEVIEW ABFRAGE

    If @EQU(%KEY,2)

        LET ENDE%= 1

    ELSEIF @EQU(%KEY,4)

    ELSEIF GETFOCUS(BUTTON1&) BUTTON

        ENDE%=1

    ELSEIF GETFOCUS(TVITEM0&) BUTTON

        TVITEM0_ONCLICK

    ELSEIF GETFOCUS(TVITEM1&) BUTTON

        TVITEM1_ONCLICK

    ENDIF

WEND

IMAGELIST_DESTROY(IMAGELIST&)
 
07.07.2006  
 




Alfred
Wagner
Danke Horst
funktioniert tadellos

Grüße

Alfred mit Familie
 
WinXP-Home ,XProfan10

Alfreds ... Freeware :  [...] 
07.07.2006  
 



Hab da einen kleinen Einwand!

Das Prinzip, mit Drawtext einen Drawtext abzulöschen funktioniert oft nicht - besonders auf Standartinstallationen.

Auf einem unversautem WinXP ist IMHO ClearType aktiv, also die Bildschirmschriftenglättung.

Da diese oft aktiv ist ergibt das Verfahren hässliche Ränder - tatsächlich verschwindet der Text garnicht wirklich sondern es bleiben Fragmente übrig.

Wenn es schon über Pixeltext geschehen muss, dann muss der überschriebene Bereich richtig wiederhersgestellt werden.
Man könnte eine Kopie der Pixel im Memorybitmap anlegen und diesen Bereich zum löschen nutzen, oder mit Rectangle den Text ablöschen.

Text auf Text ist aber keine so gute Idee.
 
08.07.2006  
 



Hallo iF

[quote:b8ddee25dd]Text auf Text ist aber keine so gute Idee.[/quote:b8ddee25dd]
Gebe Dir natürlich recht - war ja auch nur ein Denkanstoss - meinereiner geht hin und vergrössert mit USEFONT.... den Schriftfont und dann sind die Ränder auch vergessen. Du musst mir immer zugute halten, dass ich kaum mit irgendwelchen API- oder anderen Befehlen arbeite und letztendlich doch zum Ziel komme - siehe meine UNIT - es sind keine negativen Kritiken eingelaufen oder bin ich der Kritik nicht wert ?
 
08.07.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

888 Betrachtungen

Unbenanntvor 0 min.
Member 862464114.04.2024
RudiB.07.04.2022
Andreas Koch12.04.2012
boh108.06.2011
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

unbekannt (4x)
Alfred Wagner (3x)
iF (1x)


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