Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Fluent HTML
#8
(10-06-2019, Saat: 13:45)uparlayan Adlı Kullanıcıdan Alıntı: Bazen bana rahat batıyor... Sanırım aşağıdaki yazıda bunun sebebini daha kolay anlatabileceğim Smile

Zaman zaman C# ile ilgili eğitim videolarını izlerken bazen C# kodu içerisinde HTML kodlarını da çağırdıklarına şahit oluyorum. Bunun sebebi muhtemelen C#'daki bir library veya framework olabilir, o kısmıyla ilgilenmiyorum. Zaten konumuz C#'da html kullanımı da değil açıkçası... Benim ilgilendiğim nokta, odaklandığım kısım, bu olayı Delphi'de nasıl yapabiliriz idi. Yani Delphi'nin kod tamamlama işlevini HTML taglarını kullanabilir hale nasıl getirebiliriz ve bunu doğrudan HTML taglarını kullanarak nasıl bir HTML verisi üretebiliriz çerçevesinde idi...

Eski yazılarımı takip eden arkadaşlar bilirler. Yazılarımdan birinde Fluent Design ile ilgili bir makale yayınlamıştım. O yazımda XML dosyalarını daha kolay, akıcı üretebilmek için bir örnek vermiştim. Fluent Design'ın felsefesini dilim döndüğünce anlatmaya çalışmıştım. Aynı bilgileri yeniden vermenin bir anlamı yok, zira orada anlatılanlar burada da geçerli, o nedenle işin Fluent Design ile ilgili kısmını es gekiyorum ama desenle ilgilenenler, aşağıdaki bağlantıdan o yazıya ulaşabilirler;

http://www.delphican.com/showthread.php?tid=1330

Neyse, Rahat battı ya! Aynı tekniği HTML için de uyarlayabilir miyim diye düşünmeye başladım. Bunu bir denemek istedim. Bunun için HTML taglarının genel yapısını bilmek gerekiyordu, haliyle biraz araştırma yapıp bu tagların ortak "niteliklerini" bir nesnede topladım. Bu noktada Fluent Design yapısını kullanarak bir nesne tanımladım ama iş nesneyi tanımlamakla elette bitmiyordu. Bu seferki örnekte sadece nesnel programlama tekniklerini değil, aynı zamanda prosedürel programlama tekniklerini de işin içine kattım ve ortaya ( en azından benim ihtiyaçlarım açısında ) düzgün bir yapı çıkmış oldu.

Son halini github üzerindeki depomdan temin edebilirsiniz. @Tuğrul HELVACI Üstadın da dediği gibi "Allah Razı Olsun Ware'dir"... Tepe tepe kullanın ama şu fakirin adımı anmayı da unutmayın Wink

https://github.com/uparlayan/FluentHTML

Kullanımı ise gayet basit. Aşağıdaki örnek kodu okuduğunuzda ve HTML'e de aşinaysanız zaten çok kolay bir şekilde adapte olacağınıza eminim.

uses
   Classes_HTML5_            //  THTMLTag Class definition
 , Methods_HTML5_            //  HTML Tags definitions...
 ;

...
...
...

procedure TWebModule.PageProducer1HTMLTag( Sender          : TObject
                                        ; Tag             : TTag
                                        ; const TagString : string
                                        ; TagParams       : TStrings
                                        ; var ReplaceText : string
                                        );
var
 aHTML: THTMLTag;
begin
  try
    if  SameText(TagString, 'userprofile') then begin
      aHTML:= table([
                      thead([
                              tr( [ th('Kullanıcı Profili').colspan('2')              ])
                            , tr( [ th('Alan')          , th('Değer')                 ])
                            ])
                    , tbody([
                              tr( [ td('ID')            , td(Oturum.User.ID.ToString) ])
                            , tr( [ td('Kullanıcı Adı') , td(Oturum.User.UserName)    ])
                            , tr( [ td('Şifre')         , td(Oturum.User.Password)    ])
                            , tr( [ td('Ad Soyad')      , td(Oturum.User.AdSoyad)     ])
                            , tr( [ td('Eposta')        , td(Oturum.User.Eposta)      ])
                            , tr( [ td('Dil')           , td(Oturum.User.Dil)         ])
                            , tr( [ td('Durum')         , td(Oturum.User.Durum)       ])
                            ])
                    ]).class_('vg');
 
      ReplaceText := aHTML.ToString;
  end else
  if  SameText(TagString, 'userprofileform') then begin
      aHTML:= form(
              [ fieldset('Kullanıcı Profilinizi Düzenleyin')
              , label_( 'Kullanıcı Adı'   , [ br, input.placeholder('Lütfen bir kullanıcı adı belirtin'     ).id('username_id').name('username').value('').type_('text').autocomplete('off') ])
              , br
              , label_( 'Şifreniz'        , [ br, input.placeholder('Lütfen 8 basamaklı bir şifre yazınız'  ).id('password_id').name('password').value('').type_('password').autocomplete('off') ])
              , br
              , label_( 'Ad ve Soyadınız' , [ br, input.placeholder('Lütfen tam adınızı yazınız'            ).id('fullname_id').name('fullname').value('').type_('text').autocomplete('off') ])
              , br
              , label_( 'Eposta Adresiniz', [ br, input.placeholder('Size ait Eposta adresinizi yazınız'    ).id('emailadr_id').name('emailadr').value('').type_('text').autocomplete('off') ])
              , br
              , label_( 'Arabirim Dili'   , [ br, input.placeholder('Bu siteyi hangi dilde kullanacaksınız?').id('language_id').name('language').value('').type_('text').autocomplete('off') ])
              ]).action('/profileedit').method('post');
      aHTML:= table([
                      thead([
                              tr( [ th('Kullanıcı Profili').colspan('2')               ])
                            , tr( [ th('Alan')          , th('Değer')                 ])
                            ])
                    , tbody([
                              tr( [ td('ID')            , td(Oturum.User.ID.ToString) ])
                            , tr( [ td('Kullanıcı Adı') , td(Oturum.User.UserName)    ])
                            , tr( [ td('Şifre')         , td(Oturum.User.Password)    ])
                            , tr( [ td('Ad Soyad')      , td(Oturum.User.AdSoyad)     ])
                            , tr( [ td('Eposta')        , td(Oturum.User.Eposta)      ])
                            , tr( [ td('Dil')           , td(Oturum.User.Dil)         ])
                            , tr( [ td('Durum')         , td(Oturum.User.Durum)       ])
                            ])
                    ]).class_('vg');
      ReplaceText := aHTML.ToString;
  end else
  begin
    { Standart else sonu }
  end;
  finally
    if Assigned(aHTML) then FreeAndNil(aHTML);
  end;
end;

Merhabalar,

Bütün paylaşımlarınız her zaman ki gibi çok güzel.
Elinize sağlık, çok teşekkürler.

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla


Bu Konudaki Yorumlar
Fluent HTML - Yazar: uparlayan - 10-06-2019, Saat: 13:45
Fluent HTML - Yazar: Tuğrul HELVACI - 10-06-2019, Saat: 14:24
Fluent HTML - Yazar: 3ddark - 10-06-2019, Saat: 16:46
Fluent HTML - Yazar: frmman - 10-06-2019, Saat: 17:19
Cvp: Fluent HTML - Yazar: Fesih ARSLAN - 11-06-2019, Saat: 08:39
Fluent HTML - Yazar: uparlayan - 11-06-2019, Saat: 09:21
Fluent HTML - Yazar: klavye - 11-06-2019, Saat: 09:24
Cvp: Fluent HTML - Yazar: hi_selamlar - 11-06-2019, Saat: 11:06
Fluent HTML - Yazar: SimaWB - 11-06-2019, Saat: 21:04
Fluent HTML - Yazar: ahmetb - 11-06-2019, Saat: 22:57

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Web Sitesine Login Olma ve HTML Parse SimaWB 15 19.562 18-09-2021, Saat: 21:26
Son Yorum: 10.Köy
  TWebBrowser Lafınızı Dinlesin, HTML 5'ten anlasın uparlayan 14 13.447 18-08-2021, Saat: 20:48
Son Yorum: rahman
  Tasarım Desenleri : Fluent Design uparlayan 19 14.586 17-08-2020, Saat: 18:15
Son Yorum: uparlayan
  Web Sitesine Login Olma ve HTML Parse - 2 SimaWB 10 11.467 15-02-2019, Saat: 03:02
Son Yorum: BasK
  Tüm Platformlar için (cross-platform) HTML Dosyası Oluşturma Fesih ARSLAN 0 3.958 21-10-2016, Saat: 11:53
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: