Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 240932 (2368)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Control aus API
Martin Pohl
| Datum:20.08.02 16:56 (martin_pohl@msn.com) |
Hallo! Wie kann ich mit der API Funktion "Control" eine Progressbar anzeigen? Wenn es geht im Hauptfenster. Falls es nicht im Hauptfenster geht dann eben in einem Extra-dialog. Und dreht mir jetzt nicht das Beispiel von Gerhard Putschalka an. Das funktioniert nicht bei Profan² 5.0.
Gerhard Putschalka
| Datum:21.08.02 09:34 (g.putschalka@utanet.at) |
Hallo Martin, auch wenn Du es nicht wolltest, ich möchte Dir doch die geänderte Version meines Fortschrittbalkens andrehen. Diese sollte auch unter Profan 5 laufen (ich hoffe es zumindest). Noch eine Frage: lief das Testprogramm (in QFanzge.txt beschrieben) auch nicht mit der QFanzgeV.inc statt der QFanzge.inc ? Bitte schreibe mir ob es funktioniert, damit ich das Original auf meiner HP ändern kann. Viel Erfolg Gerhard.
    ' geänderte Version von QFanzge.inc die auch unter Profan 5 laufen sollte

    Declare P_Wnd%,P_Track&,P_Val%,Qf_Klasse# ' global definiert (außerhalb der Prozedur)

    DEF CreateWindowEx(12) ! "USER32","CreateWindowExA"

    ' Progressbar Fenster öffnen.
    Proc Fortschritt_Beginn
    '  Parameters Wndw%,X&,Y&,Text$
       Dim Qf_Klasse#,50
       String Qf_Klasse#,0 = "msctls_progress32"
       String Qf_Klasse#,20 = "P_Track" ' Handle-Name, der bei @CreateWindowEx angegeben ist!
       Let P_Wnd%=@Createdialog(@%(1),@$(4),@&(2),@&(3),300,100)

       Let P_Track&=@CreateWindowEx($0000280,Qf_Klasse#,Qf_Klasse#+20,$50810000,15,35,\
                             275,20,P_Wnd%,101,%HInstance,0)
       Dispose Qf_Klasse#
       Let P_Val%=0
       Return
    EndProc

    Proc Fortschritt_Anzeige
       ' Parameters Wert,Text
       decimals 0
       Startpaint P_Track&
       ' lösche vorigen %-Wert
       textcolor rgb(192,192,192),rgb(192,192,192)
       drawtext 120,0,"       "
       ' setze Fortschrittskästchen
       sendmessage(P_Track&,$402,@%(1),0)
       ' schreibe neuen %-Wert
       textcolor rgb(255,255,255),-1
       drawtext 120,0,add$(str$(@%(1)),"%")
       endpaint
       If (%PCount > 1) ' Text wurde angegeben
          Startpaint P_Wnd%
          textcolor rgb(192,192,192),rgb(192,192,192)
          drawtext 20,10,@Space$(200)   ' lösche die Zeile
          textcolor 0,-1
          drawtext 20,10,@$(2)          ' schreibe neuen Text
          EndPaint
       EndIf
       Return
    ENDPROC

    Proc Fortschritt_Ende
    ' Fenster wieder schließen
       @DestroyWindow(P_Wnd%)
       Return
    EndProc
Martin Pohl
| Datum:21.08.02 10:49 (martin_pohl@msn.com) |
Ich werd's gleich mal ausprobieren. Und weder QFanzeige noch QFanzeigeV hat funktioniert.
Martin Pohl
| Datum:21.08.02 11:25 (martin_pohl@msn.com) |
Mit zwei kleinen Änderungen in der INC und ein paar kleinen Änderungen in der PRF hat es fehlerfrei funktioniert. Ich schreibe den Text hier auch bald rein, ich will es nur etwas übersichtlicherer gliedern.
Martin Pohl
| Datum: 21.08.02 11:37 (martin_pohl@msn.com) |
Die neue INC: ' geänderte Version von QFanzge.inc die auch unter Profan 5 laufen sollte Declare P_Wnd%,P_Track&,P_Val%,Qf_Klasse# ' global definiert (außerhalb der Prozedur) DEF CreateWindowEx(12) ! "USER32","CreateWindowExA" ' Progressbar Fenster öffnen. Proc Fortschritt_Beginn ' Parameters Wndw%,X&,Y&,Text$ Dim Qf_Klasse#,50 String Qf_Klasse#,0 = "msctls_progress32" String Qf_Klasse#,20 = "P_Track" ' Handle-Name, der bei @CreateWindowEx angegeben ist! Let P_Wnd%=@Createdialog(@%(1),@$(4),@&(2),@&(3),300,100) Let P_Track&=@CreateWindowEx($0000280,Qf_Klasse#,@Add(Qf_Klasse#,20),$50810000,15,35,\ 275,20,P_Wnd%,101,%HInstance,0) Dispose Qf_Klasse# Let P_Val%=0 Return EndProc Proc Fortschritt_Anzeige ' Parameters Wert,Text decimals 0 Startpaint P_Track& ' lösche vorigen %-Wert textcolor rgb(192,192,192),rgb(192,192,192) drawtext 120,0," " ' setze Fortschrittskästchen sendmessage(P_Track&,$402,@%(1),0) ' schreibe neuen %-Wert textcolor rgb(255,255,255),-1 drawtext 120,0,add$(str$(@%(1)),"%") endpaint If @GT(%PCount,1) ' Text wurde angegeben Startpaint P_Wnd% textcolor rgb(192,192,192),rgb(192,192,192) drawtext 20,10,@Space$(200) ' lösche die Zeile textcolor 0,-1 drawtext 20,10,@$(2) ' schreibe neuen Text EndPaint EndIf Return ENDPROC Proc Fortschritt_Ende ' Fenster wieder schließen @DestroyWindow(P_Wnd%) Return EndProc ------------------------------------------------ Die neue PRF (TXT): Goto "Weiter" ' Das "Goto Weiter" erlaubt das Überspringen des Textes und damit das Ausführen dieses Testprogrammes. Fortschrittsbalken (Progressbar) erstellen, laufend anzeigen und beenden. Es gibt 2 Includedateien: - QFAnzge.inc zeigt im Fortschrittsbalken blaue Kästchen (Standard) - QFAnzgeV.inc zeigt den Fortschrittsbalken als vollen blauen Balken Version 2.0-prf5 21.08.2002. Die Prozedur kann frei benutzt werden, für Schäden kann keine Haftung übernommen werden. Autor: Gerhard Putschalka eMail: g.putschalka@web.de Homepage: http://members.telering.at/g.putschalka/index.html ..:: Anzeige eines Fortschrittbalkens ::.. Wird z.B. in einem Programm eine Datei geladen, ist es unter Umständen sinnvoll anzuzeigen, dass das Programm sich nicht aufgehängt hat sondern daß das Laden der Datei fortschreitet. Mit den 3 Prozeduren in der Include-Datei ist es möglich auf einfache Weise einen Balken anzuzeigen, der den Fortschritt eines Ablaufes anzeigt. Der Dialog mit dem Fortschrittsbalken ist in der Größe fest definiert (kann aber in der QFAnzge.inc bzw. QFAnzgeV.inc geändert werden), die Position wo dieser Dialog im übergeordneten Fenster stehen soll, wird aber im Programm festgelegt. Die Idee zu dieser Fortschrittsanzeige ist Beispielen von Richard Maurukas (? und Thomas Hölzer ) entnommen ! Es gibt 3 Prozeduren: - Fortschritt_Beginn Damit wird der Dialog erstellt. Parameter 1: Handle des übergeordneten Fensters (Integer oder Long) 2: linker Rand der Dialogbox (Integer) (X-Koordinate) 3: oberer Rand der Dialogbox (Integer) (Y-Koordinate) 4: Überschrift des Dialogs - Fortschritt_Anzeige Hier wird der Fortschritt angezeigt. Parameter 1: Wert für die laufende Anzeige (Integer oder Long) 2: anzuzeigender Text (wahlweise) - Fortschritt_Ende Damit wird der Dialog wieder beendet. Parameter: keine Weiter: '================================================================================== Declare Dialog%,EndWert&,Proz% ' Entsprechend der gewünschten Version ist EINE der beiden Includedateioen zu aktivieren: '$I QFanzgeV.inc $I QFanzge.inc Proc Schlafe Parameters N& ' Wert für Verzögerung in Millisekunden Declare Ende% SetTimer N& Let Ende%=0 Whilenot %wmTimer WaitInput EndWhile KillTimer EndProc SetTrueColor 1 CLS @RGB(255,255,212) ' Öffnen Fortschritt-Anzeige, setze P_Val% auf Null Fortschritt_Beginn %Hwnd,40,60,"Zeige den Fortschritt" Let EndWert&=80 ' dieser Wert ist mit 100% anzusehen (entsprechend setzen) ' P_Val% wird pro Ereignis um 1 erhöht, bis das Maximum der Ereignisse (in EndWert& ' definiert) erreicht ist. While @LT(Proz%,100) Let Proz%=@Mul(@Div(100,EndWert&),P_Val%) ' Beachte: Der Balken läuft bis 100%, der Dateiname nn läuft bis zum Wert EndWert& Fortschritt_Anzeige @Int(Proz%),@Add$("Dateiname ",@Str$(P_Val%)) Inc P_Val% ' Diese Verzögerung ist nur notwendig um die Anzeige zu verlangsamen. Abhängig vom ' Programm kann der Wert geändert werden bzw. kann "Schlafe" ganz entfallen. Schlafe 100 ' Verzögerung 100 Millisekunden EndWhile WaitInput ' Nur zum Ansehen in diesem Testprogramm Fortschritt_Ende ' Beende die Anzeige End

| Zurück zur Übersicht