1

Konu: Yeni kod yeni sans:)

Saga sola bazen ise yarar bir kod postaladigimda eger unutmazsam buraya da yapitiriyorum. Aciklama yok. Calistirinca ne yaptigi belli zaten (Genelde VFP9 icin, cok az degisiklikle her versiyonda calisacak seyler).

Formda grafik:

Visual Fox Pro
*#INCLUDE "mschrt20.h"

#Define VtChChartType3dBar                                0
#Define VtChChartType2dBar                                1
 
#Define VtChLabelComponentValue    1    && The value of the data point appears in the label.
#Define VtChLabelComponentPercent    2    && The value of the data point is displayed in the label as a percentage of the total value of the series.
 
#Define VtOrientationHorizontal    0    && Horizontal text
#Define VtOrientationVertical    1    && Vertical text
#Define VtOrientationUp    2    && Up oriented text
#Define VtOrientationDown    3    && Down oriented text
 
#Define VtChLabelLocationTypeNone    0    && Label Location - None
#Define VtChLabelLocationTypeAbovePoint    1    && Label Location - AbovePoint
#Define VtChLabelLocationTypeBelowPoint    2    && Label Location - BelowPoint
#Define VtChLabelLocationTypeCenter    3    && Label Location - Center
#Define VtChLabelLocationTypeBase    4    && Label Location - Base
#Define VtChLabelLocationTypeInside    5    && Label Location - Inside pie or doughnut
#Define VtChLabelLocationTypeOutside    6    && Label Location - Outside pie or doughnut
#Define VtChLabelLocationTypeLeft    7    && Label Location - Left
#Define VtChLabelLocationTypeRight    8    && Label Location - Right
 
Public loCharter
loCharter = Createobject('myCharter')
loCharter.Show
 
Define Class myCharter As Form
  DataSession = 2
  Height = 600
  Width = 800
  Add Object myGrid As Grid With ;
    left=10,Top=10,Height=580,Width=400
  Add Object Chart As OleControl With ;
    left=430,Top=10,Height=580,Width=360, ;
    OleClass="MSChart20Lib.MSChart.2"
 
  Procedure Load
    Use (_samples+'data\Customer')
  Endproc
 
  Procedure Init
    Bindevent(This.myGrid.Columns(1).Text1,'Click',This,'UpdateChart')
    This.UpdateChart()
  Endproc
 
  Procedure UpdateChart
    Select ;
      emp.First_Name - (' '+emp.Last_Name) As employee,;
      sum(order_net) As totalSale ;
      FROM (_samples+'data\orders') ord ;
      INNER Join (_samples+'data\employee') emp On emp.emp_id = ord.emp_id ;
      WHERE ord.cust_id == customer.cust_id ;
      GROUP By 1 ;
      ORDER By 1 ;
      INTO Cursor crsChartData
 
    With Thisform.Chart
      .ChartType = VtChChartType2dBar
      rowLabelCount = 1
      rowCount = Reccount()
      columnLabelCount = 0
      ColumnCount = 1
      .DataGrid.SetSize(m.rowLabelCount, m.columnLabelCount, ;
        m.rowCount, m.ColumnCount )
      .Column = 1
      Scan
        .Row = Recno()
        .Data = totalSale
        .DataGrid.RowLabel(Recno(),1) = employee
      Endscan
 
      For Each serX In .Plot.SeriesCollection
        With serX.Datapoints.Item(-1).DatapointLabel
          .Component = VtChLabelComponentValue  && Show value
          .LocationType = VtChLabelLocationTypeAbovePoint && Above
          .ValueFormat = '$#,##0.00'
        Endwith
      Endfor
    Endwith
  Endproc
Enddefine

2

Re: Yeni kod yeni sans:)

VFP ile diğer programları kıyaslıyorduk ya.
biraz argo için affola: Hepsine bimemkaç basar....
Bizim paketin içerisinden cetinbasoz desteği bulunduğu sürece
tekrar teşekkürler

VFP9 SP2

3

Re: Yeni kod yeni sans:)

Üstad,
Sen gerçekten bu işte olabilecek en üst noktadasın ve bizler senin burada olman sayesinde gerçekten çok şanslıyız. Ama bir gerçek daha var ki: Senin yaptıklarını gördükçe ben kendi yaptıklarımdan uzaklaşır oldum. Sayende ya bu işi çok daha iyi yapmaya başlıycam yada şapkamı koltuğumun altına alıcam. smile

Ellerine Sağlık Üstad ....

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ü

4

Re: Yeni kod yeni sans:)

Cetin Hoca için; 3 defa Yaşa Yaşa Yaşa

Bilmediğin Neyse Yanıldığındır.

5

Re: Yeni kod yeni sans:)

Arkadaslar sagolun da simartmayin:)

6

Re: Yeni kod yeni sans:)

Cetin hocam teşekkürler. Bir sorum var. Bu örnekten yola çıkarak ;

Bindevent(This.myGrid.Columns(1).Text1,'Click',This,'UpdateChart')
yerine veya ayrıca ;
Bindevent(This.myGrid,'AfterRowColChange',This,'UpdateChart')
dediğimi varsayalım. Original event kendi içinde parametre barındırdığı için ;
bizim UpdateCharte isimli eventhandler a ilk kod olarak

Parameters xDummy

gibi bir satır eklemek gerekiyor. Bunu önlemenin yolu varmıdır ve/veya ikinci bir soru olarak ola ki ben eventhandler ıma parametre geçirmek istersem bunu nerede nasıl set edebilirim veya geçirebilirmiyim ?. Örnek yeni satıra geçerken aktif field parametre olarak nasıl geçirilir.
Bu arada ltf field ın ne olduğunu bulmanın başka yolları var demeyin. Benim amacım field ı bulmak değil dinamik bir şekilde parametre geçirebilmek. Field parametreyi örnek olarak verdim.

Şimdiden herkese teşekkürler....

7

Re: Yeni kod yeni sans:)

Parameters xDummy'i kullansan da kullanmasan da ekleyeceksin. Event bir delegate (Turkcesi delege, elci filan oluyor) ve procedure imzasi (aldigi parametreler ve tercihan donen deger - .Net olsa donus degeri kesin ayni) ayni olmak zorunda. Parametre ekleyip cikaramazsin. C# ile ornek vermek gerekirse yaptigin:

.Click +=new System.EventHandler(handler1);
.Click +=new System.EventHandler(handler2);
.Click +=new System.EventHandler(handler3);

gibi birsey. Yani event delegate parametre belirtmiyor.

Neden Click kullandin diye sorarsan, tembellikten:) Soruyu soran ilk kolona klikledigimde diye sormustu, ben de ona gore yazmistim. Buraya koyarken aynen oyle geldi.

Ayni sekilde yeni parametre de ekleyemezsin (.Net'de de oyle). Belki onu da bir gun dusunurler, ozellikle .Net predicate'lerde buyuk eksik:)

Baska yollari soylemeyn demissin ama tek yol o. Eski Fox dusman olmaz demisler, varread() halen harika calisiyor. Nedense yardim dosyasinda 'backward compatibility' deyip yerine ControlSource,Name kullanin demisler sanki yerini tutuyormus gibi.