Arsip: men-disable semua dbedit/tedit dgn sedikit coding??

 
user image
more 19 years ago

imunk

dear, sebetulnya aku rada2 minder&malu nih nanya terus di forum ini ditambah lagi permasalahan2 yg aku angkat kesannya sepele dan kurang berbobot (batu kaleee..) dibanding yg laen. tapi aku sbg junior programming kadang merasa bgg hrs nanya kemana lagi, jadi ya aku berani2 in deh nanya disini. :) mas2 senior tolong bantuin dong..... aku lagi nyari cara utk men-disable semua komponen dbedit/tedit yg ada diform dg sedikit coding, selama ini aku pake cara kuno gini, jika ada 10 dbedit/tedit maka aku tulis perintah (dbedit/edit).enabled:=false sebanyak 10 kali, kalo lebih dari 10?? bisa dibayangin berapa banyak lagi barisnya..... kalo bisa sih pengennya yang simple gitu tapi hasilnya sama....:) jika ada tips n triknya utk itu saya sangat berterima kasih sekali sebelumnya. regards.[/b]
user image
more 19 years ago

DelphiExpert

:wink: Hehe ngga' perlu malu atuh, tapi kalo malu ngga' papa, kirim aja angpau buat kita2 wakakak :mrgreen: Pada dasarnya semua component & control dapat diakses pada parent component-nya. Misal kamu naruh sebuah TEdit di sebuah TForm ato TPanel (Parent control pasti turunan dari TWinControl), maka untuk ngakses ke TEdit cukup (misal parentnya adalah Form1)
AnEdit:= Form1.Contros[x] as TEdit;
Ok simplenya kaya' gini:

procedure EnDisControls(AParent: TWinControl; EnableCtrl: Boolean);
var I: Integer;
    CacheCtrl: TControl; // control dlm array di cache biar cepet
begin
  // cek AParent dah diset blum
  if not Assigned(AParent) then Exit;
  for I:= 0 to Pred(AParent.ControlCount) do begin
    CacheCtrl:= AParent.Controls[I];
    if CacheCtrl is TDBEdit then 
      TDBEdit(CacheCtrl).Enabled:= EnableCtrl
    else if CacheCtrl is TClassApaAjaYgMauEluAkses then 
      ...
  end;
end;
Done, procedure diatas cuman mencari control di AParent, utk mendeteksi sebuah control adalah control yang kita maksud pake "IS", setelah itu utk ngakses property/method-nya pakai Type Cast. Misal if ACtrl is TButton then TButton(ACtrl).Visible:= False; Nah, kalo controls yang kamu taruh ada di sub TWinControl pas (misal kamu taruh diatas TPanel) maka kalo ente set AParentClass-nya ke Form1 maka semua control yang kamu taruh di Panel1 harus kamu akses secara eksplisit ato modifikasi procedure diatas utk bisa rekursif ngakses ke sub TWinControl. Ok cukup jelas kan... Regards - D.E
user image
more 19 years ago

masdi2t

yup. betul seperti penjelasan mas DelphiExpert. oya sekalian saya mau tanya. klu mekanisme buffering dengan variabel array tersebut di lewati dan diganti dengan operator as kira2 cepet mana ya. sebagai gambarannya saya modif procedure mas DelphiExpert ya

procedure EnDisControls(AParent: TWinControl; EnableCtrl: Boolean);
var I: Integer;
begin
  // cek AParent dah diset blum
  if not Assigned(AParent) then Exit;
 
  for I:= 0 to AParent.ControlCount-1 do 
  begin
    if (AParent.ControlCount[I] is TDBEdit) then 
      (AParent.ControlCount[I] as TDBEdit).Enabled:= EnableCtrl
    else 
    if (AParent.ControlCount[I] is TClassApaAjaYgMauEluAkses) then 
      ...
  end;
end;
memang pada script diatas ada pemanggilan (AParent.ControlCount[I] is TDBEdit) sebangyak 2x, metode pemanggilan langsung dgn dibuffer di variable kira2 bagus dan cepet yang mana ya? maturnuwun :) [/b]
user image
more 19 years ago

DelphiExpert

Secara teory lebih cepet di pass ke variable dulu mas. Soalnya ngga' perlu search lagi di list utk kedua-kalinya (misal control permasalahan sperti diatas) AParent.Controls[X]. Mending di buffer dulu trus pake TypeCast utk aksesnya. Misal bayangin aja kalo ada 100 control disebuah parentclass, utk ke dua kalinya Delphi ya harus cari sebanyak 100 kali (kalo saya liat menggunakan sequensial search) Type cast cepet koq, soalnya tuh pointer class dah ada semacam heardernya untuk mengacu ke blok memory tertentu dari sebuah class. Regards - D.E
user image
more 19 years ago

imunk

makasih banyak mas...... tapi maaf mas saya rada2 telmi nih dan masih bgg dengan yang ini:
Nah, kalo controls yang kamu taruh ada di sub TWinControl pas (misal kamu taruh diatas TPanel) maka kalo ente set AParentClass-nya ke Form1 maka semua control yang kamu taruh di Panel1 harus kamu akses secara eksplisit ato modifikasi procedure diatas utk bisa rekursif ngakses ke sub TWinControl
bisa di 'awam' kan gak mas bahasanya..??? kalo bisa dgn codingnya sekalian biar otakku rada encer...... :):)
user image
more 19 years ago

ZeAL

Gini... Buat Panel di form... Taruh TEdit di DALAM panel yang udah dibuat.... Masukin misalnya 5 TEdit di panel tersebut.. Nah, untuk mematikan Semua TEdit itu gak perlu satu-satu.. cukup matiin "parent" tempat ia diletakkan.. (misalnya Panel1.enabled := false; ) gituuu...
user image
more 19 years ago

imunk

ohh... kalo itu maksudnya aku rada2 ngerti deh... makasih mas.
user image
more 19 years ago

wongdee2t

maksudnya mas D.E tuh jika kasus ketika posisi komponen kamu (dalam hal ini TEdit dan TDBEdit) tidak nempel di Form secara langsung. Melainkan di atas sebuat Panel misalnya. Jadi simpel bahasanya seperti ini di form kita tempel panel trus diatas panel baru kita tempel TEdit dan TDBEdit kita. Nah kasus seperti ini ada 2 cara (ktnya mas D.E), yaitu: - secara eksplisit - modif procedure untuk bisa rekursif untuk yg eksplisit, maksudnya km harus manggil procedure diatas 2 kali dengan paramater untuk TWinControl yg berbeda. contoh:

   EnDisControls(Form1, false); //untuk mendisable yg melekat di form1
   EnDisControls(Panel1, false); //untuk mendisable yg melekat di panel1 
untuk yg model rekursif kita modif dikit procedure yg dari mas D.E. Dan manggilnya cukup satu kali ajah: EnDisControls(Form1, false); //untuk mendisable yg melekat di form1 nih coba tak editkan yg model rekursif.

procedure TForm1.EnDisControls(AParent: TWinControl; EnableCtrl: boolean);
var
  i: integer;
  cacheCtrl: TControl;
begin
  if not assigned(AParent) then Exit;
  for i:=0 to AParent.ControlCount-1 do
  begin
    cacheCtrl := AParent.Controls[i];
    if (cacheCtrl is TEdit) then
      TEdit(cacheCtrl).enabled := EnableCtrl
    else if (cacheCtrl is TDBEdit) then
      TDBEdit(cacheCtrl).Enabled := EnableCtrl
    ....
    ....
    else if (cacheCtrl is TPanel) then
      EnDisControls(TPanel(cacheCtrl), EnableCtrl);
  end;
end;
smoga bisa membantu dengan bahasa dari orang awam juga.. :D (CMIIW)
Nah, untuk mematikan Semua TEdit itu gak perlu satu-satu.. cukup matiin "parent" tempat ia diletakkan.. (misalnya Panel1.enabled := false; ) gituuu...
itu jg bisa dilakukan, kalo menurutku itu cara ekstrimnya. hehehee :D tp ada perbedaan deh kaya'nya kalo kita matikan dari parentnya. yaitu komponen TEditnya secara visual tidak menunjukkan perubahan kalo dia udah disable (biasanya perubahan warna font di dalam TEdit-nya), tp sebenernya dia memang udah disable sih.. :p
user image
more 19 years ago

imunk

thanks buat mas2 yg dah baek ati ngejelasin ke aku....:) tuh coding dah running well...(senangnya aku). but...... aku bgg, sejak dulu aku bikin coding sendiri tuk nge-create form kayak gini codingnya:

procedure createform(tfrm:TComponentClass;frm:tform;nmform:string;
    showmod:byte);
begin
  if assigned(application.FindComponent(nmform)) then abort;
  Application.CreateForm(Tfrm, frm);
  //var showmod utk showmodal jika bernilai 1
  if showmod=1 then frm.ShowModal
  else frm.Show;
end;
saat ku pake tuh procedure eh malah procedure Disable/Enabled nya kagak ngaruh, apanya yg salah ya?? tapi saat ku pake perintah:

Application.CreateForm(Tform1, form1);
form1.Showmodal;
procedure disable/enable kedetek, binun...... apa ada yg salah ya dgn procedure buatanku..?? please help me and thanks before.
user image
more 19 years ago

DelphiExpert

Pass variable via SELF.

EnDisControls(SELF, false);
more ...
  • Pages:
  • 1
Share to

AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com