Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Kayan Yazı
#1
Yazdığım bir uygulama için "kayan yazı" ile ilgili bir şeyler yazacağım yakın bir zamanda. Bazı testler yaptım VCL ve FMX üzerinde, ancak performanslarından pek de memnun kalmadım. Bu neden ile DirectX kullanarak geliştireceğim. Dolayısı ile verilen bir metni parse etmem gerekecek. Kendime ait bir takım komut setleri oluşturma ve bu komut setleri ile kayacak olan yazıyı formatlı bir şekilde ekranda göstererek kaydırmak istiyorum. Sizlerden bu komut seti ile alakalı fikirlerinizi rica ediyorum.

Bir kaç örnek vereyim:
  • Bütün komutlar </e> ile biter. (e = End)
  • <b>...</e> arası metin Bold olur.
  • <i>...</e> arası metin Italic olur.
  • <u>...</e> arası metin Underline olur.
  • <a>...</e> arası bir link olarak değerlendirilir.
  • <p="c:\test.png></e> belirtilen path'deki resmi yükler ve kayan yazıya ekler. (p = Picture)
  • <r="ResourceName"></e> belirtilen ResourceName isimli resource dosyasını yükler ve kayan yazıya ekler. (Tabii resource bir görsel olmalıdır) (r = Resource)
  • <fs=24>...</e> arasındaki metnin font boyutu 24 olarak ayarlanır. (fs = Font Size)
  • <fn="Gabriola">...</e> arasındaki metnin font adı "Gabriola" olarak ayarlanır. (fn = Font Name)
Bu konu hakkında görüş ve önerileriniz var ise paylaşırsanız sevinirim.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#2
Merhaba hocam,
En doğru yöntemi yazmışsınız zaten, söylenecek çok şey yok. Kullanım ve yapı olarak HTML tag'lara benziyor. Bu da yönteminizin sıkıntısız ve hızlı kodlanabilir olacağı anlamına geliyor.
Şimdiden hayırlı olsun.
Cevapla
#3
Fırsat bulabilir isem eğer, bunu bir component olarak yazıp; buradan sizlerle de paylaşmayı düşünüyorum. Bu nedenle yorumlarınızı component'in kullanıcısı olarak da yazabilirsiniz Smile

 Muhtemelen bir rtf çeviricisi de koymam gerekecektir component içeriğine. Netice de bir yazının kayabilmesi için önce bir data olmalı Smile
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#4
Sonraki sürümler için faydalı olabileceğini düşündüğüm birkaç naçizhane önerim;
  • Kaymanın hangi yöne doğru olacağı,
  • Hızı,
  • Alpha Blend değeri,
  • Başlangıç ve Bitiş Alpha Blend değerleri,
  • ve en önemlisi Nesne olacaksa ben oyumu TWinControl'den yana kullanırım.
Cevapla
#5
Tuğrul abi vakti zamanında eczaneler için tabela uygulaması geliştirmiştim o zaman şunu kullanmıştım http://www.delphiarea.com/products/delph...s/marquee/ zengin metin ve imaj da kaydırabiliyordu kırpışma yapmıyordu, açık kaynak kodlu bir bileşen.
Cevapla
#6
Teşekkür ederim yorumlarınıza, dikkate alacağım. Volkancım, o component'i biliyorum; ama benim için yeterince smooth değil Wink

Şimdilik basit bir örnek uygulamayı buradan indirebilirsiniz:
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#7
Yapılmaya çalışan işlem HTML'in marquee tag'ını hatırlattı bana. 
https://developer.mozilla.org/tr/docs/We...nt/marquee

Bu yüzden TWebBrowser kullanılsa nasıl olur sorusu aklıma takıldı.
Daha doğrusu IHTMLDocument interface'i kullanılarak yapılabilir mi acaba diye düşünüyorum. Böylece tüm HTML tag'ları da kullanıma hazır olmuş olur.

Tuğrul Bey; örnek çok hoş olmuş   Smile
There's no place like 127.0.0.1
WWW
Cevapla
#8
(14-12-2016, Saat: 10:04)SimaWB Adlı Kullanıcıdan Alıntı: Yapılmaya çalışan işlem HTML'in marquee tag'ını hatırlattı bana. 
https://developer.mozilla.org/tr/docs/We...nt/marquee

Bu yüzden TWebBrowser kullanılsa nasıl olur sorusu aklıma takıldı.
Daha doğrusu IHTMLDocument interface'i kullanılarak yapılabilir mi acaba diye düşünüyorum. Böylece tüm HTML tag'ları da kullanıma hazır olmuş olur.

Tuğrul Bey; örnek çok hoş olmuş   Smile

 Aslında bir çok yöntem olur tabii @SimaWB. Lâkin bu bir nevi benim kendime açtığım bir challange. GDI ve GDI+ ile yapılan çizimlerin yavaş olduğu muhakkak, bu durumda DirectX-DirectWrite'a yöneldim. Kendi kendime challange. Esasen kullanıcılar kayan yazının ne kadar smooth olduğunun muhtemelen farkına dahi varamayacaklar ama ben farkında olacağım ya. Bu rahatsızlık beni daha iyisini yapmaya itmeye yeterli bir unsur oluyor.

Kafama takılan bir başka husus ise, kayan yazının bitiş noktası ekranın ortalarında bir yerde iken; kuyruğa yeni bir yazı eklendiğinde yeni eklenen yazının nereden itibaren kaymaya başlayacağı ?

 Normalde yeni eklenen yazının ekranın en sağından itibaren kaymaya başlaması lazım ama bu seferde bir öndeki yazının bitiş noktası ekranın ortasında olduğu için yeni eklenen yazı sağdan itibaren kaymaya başlar ise arada bir boşluk olacak ve sanki çirkin bir görünüm oluşacak. Yeni eklenen yazıyı bir önceki yazının bitiş noktasından itibaren kaydırsam bu seferde yazı birden bire belirli bir koordinatta belirmiş olacak.

 Sanki; yeni bir eklenen yazı olduğunda ve ekranda kayan bir başka yazı mevcut ise; mevcut yazının ekran koordinatlarından tamamen çıkmasının beklenmesine müteakip yeni eklenen yazının da bir öncekinin dibine eklenmesi en makulu gibi görünüyor. Siz ne düşünürsünüz bu hususta ?

 İkinci olarak, parse işleminin kolay olması açısından ve string'in de unicode olmasından dolayı (char = 2 Byte); komutların 2 byte (word) yapılması gerektiğini düşünüyorum. Örneğin <b> komutu için 190 ve 00, <fs=24> için 195 ve 24 byte'larını birleştirerek eklemeyi düşünüyorum yazıya. Böylece parse ederken epeyce kolaylaşmış olacak işler.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#9
Bence yeni bir yazı eklendiğinde bir öncekinin ekrandan tam kaybolmasını beklemeli. Sonrasında yeni yazı en sağdan görünmeye başlamalı.
Tag'ler ise Html'in standart tag'leri olursa kullanıcı için hatırlanması/kullanılması daha kolay olur diye düşünüyorum.
There's no place like 127.0.0.1
WWW
Cevapla
#10
(14-12-2016, Saat: 10:01)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Teşekkür ederim yorumlarınıza, dikkate alacağım. Volkancım, o component'i biliyorum; ama benim için yeterince smooth değil Wink
Şimdilik basit bir örnek uygulamayı buradan indirebilirsiniz:

Tek kelimeyle Mükemmel. Ellerinize sağlık hocam.

(14-12-2016, Saat: 10:22)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:  Sanki; yeni bir eklenen yazı olduğunda ve ekranda kayan bir başka yazı mevcut ise; mevcut yazının ekran koordinatlarından tamamen çıkmasının beklenmesine müteakip yeni eklenen yazının da bir öncekinin dibine eklenmesi en makulu gibi görünüyor. Siz ne düşünürsünüz bu hususta ?

Sonradan eklenen yazının akıbeti, dinamik (publish veya public bir özellik olabilir) olmalıdır.  Smile  

(14-12-2016, Saat: 10:22)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: İkinci olarak, parse işleminin kolay olması açısından ve string'in de unicode olmasından dolayı (char = 2 Byte); komutların 2 byte (word) yapılması gerektiğini düşünüyorum. Örneğin <b> komutu için 190 ve 00, <fs=24> için 195 ve 24 byte'larını birleştirerek eklemeyi düşünüyorum yazıya. Böylece parse ederken epeyce kolaylaşmış olacak işler.

Arka planın nasıl olacağını size bırakarak, ön planda (son kullanıcı olarak) şöyle olursa daha iyi olur.

TKayanYazı.Add('Dakika 1 gol 1').Bold.Italik.UnderLine.fs(24).fn('Gabriola').Link('http://www.delphican.com','Delphi Can').Picture('http://www.delphican.com/images/duyuru/delphican.png')

Çok şey istedim galiba.  Smile
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Rest debugger Memo Yazi Gönder gonulali 2 611 14-04-2023, Saat: 22:24
Son Yorum: gonulali
  Arapça Yazı Gösterme baloglurecep 9 4.511 28-02-2023, Saat: 16:31
Son Yorum: themerdogan
  Fastreport fiyat yazı fontu mukoly 9 2.110 21-02-2022, Saat: 16:52
Son Yorum: m_ekici
  StatusBar Yazı Renklendirme Hk. Yardım glagher 3 1.052 16-10-2021, Saat: 20:56
Son Yorum: Bay_Y
  Program içinde resim üzerine yazi gonulali 1 2.447 06-06-2018, Saat: 11:29
Son Yorum: iyarar



Konuyu Okuyanlar: 1 Ziyaretçi