Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 241822 (3258)
  Suchen
 Zurück zur Übersicht
 AutorThema: Control aus API
Martin Pohl
Datum:20.08.02 16:56 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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