Forum | | | | 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 |
| | | | |
| | | 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 KompilierenMarkierenSeparierenDECLARE 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%) |
| | | | |
| | 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 |
| | | | |
| | | 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. |
| | | | |
| | | 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&)
|
| | | | |
| | Alfred Wagner | Danke Horst funktioniert tadellos
Grüße
Alfred mit Familie |
| | | | |
| | | 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. |
| | | | |
| | | 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 ? |
| | | | |
|
AntwortenThemenoptionen | 888 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |