1

Konu: dikey yazı

herkese günaydın,
label da yada report ta dikey yazı nasıl yazdırabilirim.

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

2

Re: dikey yazı

ben bu işi için yazımı paintbrush ta dikey yazıp bmp olarak kaydediyorum ve onu report ta kullanıyorum.

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

3

Re: dikey yazı

sabit değerleri yazdırmak için mi kullanıyorsunuz yoksa değişkenleride o şekildemi yazdırıyorsunuz

dikey derken
DENEME yazısını

D
E
N
E
M
E
şeklinde değilde DENEME yazısını saat yönünde veya tersine çevirerek yazmaya çalışıyorum

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

4

Re: dikey yazı

Eğer VFP9 kullanıyorsan
http://msdn.microsoft.com/library/defau … ports2.asp

Sanırım Report listener ile bu işi çözebilirsin.

5

Re: dikey yazı

VFP da artık label align yapilabiliyor

6

Re: dikey yazı

Sanirim rotate dememk istedin:

myLabel.rotate = 90

7

Re: dikey yazı

benim bildiğim kadarıyla rotation property sadece formlardaki labeller için geçerli. reportlarda sedna ile geleceğini biliyorum. xfrx ise şu an destekliyor. ben onu kullanıyorum. sednax report çıktığında bile xfrx kadar güzel olmayacak anladığım kadarıyla...

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

8

Re: dikey yazı

cetinyasar yazdı:

Eğer VFP9 kullanıyorsan
http://msdn.microsoft.com/library/defau … ports2.asp

Sanırım Report listener ile bu işi çözebilirsin.


bu linki inceledim. anladığım kadarıyla kendi listenerini yazman gerekiyor rotate yapabilmek için. veya örnektekini kopyalayacaksın. ama sedna da hazır verilecek bu -diye biliyorum...

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

9

Re: dikey yazı

cetinbasoz yazdı:

Sanirim rotate dememk istedin:

myLabel.rotate = 90


evet smile

10

Re: dikey yazı

Report oldugunu farketmemistim bile. Ben VFP9 reportlarini kullanmadigim icin herhalde hicbir zaman da gormeyecegim.

xfrx'i bir kere denedim, hic begenmedim ve sildim (herkesi memnun edemiyorlar:)

11

Re: dikey yazı

metin yazdı:
cetinyasar yazdı:

Eğer VFP9 kullanıyorsan
http://msdn.microsoft.com/library/defau … ports2.asp

Sanırım Report listener ile bu işi çözebilirsin.


bu linki inceledim. anladığım kadarıyla kendi listenerini yazman gerekiyor rotate yapabilmek için. veya örnektekini kopyalayacaksın. ama sedna da hazır verilecek bu -diye biliyorum...


Bence Foxpro'nun report generator'u bedavaya bulunabilecek en güzellerinden bir tanesi. Başka dilde program yazıp bedava olduğu için VFP report'u kullananlar bile var. XFrx'de güzel ancak oda bana göre çok yavaş çalışıyor.

12

Re: dikey yazı

report listener la ilgili örneği olan varmı,yada nasıl hazırlanır,nereye yazılır,nasıl çalıştırılır,faydalı bir esermidir smile

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

13

Re: dikey yazı

Tarik,
(beni dinleme ama) listener'i ve reportbehavior 90'i kullanma.

14

Re: dikey yazı

cetinbasoz yazdı:

Report oldugunu farketmemistim bile. Ben VFP9 reportlarini kullanmadigim icin herhalde hicbir zaman da gormeyecegim.

xfrx'i bir kere denedim, hic begenmedim ve sildim (herkesi memnun edemiyorlar:)


merak ettim şimdi. vfp report'u kullanmıyorsun, xfrx kullanmıyorsun. frx2any veya crystal reports mu kullanıyorsun? yoksa daha başka bişey mi? başkaysa ne? report benim için çok önemli. hatta formlardan daha önemli. mevcut vfp formları yeterli oluyor, ama reportlarla ilgili sıkıntılar çok sık oluyor...

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

15

Re: dikey yazı

tarik yazdı:

report listener la ilgili örneği olan varmı,yada nasıl hazırlanır,nereye yazılır,nasıl çalıştırılır,faydalı bir esermidir smile


Visual Fox Pro
oPC = null

do (_REPORTPREVIEW) with m.oPC
opc.Caption = "BAŞLIK"
opc.TopForm = .T.
opc.Top = 75
opc.Left = 75
opc.Height = 600
opc.Width = 800
opc.CanvasCount = 1
opc.ZoomLevel = 5
 
oListener = createOBJECT("EffectsListener")
oListener.OutputType = 1
oListener.ListenerType = 1
oListener.PreviewContainer = m.oPC
 
REPORT FORM aaa OBJECT oListener TO PRINTER PROMPT PREVIEW
 
 
 
define class EffectsListener as _ReportListener of ;
    home() + 'ffc\_ReportListener.vcx'
 
    oEffectHandlers = .NULL.
    lDevirTamam = .F.
        && a collection of effect handlers
    dimension aRecords[1]
 
    function Init
        dodefault()
        with This
            .oEffectHandlers = createobject('Collection')
            .oEffectHandlers.Add(createobject('DynamicForeColorEffect'))
            .oEffectHandlers.Add(createobject('DynamicStyleEffect'))
            .oEffectHandlers.Add(createobject('AyIsimleriEffect'))
        endwith
    endfunc
 
    function BeforeReport
        dodefault()
        with This
            .SetFRXDataSession()
            dimension .aRecords[reccount(), 2]
            .ResetDataSession()
        endwith
    endfunc
 
    function EvaluateContents(tnFRXRecno, toObjProperties)
        local loEffectObject, ;
            loEffectHandler, ;
            lcExpression
        with This
            if not .aRecords[tnFRXRecno, 1]
                .aRecords[tnFRXRecno, 1] = .T.
                .aRecords[tnFRXRecno, 2] = .SetupEffectsForObject(tnFRXRecno)
            endif not .aRecords[tnFRXRecno, 1]
            for each loEffectObject in .aRecords[tnFRXRecno, 2]
                loEffectHandler = loEffectObject.oEffectHandler
                lcExpression    = loEffectObject.cExpression
                loEffectHandler.Execute(toObjProperties, lcExpression)
            next loEffect
        endwith
        dodefault(tnFRXRecno, toObjProperties)
    endfunc
 
    function SetupEffectsForObject(tnFRXRecno)
        local loFRX, ;
            loHandlers, ;
            loObject
        with This
            loFRX      = .GetReportObject(tnFRXRecno)
            loHandlers = createobject('Collection')
            for each loEffectHandler in .oEffectHandlers
                loObject = loEffectHandler.GetEffect(loFRX)
                if vartype(loObject) = 'O'
                    loHandlers.Add(loObject)
                endif vartype(loObject) = 'O'
            next loEffectHandler
        endwith
        return loHandlers
    endfunc
 
    procedure GetReportObject(tnFRXRecno)
        local loObject
        This.SetFRXDataSession()
        go tnFRXRecno
        scatter memo name loObject
        This.ResetDataSession()
        return loObject
    endproc
enddefine
 
define class EffectObject as Custom
    oEffectHandler = .NULL.
    cExpression    = ''
enddefine
 
define class EffectHandler as Custom
 
    function Execute(toObjProperties, tcExpression)
    endfunc
    function GetEffect(toFRX)
        local loObject
        loObject = .NULL.
        return loObject
    endfunc
    function EvaluateExpression(tcExpression)
        return evaluate(tcExpression)
    endfunc
enddefine
 
define class UserEffectHandler as EffectHandler
    cEffectsDirective = '*:EFFECTS'      && the directive that indicates an effect is needed
    cEffectName       = ''               && the effect name to look for (filled in in a subclass)
 
    function GetEffect(toFRX)
        local lcEffect, ;
            loObject
        lcEffect = This.cEffectsDirective + ' ' + This.cEffectName
        if atc(lcEffect, toFRX.User) > 0
            loObject = createobject('EffectObject')
            loObject.oEffectHandler = This
            loObject.cExpression = strextract(toFRX.User, lcEffect + ' = ', ;
                chr(13), 1, 3)
        else
            loObject = .NULL.
        endif atc(lcEffect, toFRX.User) > 0
        return loObject
    endfunc
enddefine
 
define class DynamicForeColorEffect as UserEffectHandler
    cEffectName = 'FORECOLOR'
 
    function Execute(toObjProperties, tcExpression)
        local lnColor, ;
            lnPenRed, ;
            lnPenGreen, ;
            lnPenBlue
        lnColor = This.EvaluateExpression(tcExpression)
        if vartype(lnColor) = 'N'
            lnPenRed   = bitand(lnColor, 0x0000FF)
            lnPenGreen = bitrshift(bitand(lnColor, 0x00FF00),  8)
            lnPenBlue  = bitrshift(bitand(lnColor, 0xFF0000), 16)
            with toObjProperties
                if .PenRed <> lnPenRed or ;
                    .PenGreen <> lnPenGreen or ;
                    .PenBlue <> lnPenBlue
                    .PenRed   = lnPenRed
                    .PenGreen = lnPenGreen
                    .PenBlue  = lnPenBlue
                    .Reload   = .T.
                endif .PenRed <> lnPenRed ...
            endwith
        endif vartype(lnColor) = 'N'
    endfunc
enddefine
 
define class DynamicStyleEffect as UserEffectHandler
    cEffectName = 'STYLE'
    function Execute(toObjProperties, tcExpression)
        local lnStyle
        lnStyle = This.EvaluateExpression(tcExpression)
        with toObjProperties
            if vartype(lnStyle) = 'N' and .FontStyle <> lnStyle
                .FontStyle = lnStyle
                .Reload    = .T.
            endif vartype(lnStyle) = 'N' ...
        endwith
    endfunc
enddefine
 
define class AyIsimleriEffect as UserEffectHandler
    cEffectName = 'AL_AYADI'
 
    function Execute(toObjProperties, tcExpression)
        local lnAy
        lnAy = This.EvaluateExpression(tcExpression)
        with toObjProperties
            if vartype(lnAy) = 'N'
                DO CASE
                    CASE lnAy = 1
                        .text = "Ocak" + .text
                    CASE lnAy = 2
                        .text = "Şubat" + .text
                    CASE lnAy = 3
                        .text = "Mart" + .text
                    CASE lnAy = 4
                        .text = "Nisan" + .text
                    CASE lnAy = 5
                        .text = "Mayıs" + .text
                    CASE lnAy = 6
                        .text = "Haziran" + .text
                    CASE lnAy = 7
                        .text = "Temmuz" + .text
                    CASE lnAy = 8
                        .text = "Ağustos" + .text
                    CASE lnAy = 9
                        .text = "Eylül" + .text
                    CASE lnAy = 10
                        .text = "Ekim" + .text
                    CASE lnAy = 11
                        .text = "Kasım" + .text
                    CASE lnAy = 12
                        .text = "Aralık" + .text
                    OTHERWISE
                        .text = "??????"
                ENDCASE
                .Reload    = .T.
            endif vartype(lnAy) = 'N' ...
        endwith
    endfunc
enddefine


Yukarıdaki report listener için class

Report içinde detail bölümüne yerleştirdiğin Field'ın properties bölümüne gel, Other sayfasını aç
Edit User Data'ya tıkla ve içine

Visual Fox Pro
*:EFFECTS FORECOLOR = iif(recno() = 1,RGB(255,0,0), RGB(0,0,0))


Yaz
recno()=1 sadece örnek orada istediğin değişkene göre farklı şeyler yapabilirsin
Yukarıdaki örnekte AyIsimleriEffect'i ayları yazdırmak için kullanıyorum.
Bence güzel olan raporun her satırında yazdırılacak olan text eline obje olarak ulaşıyor ve istediğin değişikliği yapabiliyorsun.

Biraz raporların ekrana gelmesini yavaşlatıyor ancak kısa raporların süslenmesinde kullanılabilir bence.

16

Re: dikey yazı

metin yazdı:
cetinbasoz yazdı:

Report oldugunu farketmemistim bile. Ben VFP9 reportlarini kullanmadigim icin herhalde hicbir zaman da gormeyecegim.

xfrx'i bir kere denedim, hic begenmedim ve sildim (herkesi memnun edemiyorlar:)


merak ettim şimdi. vfp report'u kullanmıyorsun, xfrx kullanmıyorsun. frx2any veya crystal reports mu kullanıyorsun? yoksa daha başka bişey mi? başkaysa ne? report benim için çok önemli. hatta formlardan daha önemli. mevcut vfp formları yeterli oluyor, ama reportlarla ilgili sıkıntılar çok sık oluyor...


VFP report kullaniyorum ama 90 ile listener'i kullanmiyorum. MindsEyeInc.com'dan ME'yi kullaniyorum ek olarak eger xfrx gibi birsey istersem. Ayrica kendi excel/word/html export rutinlerim var (dogrudan frx'ten degil, datadan).

17

Re: dikey yazı

Bu arada ben xfrx ile frx2any'i karistirmis olabilirim emin degilim.

18

Re: dikey yazı

cetinbasoz yazdı:

Bu arada ben xfrx ile frx2any'i karistirmis olabilirim emin degilim.


bence frx2any dir. onu ben de pek beğenmedim. xfrx word, excel, open office, pdf, html vs. vs.. hepsine report'u aynen gönderiyor. yalnız excel'e report'u aynen göndericem derken hücreleri bir tuhaf yapıyor.

preview'i çok güzel. arama filan yapabiliyorsun. solda bir pageframe oluyor, ordan istdeğin başlıklara tıklıyorsun report'un o kısmına gidiyor. full türkçe desteği var.

360" rotate desteği var.

bir de benim isteğimle bir özellik eklediler. reportta herhangi bir field veya label a tıklayınca istediğin foxpro komutu çalışıyor.

version 10'dan itibaren script eklediler. tamamen kodla output oluşturuyorsun. outputları bir dosyaya kaydedip daha sonra da preview edebiliyorsun.

yalnız her yeni versiyonda yeni buglar çıkıyor. sadece ben en az 10 bug düzelttirdim. bu çok şaşırtıcı geldi bana. full source kod dahil olduğu için kendi keşfedebildiğim bugları onların düzeltmesini beklemiyorum. martin haluza ve martin jindra gerçekten ellerinden gelen yardımı yapıyorlar.

minds eye nin de report unu inceledim. bence xfrx e göre çok zayıf. ha belki ben xfrx i aldıktan sonra geliştirmişlerdir onu bilemem.

peki report listeneri neden kullanmıyorsun? çok merak ettim...

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

19

Re: dikey yazı

Report listener'i sadece ilk ciktigi zamalar (SP1 oncesi) denedim. Daha ilk denememde (ne yazikki mevcut 8000+ sayfalik gercek bir raporumla oldu ilk deneme) once hersey asiri  yavasladi, mouse bile zor hareket ediyordu. Dakikalar sonra da iyice sacmalayip atti beni. Makineyi komple resetledim. Sonradan isin aslini ogrendim. Akillilar sayfa basina yapacaklarina once tum sayfalarin memoryde GDI+ goruntulerini hazirliyorlarmis. Tabii GDI+ handle sayisi maximum 10000 oldugundan 10000+ sayfalik raporlari hic isleme sansi bile yok (performans kismini sineye ceksende). Tabii o kadar sayfalik raporu kim kullanir gibi yaklasimlar bana uymuyor cunku benim kullanicilarim kullaniyor:) Bazen basmasalar bile kullaniyorlar, grid karsiliklari olsa da, napayim.
Eski reportun en sevdigim yani o raporlari bile hemen getirip gerekirse diger sayfalari hazirlayip gostermesiydi.

20

Re: dikey yazı

Bencede listener kullanmanın en mantıklı yolu kısa raporlar, Fatura irsaliye vs. gibi 1-2 sayfalık raporlar. Ben bazı uzun raporlarda kullanmayı denedim ama sonrada ne gerek var deyip kaldırdım.