| |
|
|
- Seite 1 - |
|
Andre Hilprecht | Hallo zusammen,
GETFOCUS(EDIT1%) funktioniert aber GETFOCUS(Text1%) nicht.
Nach einem Waitinput frage ich was denn nun geklickt wurde, also kommen dann die Zeilen
IF GETFOCUS(EDIT1%) Eingabe ELSEIF GETFOCUS(EDIT2%) Eingabe ELSEIF GETFOCUS(TEXT1%) Eingabe ENDIF
Klick auf Edit1 - sprung zur Proc Eingabe Klick auf Edit2 - sprung zur Proc Eingabe Klick auf Text1 - Nix pasiert
Was mache ich falsch, wo ist mein Denkfehler? Gruß Andre |
|
|
| Ein PC ist die beste Möglichkeit Fehler zu beheben, die ohne PC gar nicht passiert wären. -frei aus Murphy's Computergesetzen
XProfan X2, Win8 Pro 64bit Update von Win7 i5 / 3,2GHz 4 GB RAM Treibstoff: Radeberger Pils | 17.02.2007 ▲ |
|
|
|
|
| |
|
- Seite 1 - |
|
Andre Hilprecht | Das habe ich geahnt, habe mir mal das Teil angesehen und komme damit überhaupt nicht klar. Jetzt brauche ich den XPSE-Compiler, toll, ich bin begeistert. Und nachdem ich nun alles an seinem Platz hatte, also den Verweis auf die Include und den auf den XPSE-Compiler, sagt er mir jetz Unitdefinitionsdatei <SCROLLAREA> fehlt, obwohl sie da ist und dann Programm fehlerhaft.
Also das hilft mir nicht wirklich weiter.
SetScrollPos und SetScrollRange setzen doch eben nur die Position des Knopfes innerhalb des VScroll1%-Elementes, nicht aber das jetzt das Hauptfenster selbst gescrollt wird. Das bräuchte ich doch nur, wenn ich das Fenster in einer gescrollten Position speichern/schließen will um es an dieser Position wieder zu öffnen. Dann muss ich doch auch den Knopf an die Position setzen.?
Oder bin ich da vollkommen auf dem falschen Dampfer?
Gruß Andre |
|
|
| Ein PC ist die beste Möglichkeit Fehler zu beheben, die ohne PC gar nicht passiert wären. -frei aus Murphy's Computergesetzen
XProfan X2, Win8 Pro 64bit Update von Win7 i5 / 3,2GHz 4 GB RAM Treibstoff: Radeberger Pils | 17.02.2007 ▲ |
|
|
|
|
Rolf Koch | @AH, klar gehts über die API und genauso mit Profanboardmitteln. Jedoch sind die so Stur, es wird nichts LIVE aktualisiert. Für sowas ist Subclass einfach genial!!! |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
| Ich sagte ja: Zur Not . |
|
|
| |
|
|
|
Michael Wodrich | @Andre Was soll denn jetzt genau gemacht werden? Ein Hauptfenster mit Scrollbalken versehen?
Mit SetScrollRange stellt man ein, wie die Ergebnisse zu werten sind. Zum Beispiel von 0 bis 10000. Jetzt kann ich dann die mit GetScrollPos gelesene oder mit SetScrollPos gesetzte Position in 100stel Prozent genau werten.
Die Frage ist: Brauchst Du diese Positionswerte überhaupt? Oder soll Dein Fenster einfach nur Scrollbalken enthalten?
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 17.02.2007 ▲ |
|
|
|
|
| Andre Hilprecht
Das habe ich geahnt, habe mir mal das Teil angesehen und komme damit überhaupt nicht klar.
Da bist Du sicher nicht der Einzige.
Andre Hilprecht
Jetzt brauche ich den XPSE-Compiler, toll, ich bin begeistert.
Wenn das nicht ernst gemeint war gibts Ärger.
Andre Hilprecht
Und nachdem ich nun alles an seinem Platz hatte, also den Verweis auf die Include und den auf den XPSE-Compiler, sagt er mir jetz Unitdefinitionsdatei fehlt, obwohl sie da ist und dann Programm fehlerhaft.
Das ist unrichtig, hier liegt bestimmt nur ein Bedienerfehler vor.
Suchst Du sowas? KompilierenMarkierenSeparieren {$cleq}
const scrollBarWidth=18
const planeHeight=2048
set(errorlevel,-1)
windowstyle 8
cls
long h:=createvscroll(hwnd,,width(hwnd)-scrollBarWidth,0,scrollBarWidth,height(hwnd))
long plane:=createtext(hwnd,,0,0,width(hwnd)-scrollBarWidth,planeHeight)
long spos:=getscrollpos(h),ospos:=spos
float realFact:=(planeHeight-height(hwnd))/100
buildControls plane
do {
waitinput
spos:=getscrollpos(h)
if (ospos<>spos) {
ospos:=spos
setwindowpos plane=0,(0-spos)*realFact - width(plane),height(plane);0
}
}
end
buildcontrols (long parent) {
long w:=width(parent)-40
long h:=creategroupbox(parent,,20,20,w,height(parent)-40)
case w>40 : buildcontrols (h)
}
KompilierenMarkierenSeparierenSET(errorlevel,-1)
WINDOWSTYLE 8
CLS
var H&=CREATEVSCROLL(%HWND,,WIDTH(%HWND)-18,0,18,HEIGHT(%HWND))
var PLANE&=(CONTROL(STATIC,,$50000000,(0),(0),(WIDTH(%HWND)-18),(2048),(%HWND),0,%HINSTANCE))
var SPOS&=GETSCROLLPOS(H&)
var OSPOS&=SPOS&
var REALFACT!=(2048-HEIGHT(%HWND))/100
BUILDCONTROLS PLANE&
WHILE 1
WAITINPUT
SPOS&=GETSCROLLPOS(H&)
IF (OSPOS&<>SPOS&)
OSPOS&=SPOS&
SETWINDOWPOS PLANE&=0,(0-SPOS&)*REALFACT! - WIDTH(PLANE&),HEIGHT(PLANE&);0
ENDIF
ENDWHILE
proc BUILDCONTROLS
PARAMETERS PARENT&
var W&=WIDTH(PARENT&)-40
var H&=(CREATE(GROUPBOX,(PARENT&),,(20),(20),(W&),(HEIGHT(PARENT&)-40)))
IF W&>40
BUILDCONTROLS (H&)
ENDIF
endproc
|
|
|
| |
|
|
|
Andre Hilprecht | @ Michael Wodrich Ich möchte einfach nur mein Hauptfenster mit einem vertikalen Scrollbalken versehen, nach Möglichkeit sollte alternativ natürlich dann auch das Rollrad der Maus funktionieren. Mit dem Scrollen möchte ich einen bestimmten Bereich des Hauptfensters rollen, also ähnlich wie bei Excel wenn eine Tabelle fixiert ist. Mein Hauptfenster wird einen Kopfbereich haben, in dem der Tabellenkopf sitzt und dort sollen sich einige Schaltflächen tummeln. Beim Scrollen soll also der obere Bereich stehen bleiben.
@IF Ich nehme mal an, (entschuldige meine Blödheit) das sind zwei verschiedene Codes, die beide einen VScroll haben, der dann auch funktioniert. Den zweiten Code bekomme ich sogar zum laufen, nur mein Fenster bleibt leer. Da ist kein Scrollbalken zu sehen, da ist eigentlich überhaupt nix zu sehen und demzufolge funktioniert auch nix. Der zweite Code sieht gut aus, da kann ich mir so ein bischen was zusammenreimen, wie das funktionieren sollte. Nur da nix zu sehen ist und nix funktioniert, kann ich auch damit nix anfangen.
Helft einem Blödmann bitte auf die Sprünge. Gruß André |
|
|
| Ein PC ist die beste Möglichkeit Fehler zu beheben, die ohne PC gar nicht passiert wären. -frei aus Murphy's Computergesetzen
XProfan X2, Win8 Pro 64bit Update von Win7 i5 / 3,2GHz 4 GB RAM Treibstoff: Radeberger Pils | 17.02.2007 ▲ |
|
|
|
|
Rolf Koch | Du bist kein Blödmann! Warum versuchst Du es nicht mit meinem Code oben? Genau das was Du benötigst. |
|
|
| |
|
|
|
Andre Hilprecht | @Rolf Ja, Deinen Code habe ich probiert, ich werde jetzt mal versuchen statt der Spielerei einen definierten Bereich in meinem Fenster rollen zu lassen. Irgendwie habe ich aber nicht so eine richtige Peilung. Schreibe ich einen Text an eine Position außerhalb des erzeugten Hauptfensters und rolle ihn dann rein, oder wie funzt das?
Also WINDOW 22,20-250,310 ...... ...... TEXT1& = CREATE(TEXT,%HWND,Info 1,0014,(GETSCROLLPOS(VSCROLL1&)),0070,0020)
mache damit also alle XProfan-Elemente, die gescrollt werden sollen abhängig vom Stand des Knopfes im Scrollbalken? und muss ich alle Elemente auschalten, wenn eine gewisse Höhe erreicht ist damit mein Kopf im Hauptfenster nicht überschrieben wird?
Junge, da hab ich mir aber was vorgenommen, denn ich muss ca. 2500 Text&-Bausteine rollen.
Gruß André |
|
|
| Ein PC ist die beste Möglichkeit Fehler zu beheben, die ohne PC gar nicht passiert wären. -frei aus Murphy's Computergesetzen
XProfan X2, Win8 Pro 64bit Update von Win7 i5 / 3,2GHz 4 GB RAM Treibstoff: Radeberger Pils | 17.02.2007 ▲ |
|
|
|
|
Rolf Koch | Hier zur Demo was ich meine (halt nur als Ansatz und schnell geschrieben): KompilierenMarkierenSeparieren $P+
SET(ERRORLEVEL,0)
********************** HINWEISE ********************************
CODE ERZEUGT MIT ROKOS OBJECT CREATOR 4.5b
DATUM 17.02.2007 um 14:39 Uhr
VERWENDETE PROFANVERSION IST 10.0-NT XPROFAN
CODE ERSTELLT UNTER WINDOWS Unbekannt
Subclass für %hwnd ist eingeschaltet!
!!! Dieser Code wird von Roc immer neu erzeugt !!!
!!! Erst bearbeiten, wenn alle Objekte erzeugt wurden !!!
!!! Verändern Sie ggf. feste Pfade in variable Pfade !!!
DECLARE VSCROLL1&
DECLARE TEXT1&,font&,x%
Declare untergrund&,scrollteil&
DEF GETSYSCOLOR(1) !USER32,GetSysColor
$H C:PROFANAKTUELLE PROJEKTEROCLIBWINDOWS.PH
$H C:PROFANAKTUELLE PROJEKTEROCLIBMESSAGES.PH
font&=create(FONT,MS SANS SERIF,25,0,1,0,0)
Hier nichts ändern **************************************
declare p_x1&,p_x2&
PROC INITSUBCLASS
p_x1&=~Getwindowlong(%Hwnd,~Gwl_wndproc)
p_x2&=Procaddr(Windowproc,4)
~Setwindowlong(%Hwnd,~Gwl_wndproc, p_x2&)
ENDPROC
PROC SETSTANDARDMESSAGE
~Setwindowlong(%Hwnd,~Gwl_wndproc, p_x1&)
ENDPROC
PROC SETEXTENDMESSAGE
~Setwindowlong(%Hwnd,~Gwl_wndproc, p_x2&)
ENDPROC
*********************************************************
Hier können die eigenen Abfragen hin ********************
Proc Windowproc
Parameters Wnd&, Msg&, Wparam&, Lparam&
If Msg& = ~Wm_close
~Postquitmessage(0)Programm-Ende
Endif
IF MSG& = ~WM_VSCROLL
SCROLL_PROC
ENDIF
Return ~Callwindowproc(p_x1&,Wnd&, Msg&, Wparam&, Lparam&)
Endproc
HIER DEINE AKTIONEN WENN SCROLLER BETÄTIGT WIRD
PROC SCROLL_PROC
setwindowpos scrollteil&=0,(-getscrollpos(vscroll1&))-(width(%hwnd)-16),5000
ENDPROC
WINDOWSTYLE 63
WINDOWTITLE The Elder scrolls *lol*
WINDOW 22,20-250,310
SET(TRUECOLOR,1)
DECLARE ENDE%
CLS GETSYSCOLOR(15)
USEFONT MS Sans Serif,13,0,0,0,0
SETDIALOGFONT 1
Set(FASTMODE,1)
VSCROLL1& = CREATE(VScroll,%HWND,VScroll,(width(%hwnd)-15),0035,0014,(height(%hwnd)-35))
SetScrollRange vscroll1&,0,5000
TEXT1& = CREATE(TEXT,%HWND,Ich bin die Überschrift,0001,0001,0358,0020)
Untergrund&=Control(STATIC,,$54001106,1,36,(width(%hwnd)-16),(height(%hwnd)-35),%hwnd,0,%hinstance,$0)
Scrollteil&=Control(STATIC,,$54001100,0,0,(width(%hwnd)-16),5000,untergrund&,0,%hinstance,$0)
whilenot x% = 240
inc x%
createtext(scrollteil&,Ich bin Testtext Nr. +str$(x%),10,(20*x%),200,20)
endwhile
setfont text1&,font&
INITSUBCLASS muss an diese Position
SETSTANDARDMESSAGE muss an diese Position
SETFOCUS(%HWND)
SETEXTENDMESSAGE muss an diese Position
WHILENOT ENDE%
WAITINPUT
SETSTANDARDMESSAGE muss an diese Position
If %KEY=2
ENDE%= 1
ELSEIF %KEY=4
ENDIF
SETEXTENDMESSAGE muss an diese Position
ENDWHILE
deleteobject font&
Kurze Erklärung: Du erstellst einen Header indem Du oben normal aufs Hauptfenster Sachen positionierst - Buttons und Co. Dann erstellst Du einen Untergrund für den zu scrollenden Bereich (hier ein Static mit Variable Untergrund&) Auf diesen Untergrund erstellst Du nochmals ein Static jedoch in seiner Höhe gross gewählt. Dort kannst Du dann Deine Elemente drauf platzieren. Siehe jetzt einfach SCROLL_PROC an, denn diese kannste frei anpassen, ohne oben im Subclassteil was zu verändern. |
|
|
| |
|
|
|
Andre Hilprecht | Hallo Rolf, das funzt und kommt meinen Wünschen fast zu 100% nahe. Das ist ja ganz schön aufwendig, nur um ein VScroll in ein Prog einzubauen. Hätte ich nie hinbekommen.
Danke fürs erste, Gruß André |
|
|
| Ein PC ist die beste Möglichkeit Fehler zu beheben, die ohne PC gar nicht passiert wären. -frei aus Murphy's Computergesetzen
XProfan X2, Win8 Pro 64bit Update von Win7 i5 / 3,2GHz 4 GB RAM Treibstoff: Radeberger Pils | 17.02.2007 ▲ |
|
|
|
|
| Ah - mein Code oben (und es ist ein und der selbe Code nur einmal xpse einmal net xpse) funzt bei Dir nicht weil Du kein X10 hast - sehe jetzt erst das Du XProfan 9 hast. |
|
|
| |
|
|
|
Andre Hilprecht | Hi IF, so simpel sind manchmal die Dinge. Und genau deshalb sollte ja jeder in der Fußzeile stehen haben, mit welchen Versionen gearbeitet wird. Jetzt sehe ich auch in Deinem Codefenstern oben XXProfan XPSE - soll bestimmt ein Hinweis darauf sein XProfan 10 und den XPSE bei diesem Code zu verwenden. Beim zweiten Codefenster ist leider garnichts zu sehen als Hinweis auf verwendete Versionen.
Ist vielleicht mal ein allgemeiner Hinweis: Codefenster sollten mit diesen Hinweisen versehen veröffentlicht werden, das erspart weitere Nachfragen und (aber das macht ja fast jeder) in der Fußzeile immer verwendete Versionen eintragen.
Gruß André |
|
|
| Ein PC ist die beste Möglichkeit Fehler zu beheben, die ohne PC gar nicht passiert wären. -frei aus Murphy's Computergesetzen
XProfan X2, Win8 Pro 64bit Update von Win7 i5 / 3,2GHz 4 GB RAM Treibstoff: Radeberger Pils | 18.02.2007 ▲ |
|
|
|