Forum | | | | Dieter Zornow | Ich habe in meinem Programm Probleme eine mit Create("Bitmap" .... erstellte Grafik je nach Tab anzuzeigen oder zu verstecken, Habe dann mal zum Testen ein Minimalbeispiel gemacht und das verhält sich total anders als in meinem Original. Im Original bekomme ich es nicht versteckt. Hier wird es zunächst nicht angezeigt, obwohl es das müsste. Aber noch klicken auf die Reiter erscheint es dann doch. Habe dann die Abfrage getestet mit TabChanged() getfocus() und Clicked(). Dabei ist noch eine Merkwürdigkeit aufgetaucht. Das Tabcontrol erhält scheinbar niemals den Fokus, denn sonst müsste im Hauptfenster meine Abfrage erscheinen. Ich kann stundenlang klicken, das Tabcontrol hat keinen Fokus erst wenn ich auf einen Reiter zweimal hintereineinander klicke hat es von da an den Fokus.Clicked() und Tabchanged() reagieren aber auch ohne Fokus In diesem Zusammenhang scheint XProfan je nach Laune zu reagieren, denn die Ausgangsbasis war, ich kann die Bitmap nicht verstecken. Hier mal ein Testcode. ich hoffe auf die Schnelle sind keine Fehler drin. KompilierenMarkierenSeparierenDef Show(1) ShowWindow(@&(1), 1)
Def Hide(1) ShowWindow(@&(1), 0)
var ende% = 0
cls
dialog()
Proc SetActiveTab
Parameters Tab&,Index&
SendMessage(Tab&,$1330,Index&, 0)
EndProc
PROC DIALOG
var DLG& = CREATE("DIALOG",%Hwnd,"Neues Fenster",(%maxx/2 - 534/2),(%maxy/2 - 500/2),534,500)
Var tc& = CREATE("TABCTRL",DLG&,"Tab 1",0003,0003,0520,0412)
InsertTab(tc&,1,"Tab 2")
InsertTab(tc&,2,"Tab 3")
InsertTab(tc&,3,"Tab 4")
var hpic& = Create("hSizedPic",-1,$WinPath+"\Angler.bmp",100,100,1)
var bmp& = Create("BITMAP",dlg&,hpic&,10,35)
var but& = Create("Button",dlg&,"Verstecke",10,250,100,25)
setActivetab(tc&,0)
show(bmp&)
whilenot ende%
waitinput
If %key = 2
ende% = 1
elseif TabChanged(tc&)
elseif getfocus(tc&)
elseif clicked(tc&)
case getfocus(tc&):Print "Focus"
case getactivetab(tc&) = 0:show(bmp&)
case getactivetab(tc&) = 1:hide(bmp&)
case getactivetab(tc&) = 2:hide(bmp&)
case getactivetab(tc&) = 3:show(bmp&)
elseif Clicked(but&)
Hide(bmp&)
endif
endwhile
deleteobject hpic&
end
endproc
Gruß
Dieter |
| | | Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 15.08.2008 ▲ |
| |
| | Jörg Sellmeyer | Also, wenn Du die Bitmap auf tc& plazierst, erscheint sie auch gleich und die Buttonabfrage darf natürlich nicht hinter GetFocus(tc&) erfolgen. Wenn man hinter die Buttonabfrage wieder den Focus auf tc& setzt, funktioniert es auch. KompilierenMarkierenSeparieren $H commctrl.ph
Def Show(1) ShowWindow(@&(1), 1)
Def Hide(1) ShowWindow(@&(1), 0)
var ende% = 0
cls
dialog()
Proc SetActiveTab
Parameters Tab&,Index&
SendMessage(Tab&,$1330,Index&, 0)
EndProc
PROC DIALOG
var DLG& = CREATE("DIALOG",%Hwnd,"Neues Fenster",(%maxx/2 - 534/2),(%maxy/2 - 500/2),534,500)
Var tc& = CREATE("TABCTRL",DLG&,"Tab 1",0003,0003,0520,0412)
InsertTab(tc&,1,"Tab 2")
InsertTab(tc&,2,"Tab 3")
InsertTab(tc&,3,"Tab 4")
var hpic& = Create("hSizedPic",-1,$WinPath+"\Angler.bmp",100,100,1)
var bmp& = Create("BITMAP",tc&,hpic&,10,35)
var but& = Create("Button",dlg&,"Verstecke",10,250,100,25)
setActivetab(tc&,0)
show(bmp&)
whilenot ende%
waitinput
If %key = 2
ende% = 1
elseif TabChanged(tc&)
elseif TabChanged(tc&)
elseif clicked(tc&)
case getfocus(tc&):Print "Focus"
case getactivetab(tc&) = 0:show(bmp&)
case getactivetab(tc&) = 1:hide(bmp&)
case getactivetab(tc&) = 2:hide(bmp&)
case getactivetab(tc&) = 3:show(bmp&)
elseif Clicked(but&)
Hide(bmp&)
SetFocus(tc&)
endif
endwhile
deleteobject hpic&
end
endproc
Ich würde es allerdings eher so lösen: KompilierenMarkierenSeparieren $H commctrl.ph
Def Show(1) ShowWindow(@&(1), 1)
Def Hide(1) ShowWindow(@&(1), 0)
var ende% = 0
cls
dialog()
Proc SetActiveTab
Parameters Tab&,Index&
SendMessage(Tab&,$1330,Index&, 0)
EndProc
PROC DIALOG
var DLG& = CREATE("DIALOG",%Hwnd,"Neues Fenster",(%maxx/2 - 534/2),(%maxy/2 - 500/2),534,500)
Var tc& = CREATE("TABCTRL",DLG&,"Tab 1",0003,0003,0520,0412)
InsertTab(tc&,1,"Tab 2")
InsertTab(tc&,2,"Tab 3")
InsertTab(tc&,3,"Tab 4")
var hpic& = Create("hSizedPic",-1,$WinPath+"\Angler.bmp",100,100,1)
var bmp& = Create("BITMAP",tc&,hpic&,10,35)
var but& = Create("Button",dlg&,"Verstecke",10,250,100,25)
setActivetab(tc&,0)
show(bmp&)
whilenot ende%
waitinput
Case Clicked(tc&):ShowWindow(bmp&,(GetActivetab(tc&) = 0) Or (GetActivetab(tc&) = 3))
If %key = 2
ende% = 1
elseif TabChanged(tc&)
Hier kann man noch andere Sachen machen
elseif Clicked(but&)
Hide(bmp&)
SetFocus(tc&)
endif
endwhile
deleteobject hpic&
end
endproc
|
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 15.08.2008 ▲ |
| |
| | Dieter Zornow | @Jörg,
Danke, in meinem Originalprogramm frage ich auch mit Tabchanged() ab. Das war nur ein Test mit dem Fokus. Seltsam ist schon, dass das Tabcontrol erst nach einem Doppelklick den Fokus erhält. Zum zweiten sollte das Bild auch auf dlg& sofort erscheinen, denn Controls sollten meiner Meinung nach nicht auf das Tabcontrol. Wenn man in meinem Beispiel mit Tabchanged() abfragt erscheint es ja auch aber erst nach dem Klick auf die Tabs. Das ist eigentlich alles sehr seltsam und ich kann es mir nicht erklären. Ich will halt immer wissen, warum es sich so verhält. Bin aber immer noch am suchen warum sich das Bild in meinem Originalprogramm egal wo ich es hinlege nicht verstecken lässt. ich werde wohl alles ändern und jedes Tab auf ein eigenes Control legen, das ich dann gesamt verstecke und anzeige, denn ich habe auf jedem Tab, bei 6 Tabs, ca 17 Controls und Profan ist zu langsam beim Erstellen die nichtangezeigten gleich zu verstecken, so dass alles flackert beim Aufbau.
Gruß
Dieter |
| | | Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 16.08.2008 ▲ |
| |
|
AntwortenThemenoptionen | 829 Betrachtungen |
ThemeninformationenDieses Thema hat 2 Teilnehmer: |