Merhaba ,
Her ne kadar UniGUI bizlere masaüstü konforunda yazılım geliştirme imkanı sunuyor olsa da , web uygulama mimarilerine bağımlı olarak bazı kurallara tabidir,
Kodlarımız kullanıcı arayüzüyle etkileşime girecek ise mutlaka prosedürel yapıda parçalanmalıdır (sebebini yazımın devamında detaylandıracağım), web uygulamalarının doğaları gereği tamamen istek/cevap yapısında olurlar, daha iyi anlamanız için UniGUI uygulamanızı chrome yada firefox ile açıp f12 ile geliştirici moduna alıp Network/Ağ sekmesinden yaptığınız her hareketin birer istek ve cevap olarak tarayıcı tarafından işlendiğini gözlemleyebilirsiniz.
Yani ;
Bir buton altına yazılan kodlar bir Ajax çağrısı ile sunucu tarafında tetiklenir, sunucu tarafındaki kodunuz o prosedür sona erene kadar işletilir ve işlem sonucunda ilgili ajax çağrısına asenkron bir yapıda CallBack denilen geri dönüş işlemi gerçekleştirilir, yani ilgili istek cevabı gelene kadar tarayıcıda hiç bir işlem devam etmez, aynı şekilde gelen istek karşısında sunucu tarafında işletilmeye başlanan kod bloğunuz tamamlanana kadar ilgili istek sonuçlanmaz, buda demek oluyor ki siz işletilen kodunuz arasında kullanıcıya bir soru sorup o sorunun cevabına göre kodunuzu bildiğiniz yöntemlerle akıtamazsınız bunun için UniGUI deki, MessageDlg , ShowMessage , ShowModal gibi yapılarca CallBack prosedürel parametreleri yer alır.
Bu özetle şuna imkan tanır , kullanıcıdan yanıt beklenen bir etkileşimi ekrana yollarken, kullanıcının ektileşime tepki vermesiyle işletilecek yeni bir prosedür çağrımı yapılmalıdır.
Basit bir kod şöyle görünür , UniButton1 nesnesinin sunucu tarafında ki OnClick olayına ekrana bir mesaj dialog açmasını ve sonucunu UniMemo1 nesnesi içine yazmasını istedik,
procedure TMainForm.UniButton1Click(Sender: TObject);
begin
MessageDlg('Devam edilsin mi ?', mtConfirmation, [mbYesNo],
procedure(Sender: TComponent; Res: Integer)
begin
UniMemo1.Lines.Add('Basılan Tuş: '+IntToStr(Res));
end
end;
Bu kod bitene kadar çalışır , kullanıcının ne cevap vereceğinin önemi yoktur kod akar gider. ancak MessageDlg için 4 üncü parametresine bakın, bir prosedür parametre alır direk prosedürü de yazabilirsiniz (örnekte olduğu gibi) bu sayede ara yüzde kullanıcının tepkisine göre bu prosedür ayrı bir çağrıda çalıştırılır. programlarınızı bu şekilde kurgulamalısınız. ShowModal ile açılan formlarda aynı şekilde altında işleme devam eden kodlarınız olmamalı CallBack prosedürüne göre dallandırmalısınız.