1

Konu: Bar ve % gösterimle yükleme bilgisi

Formda Uzun süren bir işlem sırasında işlemin % 10-%20 ......... %100 şeklinde
bittiğini ekrana yazdırıp aynı zamanda windows yükleme programlarında
olduğu gibi bu değeri aynı zamanda bir bar çubukla nasıl gösterebiliriz ?

Bar için hazır grafik kullanmak daha mi iyi olur ?

Teşekkürler

2 Son düzenleyen, ugurlu2001 (01.11.2010 10:14:18)

Re: Bar ve % gösterimle yükleme bilgisi

Visual Fox Pro
* Author : Eric Gomez

* Public code from foxpro forums.
 
 
Clear
Clear All
* set path to 'C:\My Documents\Attachments\PBar'
*!*    Set Classlib To PTimer
 
Local lnRecCnt
 
Use KullanilacaginTable In 0 Again
Select KullanilacaginTable
lnRecCnt = Reccount()
 
oX = Createobject('ProgressTimer')
oX.Show
oX.nReportInterval = 1    && sets the number of interval the PTimer Class is refreshed
oX.Reset(lnRecCnt)        && sets the maximum number of record to process
 
Select ISLEMANA
Scan
    oX.TimeProgress(Recno())
Endscan
 
oX.Release
 
DEFINE CLASS progresstimer AS form
 
 
    Height = 133
    Width = 405
    ShowWindow = 0
    DoCreate = .T.
    AutoCenter = .T.
    BorderStyle = 3
    Caption = "Progress Timer"
    ControlBox = .F.
    Closable = .F.
    MaxButton = .F.
    MinButton = .F.
    Name = "progresstimer"
    ntoprocess = .F.
    nstart = .F.
    ctimeremaining = .F.
    ccompletiontime = .F.
    nreportinterval = .F.
    nmercwidth = .F.
 
 
    ADD OBJECT lbltimerem AS label WITH ;
        AutoSize = .T., ;
        FontBold = .T., ;
        Caption = "Time Remaining", ;
        Enabled = .F., ;
        Height = 17, ;
        Left = 5, ;
        Top = 93, ;
        Width = 93, ;
        DisabledForeColor = RGB(0,0,128), ;
        Name = "lblTimeRem"
 
 
    ADD OBJECT lbltimecomp AS label WITH ;
        AutoSize = .T., ;
        FontBold = .T., ;
        Caption = "Completion Time", ;
        Enabled = .F., ;
        Height = 17, ;
        Left = 5, ;
        Top = 3, ;
        Width = 97, ;
        DisabledForeColor = RGB(0,0,128), ;
        Name = "lblTimeComp"
 
 
    ADD OBJECT container1 AS container WITH ;
        Top = 61, ;
        Left = 4, ;
        Width = 397, ;
        Height = 29, ;
        SpecialEffect = 1, ;
        BackColor = RGB(0,0,255), ;
        Name = "Container1"
 
 
    ADD OBJECT shpmercury AS shape WITH ;
        Top = 64, ;
        Left = 7, ;
        Height = 24, ;
        Width = 391, ;
        BorderStyle = 0, ;
        BackColor = RGB(255,255,0), ;
        Name = "shpMercury"
 
 
    ADD OBJECT lblrecords AS label WITH ;
        AutoSize = .T., ;
        FontBold = .T., ;
        Caption = "Records Processed", ;
        Enabled = .F., ;
        Height = 17, ;
        Left = 5, ;
        Top = 42, ;
        Width = 115, ;
        DisabledForeColor = RGB(0,0,128), ;
        Name = "lblRecords"
 
 
    ADD OBJECT lblaverage AS label WITH ;
        AutoSize = .T., ;
        FontBold = .T., ;
        Caption = "Average", ;
        Enabled = .F., ;
        Height = 17, ;
        Left = 5, ;
        Top = 113, ;
        Width = 49, ;
        DisabledForeColor = RGB(0,0,128), ;
        Name = "lblAverage"
 
 
    ADD OBJECT lblelapsed AS label WITH ;
        AutoSize = .T., ;
        FontBold = .T., ;
        Caption = "Elapsed Time", ;
        Enabled = .F., ;
        Height = 17, ;
        Left = 5, ;
        Top = 23, ;
        Width = 78, ;
        DisabledForeColor = RGB(0,0,128), ;
        Name = "lblElapsed"
 
 
    ADD OBJECT lblprogrammer AS label WITH ;
        FontSize = 6, ;
        BackStyle = 0, ;
        Caption = "This segment was developed  by EGomez.", ;
        Enabled = .F., ;
        Height = 11, ;
        Left = 261, ;
        Top = 124, ;
        Width = 149, ;
        TabIndex = 11, ;
        ForeColor = RGB(255,255,0), ;
        DisabledForeColor = RGB(0,0,255), ;
        Name = "lblProgrammer"
 
 
    *-- Resets the Timer control so that it starts counting from 0.
    PROCEDURE reset
        lParameters tnToProcess
 
        this.nToProcess = tnToProcess
        this.nStart = seconds()
        this.shpMercury.width = 0
    ENDPROC
 
 
    PROCEDURE timeprogress
        lParameters tnProcessed
 
        local lnUnitsRemaining,lnTimePerUnit,;
              lnSecondsRemaining,lnFractHours,;
              lnHrs,lnMin,lnSec
 
        lnElapsed = seconds() - this.nStart
 
        if mod(tnProcessed,this.nReportInterval) = 0
            lnUnitsRemaining = this.nToProcess - tnProcessed
            lnTimePerUnit = lnElapsed/tnProcessed
            lnSecondsRemaining = lnTimePerUnit * lnUnitsRemaining
            lnHrs = int(lnSecondsRemaining/3600)
            lnFractHours = mod(lnSecondsRemaining,3600)
            lnMin = int(lnFractHours/60)
            lnSec = mod(lnFractHours,60)
 
            lnHrs1 = int(lnElapsed/3600)
            lnFractHours1 = mod(lnElapsed,3600)
            lnMin1 = int(lnFractHours1/60)
            lnSec1 = mod(lnFractHours1,60)
 
            this.lblElapsed.Caption = ' Elapsed Time : ' ;
                    + iif(lnHrs1 > 0,padl(alltrim(str(lnHrs1)),3);
                        + iif(lnHrs1 > 1,' Hours ',' Hour '),'');
                    + iif(lnMin1 > 0,padl(alltrim(str(lnMin1)),2);
                        + iif(lnMin1 > 1,' Minutes ',' Minute '),'');
                    + iif(lnSec1 > 0,padl(alltrim(str(lnSec1)),2);
                        + iif(lnSec1 > 1,' Seconds ',' Second '),'')
 
            this.cTimeRemaining = iif(lnHrs>0,padl(alltrim(str(lnHrs)),3);
                        + iif(lnHrs>1,' Hours ',' Hour '),'');
                    + iif(lnMin>0,padl(alltrim(str(lnMin)),2);
                        + iif(lnMin>1,' Minutes ',' Minute '),'');
                    + iif(lnSec>0,padl(alltrim(str(lnSec)),2);
                        + iif(lnSec>1,' Seconds ',' Second '),'')
 
            lnAverage = tnProcessed/lnElapsed
            do case
                case lnAverage > 1000
                    lnAverage = lnAverage / 1000
                    lcAverage = alltrim(transform(lnAverage,'9,999,999,999.99 K / Second'))
                case lnAverage > 1
                    lcAverage = alltrim(transform(lnAverage,'9,999,999,999.99 / Second'))
                case (lnAverage * 60) > 1
                    lnAverage = lnAverage * 60
                    lcAverage = alltrim(transform(lnAverage,'9,999,999,999.99 / Minute'))
                case (lnAverage * 3600) > 1
                    lnAverage = lnAverage * 3600
                    lcAverage = alltrim(transform(lnAverage,'9,999,999,999.99 / Hour'))
                otherwise
                    lcAverage = alltrim(transform(lnAverage,'9,999,999,999.99 K / Second'))
            endcase
 
            lcPercentage = alltrim(transform((tnProcessed/this.nToProcess)*100,'999.99 %'))
            lcPercCaption = alltrim(transform((tnProcessed/this.nToProcess)*100,'999.9 %'))
            lcRecords = alltrim(transform(tnProcessed,'9,999,999,999')) + ' of ' +;
                        alltrim(transform(this.nToProcess,'9,999,999,999 Records'))
            this.cCompletionTime = ttoc(datetime() + lnSecondsRemaining)
            this.lblRecords.Caption = ' ' + lcRecords +(' + lcPercentage + ')'
            this.lblTimeRem.Caption = ' ' + alltrim(this.cTimeRemaining) + ' remaining.'
            this.lblAverage.Caption = ' Average : ' + lcAverage
            this.lblTimeComp.Caption  = ' Will finish at : ' + this.cCompletionTime
            thisform.Caption = 'Progress Timer  ' + lcPercCaption + ' Complete'
        endif
 
        this.shpMercury.width = int((tnProcessed/this.nToProcess)*this.nMercWidth)
 
        if this.shpMercury.width < 1
            this.shpMercury.visible= .f.
        else
            this.shpMercury.visible= .t.
        endif
        this.refresh
        return .t.
    ENDPROC
 
 
    PROCEDURE Init
        this.nToProcess = 0
        this.nStart = 0
        this.cTimeRemaining = ''
        this.cCompletionTime = ''
        this.nReportInterval = 50
 
        this.lblTimeComp.enabled = .f.
        this.lblTimeRem.enabled = .f.
        this.lblRecords.enabled = .f.
        this.lblAverage.enabled = .f.
        this.lblElapsed.enabled = .f.
        this.lblProgrammer.enabled = .f.
        this.lblElapsed.caption = ''
        this.lblAverage.caption = ''
        this.lblTimeComp.caption = ''
        this.lblTimeRem.caption = ''
        this.lblRecords.caption = ''
 
        this.nMercWidth = this.shpMercury.width
        this.shpMercury.width = 1
        this.shpMercury.visible = .f.
 
 
    ENDPROC
 
 
ENDDEFINE
*
*-- EndDefine: progresstimer
**************************************************
Visual Fox Pro
 
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: Bar ve % gösterimle yükleme bilgisi

Boyle de olabilir:


Visual Fox Pro
Public oForm

oForm = Createobject('myForm')
oForm.Show()
Define Class myForm As Form
  Height = 50
  Width = 200
  Add Object pBar As OleControl With ;
    oleClass='MsComCtlLib.ProgCtrl', Top=10, Left=10, Width=180, Height = 20
  Add Object myTimer As Timer With Interval=1000
 
  Procedure Load
    Use (_samples+'data\customer')
  Endproc
 
  Procedure pBar.Init
    This.Scrolling=1
  ENDPROC
 
  Procedure InitBar
    This.pBar.Max = Reccount('customer')
    This.pBar.Value = 0
 
  Endproc
 
  Procedure UpdateBar
    This.pBar.Value = Min(This.pBar.Max, Recno('customer'))
  Endproc
 
  Procedure BirIslem
    Skip 1 In 'customer'
    * birseyler yap
    This.UpdateBar()
  Endproc
 
  Procedure myTimer.Timer
    Thisform.BirIslem()
    If Eof('customer')
      This.Enabled = .F.
    Endif
  Endproc
Enddefine

4

Re: Bar ve % gösterimle yükleme bilgisi

Visual Fox Pro
Add Object pBar As OleControl With ;

    oleClass='MsComCtlLib.ProgCtrl', Top=10, Left=10, Width=180, Height = 20
  Add Object myTimer As Timer With Interval=1000

burdaki MsComCtlLib.ProgCtrl hangi ocx ? bi türlü bulamadım

5

Re: Bar ve % gösterimle yükleme bilgisi

Avrasya, o Microsoft un standart library lerinden diye biliyorum.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

6

Re: Bar ve % gösterimle yükleme bilgisi

vfp'de ocx filan kullanmayan bir hazır class var. companent gallery altında biryerlerde bulursun.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

7

Re: Bar ve % gösterimle yükleme bilgisi

c:\windows\system32\mscomctl.ocx

MS Progress Bar kullanmani tavsiye ederim.

Bu arada, hangi OCX oldugunu bulmanin kolay bir yolu var:
-Object browser'i ac ve sol ustteki ikona tikla
-COM tabina git ve orada MS Progress Bar SP6 kontrolunu bulup isaretle ve OK de.
-Pencereye gelen "MSComCtlLib"e tikladiginda asagida gerekli bilgiler var

8

Re: Bar ve % gösterimle yükleme bilgisi

arkadaşlar hepinize teşekkür ederim

9

Re: Bar ve % gösterimle yükleme bilgisi

molebox kullanırsan bu ocx i yeni taşıdığın sistemde register etmen gerekmez. direk .exe nin içine ekliyorsun ve taşıdığın sistemde sanki register edilmiş gibi davranıyor.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

10

Re: Bar ve % gösterimle yükleme bilgisi

cetinbasoz yazdı:

Boyle de olabilir:


Visual Fox Pro
Public oForm

oForm = Createobject('myForm')
oForm.Show()
Define Class myForm As Form
  Height = 50
  Width = 200
  Add Object pBar As OleControl With ;
    oleClass='MsComCtlLib.ProgCtrl', Top=10, Left=10, Width=180, Height = 20
  Add Object myTimer As Timer With Interval=1000
 
  Procedure Load
    Use (_samples+'data\customer')
  Endproc
 
  Procedure pBar.Init
    This.Scrolling=1
  ENDPROC
 
  Procedure InitBar
    This.pBar.Max = Reccount('customer')
    This.pBar.Value = 0
 
  Endproc
 
  Procedure UpdateBar
    This.pBar.Value = Min(This.pBar.Max, Recno('customer'))
  Endproc
 
  Procedure BirIslem
    Skip 1 In 'customer'
    * birseyler yap
    This.UpdateBar()
  Endproc
 
  Procedure myTimer.Timer
    Thisform.BirIslem()
    If Eof('customer')
      This.Enabled = .F.
    Endif
  Endproc
Enddefine

**************************
  Add Object myTimer As Timer With Interval=1000

*****************************
Procedure myTimer.Timer
    Thisform.BirIslem()
    If Eof('customer')
      This.Enabled = .F.
    Endif
  Endproc
************
Merak ettiğim birkaç şey var;
Timerın interval ı nasıl çalışır ?
    şayet intervaldaki süre kadar bekleyip sonrada birislem() komutunu işletiyorsa ozaman birislem() deki komutlar bittikden sonramı tekrar saymaya başlıyor. şayet öyleyse timerı neden kullanıyoruz bunu normal bir metodla döngülerlede yapamazmıyız ?

yok eğer timer belirlenen süresonunda birislem() komutlarını arka fonda yapıyor ve kendisi tekrar baştan saymaya başlıyorsa ozamanda şöyle bir sorun ortaya çıkmazmı. timerın sayacağı süre bittiginde birislem() komutları bitmemişse ne olacak ?

biraz saçma bir soru oldu galiba ama benimkide merak big_smile tımer nasıl çalışır bilmek istiyorum.

Cevaplar için şimdiden teşekkürler herkese

11 Son düzenleyen, ugurlu2001 (16.12.2011 15:33:30)

Re: Bar ve % gösterimle yükleme bilgisi

Visual Fox Pro
SET TALK ON && SQL Query de progress i görmek için

 
Select sipmas.* From sipmas Order By anakod Into Cursor qsipma
 
SET TALK OFF  && SQL Query de progress i kapat

Alternatif olarak bir progress nesnesi oluşturulabilir ama SQL in süresini bir kaç kat uzatma durumu var. ( Yada ben öyle hatırlıyorum )

SET TALK ON durumunda progress %95 e kadar çok hızlı gelip; o %5 lik kısımda takılabiliyor yada tam tersi bir durum olabiliyor. Nadiren de olsa karşılaştığım bir durum.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

12 Son düzenleyen, avrasya34 (16.12.2011 19:35:27)

Re: Bar ve % gösterimle yükleme bilgisi

avrasya34 yazdı:


************
Merak ettiğim birkaç şey var;
Timerın interval ı nasıl çalışır ?
    şayet intervaldaki süre kadar bekleyip sonrada birislem() komutunu işletiyorsa ozaman birislem() deki komutlar bittikden sonramı tekrar saymaya başlıyor. şayet öyleyse timerı neden kullanıyoruz bunu normal bir metodla döngülerlede yapamazmıyız ?

yok eğer timer belirlenen süresonunda birislem() komutlarını arka fonda yapıyor ve kendisi tekrar baştan saymaya başlıyorsa ozamanda şöyle bir sorun ortaya çıkmazmı. timerın sayacağı süre bittiginde birislem() komutları bitmemişse ne olacak ?

biraz saçma bir soru oldu galiba ama benimkide merak big_smile tımer nasıl çalışır bilmek istiyorum.

Cevaplar için şimdiden teşekkürler herkese

soru arada kaynamasın

13

Re: Bar ve % gösterimle yükleme bilgisi

avrasya34 yazdı:
avrasya34 yazdı:


************
Merak ettiğim birkaç şey var;
Timerın interval ı nasıl çalışır ?
    şayet intervaldaki süre kadar bekleyip sonrada birislem() komutunu işletiyorsa ozaman birislem() deki komutlar bittikden sonramı tekrar saymaya başlıyor. şayet öyleyse timerı neden kullanıyoruz bunu normal bir metodla döngülerlede yapamazmıyız ?

yok eğer timer belirlenen süresonunda birislem() komutlarını arka fonda yapıyor ve kendisi tekrar baştan saymaya başlıyorsa ozamanda şöyle bir sorun ortaya çıkmazmı. timerın sayacağı süre bittiginde birislem() komutları bitmemişse ne olacak ?

biraz saçma bir soru oldu galiba ama benimkide merak big_smile tımer nasıl çalışır bilmek istiyorum.

Cevaplar için şimdiden teşekkürler herkese

soru arada kaynamasın

Timer intervali 5000 yaptin diyelim (5 sn).

5000 milisaniye gecince BirIslem() basliyor, ayni zamanda yeni 5000 milisaniye sayimi (asenkron) basliyor. Yani her 5 sn'de bir BirIslem() cagiriliyor. BirIslem() bitmemisse bile basliyor. Ayni makinede farkli threadlerde calistirmaktan farki yok. BirIslem() kodu uzun surse bile bir yenisinin baslamasi onemli degilse birsey olmaz. Biri calisirken ikincisinin calismasi sakincali ise, senin kontrol etmen lazim. Kontrol etmek icin property ve metodlar var:

timer.Reset()
timer.Enabled

Tipik ornek dijital saat. Bir label koydugunu dusun. Timer interval = 1000 ile Timer eventinde label.Caption = ttoc(datetime())

14

Re: Bar ve % gösterimle yükleme bilgisi

çok sağolun hocam