1

(7 cevap, Genel konu içinde)

Konuka -> "Ali KONUK"
KonurAlp -> "KonurAlp"

2

(8 cevap, Genel konu içinde)

Peki ; 44.4 değerinde hem H1 de hem de H2 de 1 değerini atamışsın; Ama 22.2 değerinde sadece H4 sütunun da 1 ve 2 atamışsın. Burdaki mantık nedir? İş akış yöntemi tanımı olmadığından;  Test ve Sonuç Cursorlari arasında bir bağıntı kurulamıyor ( yada en azından ben beceremedim )  Birde bazı sütunlara 3 bazılarında 4 değeri var. Sonra tekrardan 1 ve 2 değerlerini kullanmışsın. Ordaki bağıntı nedir?

3

(8 cevap, Genel konu içinde)

Ramazan; 45 en üst limit mi? Birde sonuç tablosundaki H01...H09 sütünlarındaki değerleri neye göre atadın? Test tablosunda 6 tane H sütunu var, ama sonuç tablosunda 9 tane?

4

(8 cevap, Raporlar ve Etiketler konu içinde)

Üstat, haklıymışsın. Söylediğin gibi tüm kağıt tipleri eklenmiş. Kodları biraz gözden geçirmem ve derlemem gerekiyor. smile

5

(8 cevap, Raporlar ve Etiketler konu içinde)

Kullanıcıya 0 ( sıfır ) insiyatif bırakmak istiyorum. Arka planda her şey olsun bitsin; Sonra kullanıcı daha önceden seçili kağıt tipi neyse onunla devam etsin. Temel olarak yapmak istediğim bu.

Aslında şöyle bir çözümde düşünebilirim :

-Raporlama öncesi "Custom Paper" seçilir
-Kağıt boyutunu ben istediğim cinsten ayarlarım
-Raporumu yazdırırım
-Raporlama öncesi default değerlere geri dönerim

Galiba her durumda oldukça uğraştırıcak.

6

(8 cevap, Raporlar ve Etiketler konu içinde)

Üstat, 200 ve 600 ü mm cinsinden denemiştim, acaba olurmu diye.  Ama 20,15 gibi bir değer yaptığımda da değişmiyor sonuç.

Aslında ;

Visual Fox Pro
1

IF NOT ooo.AddForm("Ugur_Paper__002", 20,15, m.lcPrinterName)

satırındaki "Ugur_Paper__002" değerini her seferinde değiştirmezsem hata alıyorum. Yani bir yerlerde bir kağıt tipi ekleniyor. Ama her nedense ben o kağıt tipini göremiyorum.

7

(8 cevap, Raporlar ve Etiketler konu içinde)

Üstat kodu aşağıdaki şekilde düzenleyip çalıştırdım; ancak "Kağıt Tipi"ni (Custom Paper)  "her seferinde değiştirdiğimde" hata vermiyor . Hata vermediği durumda ise kod hiç bir ekleme / düzeltme yapmıyor. 

Bu ne kadar normal?

Not: Debug modunda; "lcForm" değişkeninde tuhaf ascii karakterler görünüyor!!

Visual Fox Pro
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
LOCAL lcPrinterName

 
m.lcPrinterName = GetPrinter()
 
SET STEP ON
 
* All sizes in cm
ooo = NEWOBJECT("AddPrinterForm", "", "", "Metric")
IF NOT ooo.AddForm("Ugur_Paper__002", 200,600, m.lcPrinterName)
  * Error
ENDIF
 
Function Num2Long(tnValue)
Return BinToC(m.tnValue, '4RS')
EndFunc
 
 
* AddPrinterForm.prg
DEFINE CLASS AddPrinterForm AS Custom
 
    HIDDEN cUnit, cPrinterName, nFormHeight, nFormWidth, nLeftMargin, ;
              nTopMargin, nRightMargin, nBottomMargin, nInch2mm, nCm2mm, nCoefficient, hHeap
 
    cUnit = "English"        && inches or Metric - cm's
    cPrinterName = ""
    nFormHeight = 0
    nFormWidth = 0
    nLeftMargin = 0
    nTopMargin = 0
    nRightMargin = 0
    nBottomMargin = 0
 
    cApiErrorMessage = ""
    cErrorMessage = ""
 
    nInch2mm = 25.4
    nCm2mm = 10
    nCoefficient = This.nInch2mm * 1000
 
    hHeap = 0
 
    * Win API support class
*!*        oWas = NULL
 
    PROCEDURE Init(tcUnit)
*!*        This.oWas = NEWOBJECT("WinApiSupport", "WinApiSupport.fxp")
    IF PCOUNT() = 1
        This.cUnit = PROPER(tcUnit)
    ENDIF
    This.LoadApiDlls()
    This.hHeap = HeapCreate(0, 4096, 0)
    * Use Windows default printer
    This.cPrinterName = SET("Printer",2)
    ENDPROC
 
    PROCEDURE cUnit_Assign(tcUnit)
    IF INLIST(tcUnit, "English", "Metric")
        This.cUnit = PROPER(tcUnit)
    ELSE
        RETURN    
    ENDIF
    * Calculate conversion coefficient
    This.nCoefficient = IIF(PROPER(This.cUnit) = "English", ;
                        This.nInch2mm, This.nCm2mm) * 1000
    ENDPROC
 
    PROCEDURE Destroy
    IF This.hHeap <> 0
        HeapDestroy(This.hHeap)
    ENDIF
 
    ENDPROC
 
    PROCEDURE SetFormMargins(tnLeft, tnTop, tnRight, tnBottom)
    WITH This
        .nLeftMargin     = tnLeft   * .nCoefficient
        .nTopMargin     = tnTop    * .nCoefficient
        .nRightMargin     = tnRight  * .nCoefficient
        .nBottomMargin     = tnBottom * .nCoefficient
    ENDWITH
    ENDPROC
 
    PROCEDURE AddForm(tcFormName, tnWidth, tnHeight, tcPrinterName)
    LOCAL lhPrinter, llOK, lcForm
 
    This.nFormWidth  = tnWidth  * This.nCoefficient
    This.nFormHeight = tnHeight * This.nCoefficient
    IF PCOUNT() > 3
        This.cPrinterName = tcPrinterName
    ENDIF
 
    This.ClearErrors()
    lhPrinter = 0
    IF OpenPrinter(This.cPrinterName, @lhPrinter, 0) = 0
        This.cErrorMessage = "Unable to get printer handle for " + This.cPrinterName
        This.cApiErrorMessage = WinApiErrMsg(GetLastError())
        RETURN .F.
    ENDIF
 
    lnFormName = HeapAlloc(This.hHeap, 0, LEN(tcFormName) + 1)
    = SYS(2600, lnFormName, LEN(tcFormName) + 1, tcFormName + CHR(0))
 
    * Build FORM_INFO_1 structure
*!*        WITH This.oWas
*!*            lcForm = .Num2Long(0) + .Num2Long(lnFormName) + ;
*!*                .Num2Long(This.nFormWidth) + .Num2Long(This.nFormHeight) + ;
*!*                .Num2Long(This.nLeftMargin) + .Num2Long(This.nTopMargin) + ;
*!*                .Num2Long(This.nFormWidth - This.nRightMargin) + ;
*!*                .Num2Long(This.nFormHeight - This.nBottomMargin)
*!*        ENDWITH
 
lcForm = Num2Long(0) + Num2Long(lnFormName) + ;
    Num2Long(This.nFormWidth) + Num2Long(This.nFormHeight) + ;
    Num2Long(This.nLeftMargin) + Num2Long(This.nTopMargin) + ;
    Num2Long(This.nFormWidth - This.nRightMargin) + ;
    Num2Long(This.nFormHeight - This.nBottomMargin)
 
 
    * Finally, call the API
    IF AddForm(lhPrinter, 1, @lcForm) = 0
        This.cErrorMessage = "Unable to Add Form " + tcFormName
        This.cApiErrorMessage = STRTRAN(WinApiErrMsg(GetLastError()), "file", "form", -1, -1, 3)
        llOK = .F.
    ELSE
        llOK = .T.
    ENDIF
    = HeapFree(This.hHeap, 0, lnFormName)
    = ClosePrinter(lhPrinter)
 
    RETURN llOK
 
    PROCEDURE ClearErrors
    This.cErrorMessage = ""
    This.cApiErrorMessage = ""
    ENDPROC
 
    PROCEDURE DeleteForm(tcFormName, tcPrinterName)
    LOCAL lhPrinter, llOK
 
    IF PCOUNT() > 1
        This.cPrinterName = tcPrinterName
    ENDIF
 
    This.ClearErrors()
    lhPrinter = 0
    IF OpenPrinter(This.cPrinterName, @lhPrinter, 0) = 0
        This.cErrorMessage = "Unable to get printer handle for " + This.cPrinterName + "."
        This.cApiErrorMessage = WinApiErrMsg(GetLastError())
        RETURN .F.
    ENDIF
 
    * Finally, call the API
    llOK = ( DeleteForm(lhPrinter, tcFormName) <> 0 )
    IF NOT llOK
        This.cErrorMessage = "Unable to delete Form " + tcFormName
        This.cApiErrorMessage = STRTRAN(WinApiErrMsg(GetLastError()), "file", "form", -1, -1, 3)
    ENDIF
    = ClosePrinter(lhPrinter)
    RETURN llOK
 
    HIDDEN PROCEDURE LoadApiDlls
        DECLARE Long HeapCreate IN WIN32API Long dwOptions, Long dwInitialSize, Long dwMaxSize
        DECLARE Long HeapAlloc IN WIN32API Long hHeap, Long dwFlags, Long dwBytes
        DECLARE Long HeapFree IN WIN32API Long hHeap, Long dwFlags, Long lpMem
        DECLARE HeapDestroy IN WIN32API Long hHeap
        DECLARE Long GetLastError IN kernel32
    ENDPROC
 
ENDDEFINE
*----------------------------------------------------------------------------------------------
 
FUNCTION OpenPrinter(tcPrinterName, thPrinter, tcDefault)
DECLARE Long OpenPrinter IN WinSpool.Drv ;
    String pPrinterName, Long @ phPrinter, String pDefault
RETURN     OpenPrinter(tcPrinterName, @thPrinter, tcDefault)
 
FUNCTION ClosePrinter (thPrinter)
DECLARE Long ClosePrinter IN WinSpool.Drv Long hPrinter
RETURN ClosePrinter(thPrinter)
 
 
FUNCTION AddForm(thPrinter, tnLevel, tcForm)
DECLARE Long AddForm IN winspool.drv Long hPrinter, Long Level, String @pForm
RETURN AddForm(thPrinter, tnLevel, tcForm)
 
FUNCTION DeleteForm(thPrinter, tcForm)
DECLARE Long DeleteForm IN winspool.drv Long hPrinter, String  pFormName
RETURN DeleteForm(thPrinter, tcForm)

8

(8 cevap, Raporlar ve Etiketler konu içinde)

Üstat, sabah neşesi oldun smile
Sabah işlerini toparladıktan sonra hemen test edip sonucu vericem.

9

(8 cevap, Raporlar ve Etiketler konu içinde)

Herkese merhabalar;

Özetle yapmak istediğim şöyle bir şey : sistemde tanımlı olan yazıcıma kullanıcı tanımlı  bir kağıt eklemek istiyorum ("Custom Paper").

Sergey Berezniker 'e ait aşağıdaki kodu buldum ama bir türlü sonuç alamadım. Bu konuda yardım alabileceğim kimse var mı?

Her durumda "Unable to Add Form MyCustopmForm1" hatası alıyorum.

http://www.berezniker.com/content/pages … nter-forms

Visual Fox Pro
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
* All sizes in inches

ooo = NEWOBJECT("AddPrinterForm", "AddPrinterForm.fxp")
IF NOT ooo.AddForm("MyCustomForm1", 5,7, lcPrinterName)
    ? ooo.cErrorMessage
    ? ooo.cApiErrorMessage
  * Error
ENDIF
 
*!*    * Delete just created form
*!*    ooo = NEWOBJECT("AddPrinterForm", "AddPrinterForm.fxp")
*!*    IF NOT ooo.DeleteForm("MyCustomForm1", lcPrinterName)
*!*        ? ooo.cErrorMessage
*!*        ? ooo.cApiErrorMessage
*!*      * Error
*!*    ENDIF
 
 
* All sizes in cm
ooo = NEWOBJECT("AddPrinterForm", "AddPrinterForm.fxp", "", "Metric")
IF NOT ooo.AddForm("MyCustomForm2", 15,17, lcPrinterName)
  * Error
ENDIF
 
*!*    * Delete just created form
*!*    ooo = NEWOBJECT("AddPrinterForm", "AddPrinterForm.fxp")
*!*    IF NOT ooo.DeleteForm("MyCustomForm2", lcPrinterName)
*!*        ? ooo.cErrorMessage
*!*        ? ooo.cApiErrorMessage
*!*      * Error
*!*    ENDIF
 
* AddPrinterForm.prg
DEFINE CLASS AddPrinterForm AS Custom
 
    HIDDEN cUnit, cPrinterName, nFormHeight, nFormWidth, nLeftMargin, ;
              nTopMargin, nRightMargin, nBottomMargin, nInch2mm, nCm2mm, nCoefficient, hHeap
 
    cUnit = "English"        && inches or Metric - cm's
    cPrinterName = ""
    nFormHeight = 0
    nFormWidth = 0
    nLeftMargin = 0
    nTopMargin = 0
    nRightMargin = 0
    nBottomMargin = 0
 
    cApiErrorMessage = ""
    cErrorMessage = ""
 
    nInch2mm = 25.4
    nCm2mm = 10
    nCoefficient = This.nInch2mm * 1000
 
    hHeap = 0
 
    * Win API support class
    oWas = NULL
 
    PROCEDURE Init(tcUnit)
    This.oWas = NEWOBJECT("WinApiSupport", "WinApiSupport.fxp")
    IF PCOUNT() = 1
        This.cUnit = PROPER(tcUnit)
    ENDIF
    This.LoadApiDlls()
    This.hHeap = HeapCreate(0, 4096, 0)
    * Use Windows default printer
    This.cPrinterName = SET("Printer",2)
    ENDPROC
 
    PROCEDURE cUnit_Assign(tcUnit)
    IF INLIST(tcUnit, "English", "Metric")
        This.cUnit = PROPER(tcUnit)
    ELSE
        RETURN    
    ENDIF
    * Calculate conversion coefficient
    This.nCoefficient = IIF(PROPER(This.cUnit) = "English", ;
                        This.nInch2mm, This.nCm2mm) * 1000
    ENDPROC
 
    PROCEDURE Destroy
    IF This.hHeap <> 0
        HeapDestroy(This.hHeap)
    ENDIF
 
    ENDPROC
 
    PROCEDURE SetFormMargins(tnLeft, tnTop, tnRight, tnBottom)
    WITH This
        .nLeftMargin     = tnLeft   * .nCoefficient
        .nTopMargin     = tnTop    * .nCoefficient
        .nRightMargin     = tnRight  * .nCoefficient
        .nBottomMargin     = tnBottom * .nCoefficient
    ENDWITH
    ENDPROC
 
    PROCEDURE AddForm(tcFormName, tnWidth, tnHeight, tcPrinterName)
    LOCAL lhPrinter, llOK, lcForm
 
    This.nFormWidth  = tnWidth  * This.nCoefficient
    This.nFormHeight = tnHeight * This.nCoefficient
    IF PCOUNT() > 3
        This.cPrinterName = tcPrinterName
    ENDIF
 
    This.ClearErrors()
    lhPrinter = 0
    IF OpenPrinter(This.cPrinterName, @lhPrinter, 0) = 0
        This.cErrorMessage = "Unable to get printer handle for " + This.cPrinterName
        This.cApiErrorMessage = WinApiErrMsg(GetLastError())
        RETURN .F.
    ENDIF
 
    lnFormName = HeapAlloc(This.hHeap, 0, LEN(tcFormName) + 1)
    = SYS(2600, lnFormName, LEN(tcFormName) + 1, tcFormName + CHR(0))
 
    * Build FORM_INFO_1 structure
    WITH This.oWas
        lcForm = .Num2Long(0) + .Num2Long(lnFormName) + ;
            .Num2Long(This.nFormWidth) + .Num2Long(This.nFormHeight) + ;
            .Num2Long(This.nLeftMargin) + .Num2Long(This.nTopMargin) + ;
            .Num2Long(This.nFormWidth - This.nRightMargin) + ;
            .Num2Long(This.nFormHeight - This.nBottomMargin)
    ENDWITH
 
    * Finally, call the API
    IF AddForm(lhPrinter, 1, @lcForm) = 0
        This.cErrorMessage = "Unable to Add Form " + tcFormName
        This.cApiErrorMessage = STRTRAN(WinApiErrMsg(GetLastError()), "file", "form", -1, -1, 3)
        llOK = .F.
    ELSE
        llOK = .T.
    ENDIF
    = HeapFree(This.hHeap, 0, lnFormName)
    = ClosePrinter(lhPrinter)
 
    RETURN llOK
 
    PROCEDURE ClearErrors
    This.cErrorMessage = ""
    This.cApiErrorMessage = ""
    ENDPROC
 
    PROCEDURE DeleteForm(tcFormName, tcPrinterName)
    LOCAL lhPrinter, llOK
 
    IF PCOUNT() > 1
        This.cPrinterName = tcPrinterName
    ENDIF
 
    This.ClearErrors()
    lhPrinter = 0
    IF OpenPrinter(This.cPrinterName, @lhPrinter, 0) = 0
        This.cErrorMessage = "Unable to get printer handle for " + This.cPrinterName + "."
        This.cApiErrorMessage = WinApiErrMsg(GetLastError())
        RETURN .F.
    ENDIF
 
    * Finally, call the API
    llOK = ( DeleteForm(lhPrinter, tcFormName) <> 0 )
    IF NOT llOK
        This.cErrorMessage = "Unable to delete Form " + tcFormName
        This.cApiErrorMessage = STRTRAN(WinApiErrMsg(GetLastError()), "file", "form", -1, -1, 3)
    ENDIF
    = ClosePrinter(lhPrinter)
    RETURN llOK
 
    HIDDEN PROCEDURE LoadApiDlls
        DECLARE Long HeapCreate IN WIN32API Long dwOptions, Long dwInitialSize, Long dwMaxSize
        DECLARE Long HeapAlloc IN WIN32API Long hHeap, Long dwFlags, Long dwBytes
        DECLARE Long HeapFree IN WIN32API Long hHeap, Long dwFlags, Long lpMem
        DECLARE HeapDestroy IN WIN32API Long hHeap
        DECLARE Long GetLastError IN kernel32
    ENDPROC
 
ENDDEFINE
*----------------------------------------------------------------------------------------------
 
FUNCTION OpenPrinter(tcPrinterName, thPrinter, tcDefault)
DECLARE Long OpenPrinter IN WinSpool.Drv ;
    String pPrinterName, Long @ phPrinter, String pDefault
RETURN     OpenPrinter(tcPrinterName, @thPrinter, tcDefault)
 
FUNCTION ClosePrinter (thPrinter)
DECLARE Long ClosePrinter IN WinSpool.Drv Long hPrinter
RETURN ClosePrinter(thPrinter)
 
 
FUNCTION AddForm(thPrinter, tnLevel, tcForm)
DECLARE Long AddForm IN winspool.drv Long hPrinter, Long Level, String @pForm
RETURN AddForm(thPrinter, tnLevel, tcForm)
 
FUNCTION DeleteForm(thPrinter, tcForm)
DECLARE Long DeleteForm IN winspool.drv Long hPrinter, String  pFormName
RETURN DeleteForm(thPrinter, tcForm)

10

(11 cevap, Formlar konu içinde)

Ali abi; iyi tiyo wink

Myform. Mygrid.Column1.Text1.SetFocus

11

(11 cevap, Formlar konu içinde)

Senin derdin başka smile Bir ara ben o sorun yüzünden kafayı çizmiştim. Çetin Üstat el atınca hallolmuştu.
Forumda örnek var.

http://www.fox4um.com/topic/1545/formsetfocus-hk/

12

(11 cevap, Formlar konu içinde)

Doğrumu anladım emin değilim ama;

Visual Fox Pro
1

ThisForm.Grid1.Setfocus()


Visual Fox Pro
1

_Screen.ActiveForm.Grid1.Setfocus()

13

(25 cevap, Web Uygulamaları konu içinde)

Dabo; hatırlatma amaçlı bir bilgilendirmeydi. Beni çok etkiledi. Ama Dabo nun tek ve kabul edilemez bir kusuru var. Python 3.0 la uyumlu olmaması. Çünkü Python 3.0 la dilin yapısı önemli sayılabilecek bir biçimde değişti. Geriye yönelik uyumsuzlukla ilgili Python kullanıcıları arasında bile fikir ayrılıkları ve "kabul edilemez" görüşleri var. Ama sonuç olarak yapılan buydu.

Python için "Web Framework" formatında zaten bilinen bir çok alternatif var. :

http://en.wikipedia.org/wiki/Comparison … frameworks

Benim Dabo yu vurgulamaktaki kastım "Özgür, açık kaynak" olmasıydı. Ve detaya inmeden baktığımda ise VFP yi ait bir çok şeyi "bir şekilde" Python a implemente etmişler. Browse ve Grid implemetasyonu bile başlı başına bir tartışma konusu bence.

14

(25 cevap, Web Uygulamaları konu içinde)

Aydın abi  piton la beraber daboframework u de incelemelisin. Fox turevi bir implemenasyon. Python icin

15

(25 cevap, Web Uygulamaları konu içinde)

Benim için Python parlayan bir yıldız.  smile

16

(25 cevap, Web Uygulamaları konu içinde)

Bende şiddetle tüm MS ürünlerinden uzak durmanızı öneriyorum ( ŞAKA ) smile

Arkadaşlar; yeni bir MS teknolojisine yıllarınızı verip öğrendikten sonra bir gün yeniden "destek bitti" sözünü duymaya sabrınız var m mı?

Ben uzun zamandır C# ve .Net e bel bağlamıştım. Hatta kıyısından köşesinden öğrenmeye bile başlamıştım. Sonunda VFP ile gittiği yere kadar devam dedim. Yolun bittiği yerde ise kesinlike bir MS teknolojisine güvenmeyi istemiyorum. ( En azından şimdilik hissiyatım bu. )

17

(5 cevap, ActiveX Kontrolleri konu içinde)

Soykan Abi;

Denedim; gayet güzel çalışıyor.

Çok teşekkürler smile

Bende bir kaç alternatif bakınıyordum. Hiç uğraşmadan sonuç almak güzel oldu...

18

(5 cevap, ActiveX Kontrolleri konu içinde)

Win7 64 bit makinede en son güncellemeleri yükledikten sonra BLAT.DLL unutabilirsin! ( En azından benim PC de öyle oldu. )

19

(5 cevap, ActiveX Kontrolleri konu içinde)

Öncelikle herkese merhaba;

Yakın bir zamana kadar BLAT.DLL i rahatlıkla kullanıyordum. Bugün farkettim ki; Windows 7 ( 64 bit Türkçe ); BLAT a fena halde bozulmuş.

Dosyayı unregister edip tekrar register ettim ama nafile. Register ettiğim de BLAT.DLL dosyasının boyutu her daim "0" byte olarak güncelleniyor. Dosyayı C:\Windows\SysWOW64 klasörüne kopyaladıktan sonra register ediyorum.

Sorum şu: Sorun BLAT.DLL demi? Windows 'ta mı? Mail yollamak için alternatif bir yol mu denemeliyim? Yoksa BLAT ile yoluma devam etmek için bir yol var mı?

Cevap ve yorumlar için şimdiden teşekkür ediyorum.

Bu arada kullandığım (XP ve Vistada çalışan ) şu şekildeydi :

http://www.sweetpotatosoftware.com/SPSB … 96fb7.aspx

Visual Fox Pro
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
*!*    Yahoo ÇALIŞIYOR

*******************************
*!* Example of using SendViaBLAT
*******************************
#DEFINE PRIORITYHIGH 1
#DEFINE PRIORITYLOW 0
 
DIMENSION aryAttach(2)
aryAttach(1) = "C:\Test1.txt" && change to an actual file that exists on your computer
aryAttach(2) = "C:\Test2.txt" && change to an actual file that exists on your computer
 
LOCAL lcFrom, lcTo, lcSubject, lcBody, lcCC, lcBCC, lcMailServer, lcUserName, lcPassword, lnPort, lnPriority, llHTMLFormat, lcErrReturn
 
lcFrom = "ugurlu2001#yahoo;com"
lcTo = "ugurlu2001#hotmail;com"
lcSubject = "Deneme konusu!"
*!* Sending the body in HTML format
llHTMLFormat = .T. && change to .F. to send plain text message
lcBody = "<a href='http://www.fox4um.com'>" + ;
 "Deneme icin yollandi!" + ;
 "</a>"
lcCC = "ugurlu2001#gmail;com"
lcBCC = "ugurlu2001#yahoo;com"
lcMailServer = "smtp.mail.yahoo.com" && my SMTP Server
lnPort = 25 && or 587 or 995 default SMTP Server port
lcUserName = "ugurlu2001#yahoo;com" && my SMTP username
lcPassword = "xxxxxxxxxxxx/" && my SMTP password
lnPriority = PRIORITYHIGH
 
SendViaBLAT(@lcErrReturn, lcFrom, lcTo, lcSubject, lcBody, @aryAttach, lcCC, lcBCC, lcMailServer, lnPort, lcUserName, lcPassword, lnPriority, llHTMLFormat)
 
IF EMPTY(lcErrReturn)
 MESSAGEBOX("'" + lcSubject + "' sent successfullly.", 64, "Send email via BLAT")
ELSE
 MESSAGEBOX("'" + lcSubject + "' failed to be sent.  Reason:" + CHR(13) + lcErrReturn, 64, "Send email via BLAT")
ENDIF
 
*******************************************
PROCEDURE SendViaBLAT(tcReturn, tcFrom, tcTo, tcSubject, tcBody, taFiles, tcCC, tcBCC, tcMailServer, tnPort, tcUserName, tcPassword, tnPriority, tlHTMLFormat)
*******************************************
 LOCAL lcBlatParam, lcBodyFile, lnCountAttachments, lnResult, loError as Exception
 
 lcBodyFile = ""
 
 TRY
  *!* Include full path in Declare, such as "C:\Blat240\full\blat.dll"
  *!* or make sure that blat.dll is included in the system's PATH variable
  DECLARE INTEGER Send IN "O:\F_Kullan\Blat\blat262.full\blat262\full\blat.dll" STRING cParam
 
  lcBodyFile = ADDBS(SYS(2023)) + SYS(2015) + ".txt"
  STRTOFILE(tcBody, lcBodyFile, 0) && body is placed in a text file to be sent by BLAT
 
  lcBlatParam = GetShortPath(lcBodyFile)
 
  IF TYPE("tcTo") = "C"
    lcBlatParam = lcBlatParam + " -to " + ALLTRIM(tcTo)
  ENDIF
  IF TYPE("tcFrom") = "C"
    lcBlatParam = lcBlatParam + " -f " + ALLTRIM(tcFrom)
  ENDIF
  IF TYPE("tcCC") = "C"
    lcBlatParam = lcBlatParam + " -cc " + ALLTRIM(tcCC)
  ENDIF
  IF TYPE("tcBCC") = "C"
    lcBlatParam = lcBlatParam + " -bcc " + ALLTRIM(tcBCC)
  ENDIF
  IF TYPE("tcSubject") = "C"
    lcBlatParam = lcBlatParam + [ -s "] + ALLTRIM(tcSubject) + ["]
  ENDIF
  IF TYPE("tcMailserver") = "C"
    lcBlatParam = lcBlatParam + " -server " + ALLTRIM(tcMailserver)
  ENDIF
  IF TYPE("tnPort") = "N"
    lcBlatParam = lcBlatParam + ":" + TRANSFORM(tnPort)
  ENDIF
  IF TYPE("tcUsername") = "C"
    lcBlatParam = lcBlatParam + " -u " + ALLTRIM(tcUsername)
  ENDIF
  IF TYPE("tcPassword") = "C"
    lcBlatParam = lcBlatParam + " -pw " + ALLTRIM(tcPassword)
  ENDIF
  IF TYPE("tnPriority") = "N" AND BETWEEN(tnPriority, 0, 1)
    lcBlatParam = lcBlatParam + " -priority " + TRANSFORM(tnPriority)
  ENDIF
  IF TYPE("tlHTMLFormat") = "L" AND tlHTMLFormat
    lcBlatParam = lcBlatParam + " -html"
  ENDIF
 
  IF TYPE("taFiles", 1) = "A"
    lcBlatParam = lcBlatParam + " -attach "
   FOR lnCountAttachments = 1 TO ALEN(taFiles)
     lcBlatParam = lcBlatParam + GetShortPath(ALLTRIM(taFiles(lnCountAttachments))) + ","
   ENDFOR
   lcBlatParam = LEFT(lcBlatParam, LEN(lcBlatParam) - 1) && Remove Extra Comma
  ENDIF
 
  lnResult = Send(ALLTRIM(lcBlatParam))
 
  IF lnResult != 0
   DO CASE
    CASE lnResult = -2
     THROW "The server actively denied our connection./The mail server doesn't like the sender name. "
    CASE lnResult = -1
     THROW "Unable to open SMTP socket" OR ;
       "SMTP get line did not return 220" OR ;
       "command unable to write to socket" OR ;
       "Server does not like To: address" OR ;
       "Mail server error accepting message data."
    CASE lnResult = 1
     THROW "File name (message text) not given" OR ;
       "Bad argument given"
    CASE lnResult = 2
     THROW "File (message text) does not exist"
    CASE lnResult = 3
     THROW "Error reading the file (message text) or attached file"
    CASE lnResult = 4
     THROW "File (message text) not of type FILE_TYPE_DISK "
    CASE lnResult = 5
     THROW "Error Reading File (message text)"
    CASE lnResult = 12
     THROW "-server or -f options not specified and not found in registry"
    CASE lnResult = 13
     THROW "Error opening temporary file in temp directory"
    OTHERWISE
     THROW "Unknown Error"
   ENDCASE
  ENDIF
 
 CATCH TO loError
  tcReturn = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ;
   [LineNo: ] + STR(loError.LINENO) + CHR(13) + ;
   [Message: ] + loError.MESSAGE + CHR(13) + ;
   [Procedure: ] + loError.PROCEDURE + CHR(13) + ;
   [Details: ] + loError.DETAILS + CHR(13) + ;
   [StackLevel: ] + STR(loError.STACKLEVEL) + CHR(13) + ;
   [LineContents: ] + loError.LINECONTENTS
 FINALLY
  CLEAR DLLS "Send"
  IF FILE(lcBodyFile)
   ERASE (lcBodyFile)
  ENDIF
 ENDTRY
ENDPROC
 
****************************************
Function GetShortPath
****************************************
 LPARAMETERS lcFileName
 LOCAL lnReturn, lcBuffer
 
 Declare Integer GetShortPathNameA In Win32API As GetShortPathName String, String, Integer
 
 lcBuffer = SPACE(255)
 lnReturn= GetShortPathName(lcFileName, @lcBuffer, 255)
 
 Clear Dlls "GetShortPathName"
 
 Return (Left(lcBuffer, lnReturn))
ENDFUNC

20

(5 cevap, Formlar konu içinde)

Aydın abi. Bu polomiğe girmiycem smile
İşin ucu kaçıveriyor sonra...

21

(5 cevap, Formlar konu içinde)

Üstat, bazen çok iyi bildiğin bir konuda gereksiz yere öyle çetrefilli detaylar aklına geliyor ki insanın... smile Kolaya kaçıp sormak daha işime geliyor smile

22

(5 cevap, Formlar konu içinde)

Visual Fox Pro
1

2
This.AddProperty("CursorSavedStatus",.F.)

This.AddProperty("CursorSavedNo",0)

Şeklinde halloldu. smile

23

(5 cevap, Formlar konu içinde)

Merhabalar;

Bir pageframe içindeki herhangi bir page in INIT() event ın da şöyle bir şey yapabiliyormuyum?

Visual Fox Pro
1

2
This.AddProperty(This,"CursorSavedStatus",.F.)

This.AddProperty(This,"CursorSavedNo",0)

Yoksa uzun yola devam edip _Screen.Addproperty ..... ile devam mı etmeliyim?

24

(3 cevap, Genel konu içinde)

Espor;

Çok teşekkür ediyorum. Kendi arşivime aldım smile

Ellerine sağlık...

25

(16 cevap, Genel konu içinde)

Düzeltme :

"4. İşletim sistemleri galiba 3 RD usere izin veriyor, fazla bağlantı için her 5 eke 1.000 $ falan lisans gerekiyor". Windows 2008 Server da 5 Kullanıcı 200-300 dolarlar civarında.