1

Konu: birden fazla parametre döndürülebilir mi?

merhaba üsdatlar,kullanmak istediğim fonksiyona 2 adet parametre gönderiyorum,2 adet parametrenin de geri dönmesini istiyorum.Bu işlemi public değişkenler kullanmadan nasıl yapabilirim::cool:

En büyük sermaye nakit,nakit sermaye vakittir...

2

Re: birden fazla parametre döndürülebilir mi?

Geriye array dönderebilirsin.

/o---------------------o\
     www.haser.com
\o---------------------o/

3

Re: birden fazla parametre döndürülebilir mi?

üsdat anladığım kadarı ile,geriye döndürmek istediğim paramatreleri,fonksiyon içerisinde diziye atacağım ve onu return(diziadı) şeklinde kullanarak okuyacağım doğru mudur?

En büyük sermaye nakit,nakit sermaye vakittir...

4 Son düzenleyen, cetinbasoz (18.07.2007 18:26:15)

Re: birden fazla parametre döndürülebilir mi?

Tek bir degiskenle istedigin kadar 'sey' dondurebilirsin cunku objeler de bir degisken:) Ornek:

function getRangeAndIds
local loReturn
loReturn = createobject("Empty") && eski versiyonlarda custom, line, relation, scatter name hilesi ...
*....
addproperty(loReturn, 'BaslangicTarihi', {})
addproperty(loReturn, 'BitisTarihi', date())
addproperty(loReturn, 'Id[10]')
loReturn.Id[1] = ...
*....
return loReturn

Bunu sadece dondurmek icin degil bir yere parametre gondermekte de kullanabilirsin. Eger bulursam birazdan baska yere postaladigim bir calisan ornek gondereyim.

Foxpro2xten gecenler ... tarzindan bir baslik altinda da burada ornek vardi.

Not:
Bu arada cok basit cok eski bir yol madem iki parametre 'gonderiyorsun' onlari geri almak:

MyProcedure(@p1,@p2)

veya:
do MyProcedure with p1, p2

ikisi de parameterleri referans ile gonderdiginden procedureden geri dondugunde yeni degerleri olur.

5

Re: birden fazla parametre döndürülebilir mi?

Kod biraz uzun ve gereginden fazlasi var farkli teknikleri gostermek icin:( Original yeri:

http://forums.microsoft.com/MSDN/ShowPo … p;SiteID=1

Visual Fox Pro
clear

*/ COMM_OPTIONS.PRG - Defines Comm Port Parameters on Local Machine /*
*/ Variable declarations copied from main PRG file.  Values restored from .CFG file. /*
LOCAL loPortSettings
loPortSettings = GetPortSettings()
? "Commport via hardcoded property:", loPortSettings.CommPort && check via property name
* or dynamically check all properties
LOCAL ix
FOR ix = 1 TO AMEMBERS(aProps,loPortSettings)
? aProps[m.ix]+ " is:", GETPEM(m.loPortSettings,aProps[m.ix])
endfor
 
FUNCTION GetPortSettings
Local oForm,loParm
Create Cursor parmCreator (CommPort l, BaudRate l, Parity l, ByteLength l, StopBit l)
Scatter Name loParm
Use In "parmCreator" && done with it
* load defaults to parameter object
loParm.CommPort = 1
loParm.BaudRate = 5
loParm.Parity = 0
loParm.ByteLength = 7
loParm.StopBit = 0
 
oForm = Createobject('myForm',loParm) && create form
oForm.Show(1) && Show as a modal form
 
*****
* Code would reach here when form's visiblity is false - hide(),visible=.f.,release()
*****
Local laRet[1]
*Since we didn't release but simply hide the form we still have access to it via its ref var
With oForm 
  Acopy(.rtnVal, laRet ) && copy array to a local array
  * set values from form selected values
  If !(.Tag == "CANCELLED") && check cancel flag
    loParm.CommPort   = .OptionGroup1.Value - 1
    loParm.BaudRate   = .OptionGroup2.Value
    loParm.Parity     = .OptionGroup3.Value - 1
    loParm.ByteLength = Iif(.OptionGroup4.Value = 1, 8, 7)
    loParm.StopBit    = Iif(.OptionGroup4.Value = 3, 2, 1)
  Endif
Endwith
*done with form release it
oForm.Release()
Release oForm && also its variable
 
* show array
LOCAL ix
FOR ix = 1 TO 5
  ? "Array member:",m.ix,"Value:",laRet[m.ix]
ENDFOR
RETURN loParm && return settings to caller
endproc
 
 
 
 
Define Class myForm As Form
  ControlBox = .F.  && Disable the Control menu box
  AlwaysOnTop = .T.   && Make option form remain on top
  AutoCenter = .T.
  Width = 530
  Height = 220
  BackColor = Rgb(239,239,239)
  Caption = "EBU32 Serial Port Settings"
  Dimension rtnVal[5] && don't really need this - showing possibilities only
 
  && Header caption for comm port buttons
  Add Object hLabel1 As Label With Top = 10, Left = 20, Caption = 'Ports'
  && Header caption for baud rate buttons
  Add Object hLabel2 As Label With Top = 10, Left = 140, Caption = 'Baud'
  && Header caption for parity buttons
  Add Object hLabel3 As Label With Top = 10, Left = 250, Caption = 'Parity'
  && Header caption for bytelength/stopbit buttons
  Add Object hLabel4 As Label With Top = 10, Left = 350, Caption = 'Byte Length'
  && Comm port buttons group -   Value = m.CommPort + 1
  Add Object OptionGroup1 As OptionGroup With ;
    ButtonCount = 4, Top = 30, Left = 20, AutoSize = .T.,;
    BackColor = Rgb(239,239,239),BorderStyle = 0,;
    Option1.Caption = "Comm1", Option1.Top =  0,;
    Option2.Caption = "Comm2", Option2.Top = 30,;
    Option3.Caption = "Comm3", Option3.Top = 60,;
    Option4.Caption = "Comm4", Option4.Top = 90
  && Baud rate buttons group - Value = m.BaudRate
  Add Object OptionGroup2 As OptionGroup With ;
    ButtonCount = 6, Top = 30, Left = 140, AutoSize = .T.,;
    BackColor = Rgb(239,239,239),BorderStyle = 0,;
    Option1.Caption = "300",   Option1.Top =   0,;
    Option2.Caption = "1200",  Option2.Top =  30,;
    Option3.Caption = "2400",  Option3.Top =  60,;
    Option4.Caption = "4800",  Option4.Top =  90,;
    Option5.Caption = "9600",  Option5.Top = 120,;
    Option6.Caption = "19200", Option6.Top = 150
  && Parity buttons group - Value = m.Parity + 1
  Add Object OptionGroup3 As OptionGroup With ;
    ButtonCount = 3, Top = 30, Left = 250, AutoSize = .T.,;
    BackColor = Rgb(239,239,239),BorderStyle = 0,;
    Option1.Caption = "None", Option1.Top =   0,;
    Option2.Caption = "Odd",  Option2.Top =  30,;
    Option3.Caption = "Even", Option3.Top =  60
  && Byte length/stop bits buttons group
  *Value = Iif(m.ByteLength = 8, 1, Iif(m.Stopbit = 2, 3, 2))
  Add Object OptionGroup4 As OptionGroup With ;
    ButtonCount = 3, Top = 30, Left = 350, AutoSize = .T.,;
    BackColor = Rgb(239,239,239),BorderStyle = 0,;
    Option1.Caption = "8 bit byte/1 stop bit", Option1.Top =  0,;
    Option2.Caption = "7 bit byte/1 stop bit", Option2.Top = 30,;
    Option3.Caption = "7 bit byte/2 stop bit", Option3.Top = 60
  && Create OK command button
  Add Object MyCmndBtn1 As CommandButton With ;
    Caption = '\<OK', Left = 315, Top = 150, Height = 24, Width = 48
  && Create Cancel command button
  Add Object MyCmndBtn2 As CommandButton With ;
    Caption = '\<Cancel', Cancel = .T., Left = 385, Top = 150, Height = 24,Width = 48
 
  Procedure Init
    Lparameters toParm
    With This
      .SetAll("Height",30,"OptionButton")
      .SetAll("Width",100,"OptionButton")
      .SetAll("BackColor",Rgb(239,239,239),"OptionButton")
      .SetAll("BackColor",Rgb(239,239,239),"Label")
      .SetAll("ForeColor",Rgb(0,51,102),"OptionButton")
      .SetAll("ForeColor",Rgb(0,51,102),"Label")
      .SetAll("FontSize",12,"OptionButton")
      .SetAll("FontSize",12,"Label")
      .SetAll("FontBold",.T.,"OptionButton")
      .SetAll("FontBold",.T.,"Label")
      .SetAll("FontName",'Arial',"OptionButton")
      .SetAll("FontName",'Arial',"Label")
      .SetAll("TabStop",.F.,"OptionButton")
      .SetAll("Autosize",.T.,"Label")
      * Set values based on based parameters
      .OptionGroup1.Value = toParm.CommPort + 1
      .OptionGroup2.Value = toParm.BaudRate
      .OptionGroup3.Value = toParm.Parity + 1
      .OptionGroup4.Value = Iif(toParm.ByteLength = 8, 1, Iif(toParm.StopBit = 2, 3, 2))
    Endwith
  Endproc
 
  Procedure MyCmndBtn1.Click
    With Thisform
      .rtnVal[1] = .OptionGroup1.Value - 1
      .rtnVal[2] = .OptionGroup2.Value
      .rtnVal[3] = .OptionGroup3.Value - 1
      .rtnVal[4] = Iif(.OptionGroup4.Value = 1, 8, 7)
      .rtnVal[5] = Iif(.OptionGroup4.Value = 3, 2, 1)
      * close Form
      .Hide()
    Endwith
  Endproc
 
  Procedure MyCmndBtn2.Click
    * close Form
    Thisform.Hide()
    Thisform.Tag = "CANCELLED" && set a flag
  Endproc
Enddefine

6

Re: birden fazla parametre döndürülebilir mi?

Madem objelerden bahsettik ben de kullandığım bir yöntemden bahsedeyim smile

Bir formu başka bir form üzerinden çağırıyorum ve çağrılan form çağıran formun tüm property ve methodlarını kullanması gerekiyor. Bu durumda çağrılan formun Init'inde

Visual Fox Pro
LParameters toForm As Form

*!* Daha önceden forma oForm adında bir özellik ekledim.
ThisForm.oForm = m.toForm

Formun herhangi bir yerinde çağıran formla ilgili bir işlem yapacaksam

Visual Fox Pro
With ThisForm.oForm

    .Caption = "Merhaba"
    .HerhangiBirMethod
EndWith

Formu çağırırkende

Visual Fox Pro
Do Form FormAdi With ThisForm

Şeklinde kullanıyorum.

/o---------------------o\
     www.haser.com
\o---------------------o/

7

Re: birden fazla parametre döndürülebilir mi?

arkadaşlar açıklamalarınız için teşekkür ederim

En büyük sermaye nakit,nakit sermaye vakittir...