Forum | | | | - Seite 1 - |
| Rolf Koch | Huhu Leute,
heute hab ich mal ne Frage: Hat einer ne Idee: @Control(STATIC,txt$,$54000106,x%,y%,breit%,hoch%,fenster&,$7918,%hinstance) dort liegen Edits drauf. Logischerweise kann ich diese nicht mit der Tabtaste anspringen. Logisch, denn es ist kein Dialog und ich kann diesem Teil keinen 512er Wert setzen. Auch ein Exwert $200 funktioniert nicht. Ich benötige das Teil aber. Leider klappt es mit Getkeystate(9) auch nicht. Ist halt blöde, wenn man nicht mit der Tabtaste zwischen den Edits hin und herspringen kann. Hab alles versucht.
Aber, habe noch ein bisschen Hoffnung , da nichts unmöglich ist.
Rolf |
| | | | |
| | | | | - Seite 2 - |
| Uwe ''Pascal'' Niemeier | Hallo Rolf!
Es sollen mehrere Gruppen von Elementen auf einmal ein- oder ausgeblendet werden (z.B. bei Reiterwechsel in einem Tab-Control)?
Wie wäre es mit rahmenlosen Dialogen statt Statics?
Vielleicht könnte man die Statics auch einem Subclassing unterziehen, wenn nur die Nebenwirkungen nicht wären...
SeeYou Pascal |
| | | | |
| | Rolf Koch | Hi Pascal,
ja wäre auch eine Möglichkeit, wenn man so einfach und schön wie ein Static den Dialogen von Hause aus eine weisse Hintergrundfarbe geben könnte. Von Hause aus = per Stil und nur nicht per Startpaint - Endpaint *würg*
Rolf |
| | | | |
| | | Rolf - Du bist doch mit der Thread.pcu vertraut - warum nimmst die nicht dafür - die ist doch wie dafür geschaffen. Ich kann Dir natürlich auch ein kleines demo dafür liefern.
Salve, iF |
| | | | |
| | Rolf Koch | Hi If,
klar bin ich damit vertraut, sogar sehr intim Also meinste dort Neuzeichnen? Ich hatte extra *würg* bei Startpaint geschrieben. Ich hasse Startpaint und Endpaint. Absolut langweilig
Aber wie gesagt: Nehmen wir uns dem Thema später nochmals an, da es im Moment doch nicht so wichtig ist. Es sei denn ein anderer interessiert sich weiterhin für die Fragestellung - ausser Startpaint LOL Rolf |
| | | | |
| | Jörg Sellmeyer | Hallo Rolf, Wie wäre es denn so:
Cls dlg&=Createdialog(%hwnd...) Static&=Control(Static,dlg&,....) auf dieses Static ein Bitmap mit Handle zaubern, geht ja auch mit Bitmap aus Speicher. Ein 1 x 1 Pixel reicht ja schon für einen weißen Hintergrund Button&=CreateButton(%dlg,...)
So hast Du die Controls auf dem Dialog und das Static gibt Dir den weißen Hintergrund Gruß Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 07.02.2005 ▲ |
| |
| | Rolf Koch | Danke auch Dir für die Antwort.
Jedoch genau so (ähnlich sieht es ja aus). Ich bin ein Staticfetischist und daher arbeite ich nur mit Bitmaps auf Statics. Ich benötige kein Bitmap auf dem Staticteil. Da ich per Stil das Staticcontrol in weiss färbe. Brauche also noch nicht mal ein Pixel Grafik. Also: Control(STATIC,txt$,$54000106,x%,y%,breit%,hoch%,fenster&,$10000,%hinstance) wäre weiss = Whiterect oder 54000105 = Grayrect oder 54000104 = Blackrect. Du siehst, es geht ja auch ohne Bitmap. Ich schätze Du hast leider meine Frage nicht verstanden. Wie ich was erstelle und so weiter ist ja klar . Schätzungsweise hast Du erst weiter unten angefangen zu lesen, da sieht es nach einem anderen Problem aus . Es geht lediglich um das Problem auf Statics erstellten Edits die Tabtaste abzufragen.
Abgesehen davon bleibt in diesem Fall immer noch das Problem
Meine Erstellung:
Dialog erstellen Static drauf (in weisem Stil) Controls drauf und schätzungsweise gibt es keine Lösung für das Problem, es sei den per Subclass., daß man die Tabtaste dort in den Editfeldern ansprechen kann.
Aber wie gesagt: Macht Euch jetzt nicht verrückt. Muss halt jetzt zuerst was anderes programmieren.
[quote:1267241905] Cls dlg&=Createdialog(%hwnd...) Static&=Control(Static,dlg&,....) auf dieses Static ein Bitmap mit Handle zaubern, geht ja auch mit Bitmap aus Speicher. Ein 1 x 1 Pixel reicht ja schon für einen weißen Hintergrund Button&=CreateButton(%dlg,...) [/quote:1267241905] Jo dürfte ich kennen - so arbeiten ROC, NOCTRAMIC (sehr viel) und einige meiner Beispielcodes doch.
Rolf |
| | | | |
| | | Moin Rolf, ich noch mal....
Mal schauen, ob ich dich bislang richtig verstanden habe: So weit bist du schon... KompilierenMarkierenSeparierenDeclare Static&,Edits&[5],fenster&,Focus%,txt$
WINDOWSTYLE 31
WINDOWTITLE "STATIC Control und Tabtaste",TXT$
Window 0,0-640,440
LET FENSTER&=@Control("Dialog","",$54000000,10,10,210,300,%HWND,$7917,%hinstance)
LET TXT$="Test"
LET STATIC&=@Control("STATIC",txt$,$54000106,0,0,210,300,fenster&,$7918,%hinstance,$10000)
LET EDITs&[1]=@CREATEEDIT(STATIC&,"",10,10,200,25)
LET EDITs&[2]=@CREATEEDIT(STATIC&,"",10,50,200,25)
LET EDITs&[3]=@CREATEEDIT(STATIC&,"",10,90,200,25)
LET EDITs&[4]=@CREATEEDIT(STATIC&,"",10,130,200,25)
LET EDITs&[5]=@CREATEEDIT(STATIC&,"",10,170,200,25)
@SETFOCUS(EDITs&[1])
LET FOCUS%=1
Whilenot %MENUITEM=-2
Waitinput
WEND
Die SKCONTROL.DLL habe ich jetzt mal weggelassen - damit kenne ich mich nicht aus - WS_TABSTOP hier nachträglich in die Controls einzufügen dürfte aber eigentlich kein Problem sein - oder doch? Welche Probleme hast du mit dem Dialog als Untergrund, warum soll der weg, und welche Probleme gibt es mit WINDOWSTYLE 512?
|
| | | | |
| | Rolf Koch | Hi AH,
jo komischerweise klappt da jetzt die Tabtaste. Ich hatte auch $10000 genommen. Vielleicht liegt es jetzt doch nur noch an den SKEdits. Aber wirklich gut so. Vielleicht kann ich es ja dann (wenn ich da weitermache) so umsetzen. Und evtl. den SKControls den Stile beibringen.
Thx Rolf |
| | | | |
| | Michael Dell | Hallo,
hab auch noch ein Beispiel mit WS_EX_CONTROLPARENT, weis allerdings nicht ob das mit den SKEdits auch läuft: KompilierenMarkierenSeparierenBitte tabulator Taste betätigen
Def GSC(1) !"USER32.DLL","GetSysColor"
Declare dlg1&,st1&,txt1&,ed1&,ed2&,ed3&,tst&
WindowStyle 538
Cls
dlg1& = Create("Dialog",%HWnd,"Test Dialog - Bitte tabulator Taste betätigen",40,40,400,300)
st1& = Control("Static","Dies ist ein Test!",$54010106,40,40,200,150,dlg1&,$10001,%HInstance,$050080) WS_EX_CONTROLPARENT =$050080
st1& = Control("Static","Dies ist ein Test!",$54010106,40,120,200,150,%HWnd,$10001,%HInstance,$050080) WS_EX_CONTROLPARENT =$050080
txt1& = Create( "Text",st1&,"Dies ist ein Test!",10, 10,180, 16)
ed1& = Create( "Edit",st1&, "Edit 1",10, 40,180, 18)
ed2& = Create( "Edit",st1&, "Edit 2",10, 70,180, 18)
ed3& = Create( "Edit",st1&, "Edit 3",10,100,180, 18)
Sleep 1000
ShowWindow(st1&,0)
Sleep 1000
ShowWindow(st1&,1)
WhileNot Or(Equ(%Key,2),Equ(%MenuItem,-2))
WaitInput
EndWhile
DestroyWindow(dlg1&)
End
Gruß
Michael... |
| | | Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 08.02.2005 ▲ |
| |
| | Rolf Koch | Ja, Michael, klappt auch bestens! Wie gesagt: Dann hängt es von (mit Tab u.s.w) einem anderen Faktor ab. Werde dann nochmals detailiert nachschauen, warum dies nicht so geht. Aber vielleicht geht es ja so jetzt mit den Beispielen, komme nur nicht dazu zu testen
Rolf |
| | | | |
| | CB | Hi,
möchte Euch allen danken - ihr habt mir sehr geholfen, ein Problem zu beseitigen. Im Prinzip gings um die gleiche Ausgangssituation wie bei Rolf - nur mit Tabcontrols. Wie das mit SKControls geht, kann ich Dir leider auch nicht sagen, ich schätze aber, Sebastian wird da sicher was tricksen können. Auch wenn Euch das keine neuen Erkenntnisse bringen wird, schicke ich mal meine Konstruktion (das primär fixierte 1. Tab ist zwar eine wilde Konstruktion, dazu habe ich von Frank und Pascal auch andere Lösungen bekommen, aber diese ist halt von mir - ich schmücke mich nun mal nur ungern mit fremden Federn): KompilierenMarkierenSeparierenDEF SetWindowLong(3) ! "User32","SetWindowLongA"
DEF GetWindowLong(2) ! "User32","GetWindowLongA"
DEF &WM_CLOSE $010
DEF &WM_COMMAND $0111
DEF &TCM_SETITEMSIZE $01329
DEF &TCS_FIXEDWIDTH 1024
DEF &TCM_GETITEMCOUNT $01304
DEF &GWL_STYLE -16
DEF MakeLong(2) Or(&(1),&(2)<<16)
DEF GetSysColor(1) !"USER32","GetSysColor"
UserMessages &WM_COMMAND,&WM_CLOSE
Declare Ende&,TabControl&,TabItems&,AllTabsBut&,AktivesTab&,Ende&,Tab2&
Declare EditTab1&,EditTab2_1&,EditTab2_2&,EditTab3&,EditTab4&,EditTab5&,EditTab6&
Declare Control1&,Control2&,Control3&,Text1&
PROC TAB1AKTIV
ShowWindow(AllTabsBut&,1)
ShowWindow(Control1&,1)
ENDPROC
PROC TAB1INAKTIV
ShowWindow(AllTabsBut&,0)
ShowWindow(Control1&,0)
ENDPROC
PROC TAB2AKTIV
ShowWindow(Control2&,1)
ENDPROC
PROC TAB2INAKTIV
ShowWindow(Control2&,0)
ENDPROC
PROC TAB3AKTIV
ShowWindow(Control3&,1)
ENDPROC
PROC TAB3INAKTIV
ShowWindow(Control3&,0)
ENDPROC
PROC TAB4AKTIV
ShowWindow(EditTab4&,1)
ENDPROC
PROC TAB4INAKTIV
ShowWindow(EditTab4&,0)
ENDPROC
PROC TAB5AKTIV
ShowWindow(EditTab5&,1)
ENDPROC
PROC TAB5INAKTIV
ShowWindow(EditTab5&,0)
ENDPROC
PROC TAB6AKTIV
ShowWindow(EditTab6&,1)
ENDPROC
PROC TAB6INAKTIV
ShowWindow(EditTab6&,0)
ENDPROC
WindowStyle 538
Cls
TabControl& = Create("TABCTRL",%hwnd,"TAB 1",0,0,width(%HWND),height(%HWND))
Tab2& = InsertTab(TabControl&,1,"TAB 2")
InsertTab(TabControl&,2,"TAB 3")
InsertTab(TabControl&,3,"TAB 4")
InsertTab(TabControl&,4,"TAB 5")
InsertTab(TabControl&,5,"TAB 6")
SetWindowLong(TabControl&,&GWL_STYLE,OR(GetWindowLong(TabControl&,&GWL_STYLE),$0440))
TabItems& = 1
SendMessage(TabControl&,&TCM_SETITEMSIZE,0,MakeLong(Width(TabControl&),20))
==== Elemente Tab 1 ====
Control1& = Control("Static","",$50000006,20,30,600,410,%HWND,1001,%hInstance,$050080)
EditTab1& = Create("Edit",Control1&,"Edit in Control 1",50,50,150,19)
Text1& = Create("Text",Control1&,"Dzt. ist nur Tab 1 sichtbar",170,325,170,15)
AllTabsBut& = Create("Button",%HWND,"Show all tabs",50,350,100,20) gesonderte Behandlung, deswegen dem Hauptfenster zugeordnet
==== Elemente Tab 2 ====
Control2& = Control("Static","",$50000006,25,50,250,200,%HWND,2001,%hInstance,$09)
Control2& = Control("Static","",$50010106,25,50,250,200,%HWND,2001,%hInstance,$050080) WS_EX_CONTROLPARENT =$050080
EditTab2_1& = Create("Edit",Control2&,"Edit 1 in Control 2",50,100,150,19)
EditTab2_2& = Create("Edit",Control2&,"Edit 2 in Control 2",50,125,150,19)
==== Elemente Tab 3 ====
Control3& = Control("Static","",$50000007,30,90,250,200,%HWND,3001,%hInstance,$050080)
EditTab3& = Create("Edit",Control3&,"Edit in Control 3",50,150,150,19)
==== Elemente Tab 4 ====
EditTab4& = Create("Edit",%HWND,"Normales Tab 4",50,200,150,19)
==== Elemente Tab 5 ====
EditTab5& = Create("Edit",%HWND,"Normales Tab 5",50,250,150,19)
==== Elemente Tab 6 ====
EditTab6& = Create("Edit",%HWND,"Normales Tab 6",50,300,150,19)
TAB1AKTIV
TAB2INAKTIV
TAB3INAKTIV
TAB4INAKTIV
TAB5INAKTIV
TAB6INAKTIV
AktivesTab& = GetActiveTab(Tabcontrol&)
AktivesTab& = 0
EnableWindow Tabcontrol&,0
PROC TABS_erweitern
EnableWindow Tabcontrol&,1
WindowStyle erweitern um feste Breite (alle Tabreiter sind gleich breit)
SetWindowLong(TabControl&,&GWL_STYLE,OR(GetWindowLong(TabControl&,&GWL_STYLE),OR(&TCS_FIXEDWIDTH,$0440)))
Anzahl der Tabreiter ermitteln
TabItems& = SendMessage(TabControl&,&TCM_GETITEMCOUNT,0,0)
Breite und Hoehe setzen (Par1 bei MakeLong ist die Breite, Par2 bei Makelong ist die Höhe)
SendMessage(TabControl&,&TCM_SETITEMSIZE,0,MakeLong(Width(TabControl&)/TabItems&,20))
AktivesTab& = 0
ShowWindow(Text1&,0)
ENDPROC
Whilenot Ende&
Waitinput
AktivesTab& = GetActiveTab(Tabcontrol&) Ermittelt das selektierte Tab
If %UMessage = &WM_CLOSE
Ende& = 1
ElseIf %UMessage = &WM_COMMAND
If &ULParam = AllTabsBut&
TABS_erweitern
TAB1INAKTIV
TAB2AKTIV
TAB3INAKTIV
TAB4INAKTIV
TAB5INAKTIV
TAB6INAKTIV
TAB1AKTIV das kapier ich zwar nicht so ganz, aber es geht nur so,
TAB2INAKTIV sonst wird der Inhalt von Tab1 nicht gleich angezeigt!
ShowWindow(AllTabsBut&,0)
EndIf
EndIf
If tabchanged(TabControl&) Tab gewechselt?
If AktivesTab& = 0
TAB1AKTIV
ShowWindow(AllTabsBut&,0)
TAB2INAKTIV
TAB3INAKTIV
TAB4INAKTIV
TAB5INAKTIV
TAB6INAKTIV
ElseIf AktivesTab& = 1
TAB1INAKTIV
TAB2AKTIV
TAB3INAKTIV
TAB4INAKTIV
TAB5INAKTIV
TAB6INAKTIV
ElseIf AktivesTab& = 2
TAB1INAKTIV
TAB2INAKTIV
TAB3AKTIV
TAB4INAKTIV
TAB5INAKTIV
TAB6INAKTIV
ElseIf AktivesTab& = 3
TAB1INAKTIV
TAB2INAKTIV
TAB3INAKTIV
TAB4AKTIV
TAB5INAKTIV
TAB6INAKTIV
ElseIf AktivesTab& = 4
TAB1INAKTIV
TAB2INAKTIV
TAB3INAKTIV
TAB4INAKTIV
TAB5AKTIV
TAB6INAKTIV
ElseIf AktivesTab& = 5
TAB1INAKTIV
TAB2INAKTIV
TAB3INAKTIV
TAB4INAKTIV
TAB5INAKTIV
TAB6AKTIV
EndIf
EndIf
EndWhile
End
Gruß, Christian |
| | | | |
| | | | - Seite 3 - |
| | Michael Dell | Hallo,
an Tac- Controls Schraub ich auch grad rum, hier der aktuelle Stand: KompilierenMarkierenSeparierenHier ein Beispiel wie man etwas einfacher die manchmal zahlreichen Controls auf Tabs umschalten kann!!!!
für jedes Tab gib es eine Basis-Static die den gesammten nutzbaren Bereich ausfüllt erst hierauf und nicht
auf dem eigenlichen Tab-Control werden alle anderen Controls eingerichtet
Def GSC(1) !"USER32.DLL","GetSysColor"
Def gSelTab(1) SendMessage(&(1),$130B,0,0) aktuelles Tab ermitteln
Def sSelTab(2) SendMessage(&(1),$130C,&(2),0) neues Tab setzen
Declare tbc1&,stbc&[5],LastAcT&
Proc ChangeActTab
Parameters TabNr&
sSelTab(tbc1&,TabNr&)
SetFocus(tbc1&)
ShowWindow(stbc&[LastAcT&],0) Deaktivieres zuletzt aktives Tab (Das Basis-Static für dieses Tab!!)
ShowWindow(stbc&[TabNr&],1) Aktiviere das nun aktive Tab (Das Basis-Static für dieses Tab!!)
LastAcT& = TabNr&gSelTab(tbc1&) Welches Tab ist nun Aktiv? (z.B.: durch anklicken)
EndProc
WindowStyle 538
Window Add(%maxX,10),0-640,480 Fenster ausserhalb erstellen
Cls GSC(15)
Aufbau der gesammten Tab-Controls und deren Kinder
tbc1& = Control( "SysTabControl32","",$50010001,220, 20,400,360, %HWnd,$a9000,%HInstance,$010000)Tab-Control erzeugen
InsertTab(tbc1&,0,"Eins") Erstes Tab anlegen
InsertTab(tbc1&,1,"Zwei") weiteres Tab anlegen
InsertTab(tbc1&,2,"Drei") weiteres Tab anlegen
InsertTab(tbc1&,3,"Vier") weiteres Tab anlegen
stbc&[0] = Control( "STATIC", "",$50010006, 2, 24,396,334, tbc1&,$a9001,%HInstance,$010000)Basis-Static für Tab0
Control( "STATIC","Tabulatortaste",$50000000, 20, 50,140, 18,stbc&[0],$a9001,%HInstance)Textfeld für Tab0
Control( "EDIT", "A",$50010000, 20, 80,140, 20,stbc&[0],$a9001,%HInstance,$010200)Edit für Tab0
Control( "EDIT", "B",$50010000, 20,110,140, 20,stbc&[0],$a9001,%HInstance,$010200)Edit für Tab0
Control( "EDIT", "C",$50010000, 20,140,140, 20,stbc&[0],$a9001,%HInstance,$010200)Edit für Tab0
ShowWindow(stbc&[0],0) Basis-Static für Tab0 deaktivieren
stbc&[1] = Control( "STATIC", "",$50010006, 2, 24,396,334, tbc1&,$a9002,%HInstance,$010000)Basis-Static für Tab1
Control( "STATIC","Tabulatortaste",$50000000, 20, 50,140, 18,stbc&[1],$a9002,%HInstance)Textfeld für Tab1
Control("ListBox", "",$50010000, 20, 80,140,120,stbc&[1],$a9002,%HInstance,$010200)ListBox für Tab1
ShowWindow(stbc&[1],0) Basis-Static für Tab1 deaktivieren
stbc&[2] = Control( "STATIC", "",$50010006, 2, 24,396,334, tbc1&,$a9003,%HInstance,$010000)Basis-Static für Tab2
Control( "STATIC", "Text zu 3",$50000000, 20, 50,140, 18,stbc&[2],$a9003,%HInstance)Textfeld für Tab2
Control( "EDIT", "D",$50010000, 20, 80,140, 20,stbc&[2],$a9003,%HInstance,$010200)Edit für Tab0
ShowWindow(stbc&[2],0) Basis-Static für Tab2 deaktivieren
stbc&[3] = Control( "STATIC", "",$50010006, 2, 24,396,334, tbc1&,$a9004,%HInstance,$010000)Basis-Static für Tab3
Control( "STATIC", "Text zu 4",$50000000, 20, 50,140, 18,stbc&[3],$a9004,%HInstance)Textfeld für Tab3
Control( "EDIT", "F",$50010000, 20, 80,140, 20,stbc&[3],$a9004,%HInstance,$010200)Edit für Tab0
ShowWindow(stbc&[3],0) Basis-Static für Tab3 deaktivieren
LastAcT& = gSelTab(tbc1&) speichern des zuletzt aktiven Tabs!
ShowWindow(stbc&[LastAcT&],1) dessen Basis-Static aktivieren
Window 0,0-640,480 Fenster in den sichtbaren Bereich
WhileNot Or(Equ(%Key,2),Equ(%MenuItem,-2)) warte auf Beenden (X)
WaitInput
Case TabChanged(tbc1&): ChangeActTab(gSelTab(tbc1&)) Wenn Tabs verändert, Anzeige aktuallisieren
EndWhile
DestroyWindow(tbc1&) Zerstöre Tab-Control und alle Kinder
End
Nachtrag: Kleine verbesserung - 09.02.05 / 3:10
Salu
Michael... |
| | | Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 08.02.2005 ▲ |
| |
|
AntwortenThemenoptionen | 6.097 Betrachtungen |
ThemeninformationenDieses Thema hat 8 Teilnehmer: |