Feeds:
Posts
Comments

Posts Tagged ‘Delphi’

Dear All,

After we trying the previous technique, we have face the problem … But, Fortunately we found the way to change it and running smoothly … :mrgreen:

Change the step and you will find the (maybe) good solutions … :mrgreen: but still have one problem when handling the big data aware …

First alias ka hiji kieu :

put one procedure at Public Level:

public
 { Public declarations }
 procedure UpdateGambar(AView: TcxGridTableView; ARecordIndex: integer);

kemudian, create the code like shown below, in previous post we put this code at GetProperties event :

procedure TForm8.UpdateGambar(AView: TcxGridTableView; ARecordIndex: integer);
var
 AValue: string;
 APicture: TPicture;
 AFileName : string;
begin
 AView.DataController.PostEditingData;
 AFileName := 'C:\Manz\Projects\Web\hrms\public_html\images\photo\' +
 VarToStr(AView.DataController.Values[ARecordIndex, cxGrid1DBTableView1nip.Index]) + '.jpg';
 if FileExists(aFileName) then
 begin
   APicture := TPicture.Create;
   try
     APicture.LoadFromFile(AFileName);
     SavePicture(APicture, AValue);
   finally
     FreeAndNil(APicture);
   end;
 end
 else AValue := '';

 AView.DataController.Values[ARecordIndex, cxGrid1DBTableView1Column1.Index] := AValue;
end;

next, at event onPropertiesEditValueChanged at column Image on File, put this code like shown below :

procedure TForm8.cxGrid1DBTableView1Column1PropertiesEditValueChanged(
 Sender: TObject);
var
 AIndex: Integer;
begin
 AIndex := cxGrid1DBTableView1.DataController.FocusedRecordIndex;
 UpdateGambar(cxGrid1DBTableView1, AIndex);
end;

next, at event Form Create put this code like shown below :

procedure TForm8.FormCreate(Sender: TObject);
var
 i: integer;
begin
 for i := 0 to cxGrid1DBTableView1.DataController.RecordCount - 1 do
 UpdateGambar(cxGrid1DBTableView1, i);
end;

After that, you may running your project  …. and … tadaaaa…. , smooth scrolling in the grid without knowing the error will be appear :mrgreen:

But, this the problem when handling the big data aware, cause will be loaded slowly …, you may filtering your data table or query with the limit. :mrgreen:

That’s all folks, … gitu azah dach … sekian dan terima kasih .. jangan lupa donat nya ya weekekekekekek :mrgreen:

Salam Coderz,
😎
Man’z

Advertisements

Read Full Post »

Dear All,

Met ketemu lagi dalam acara Delphi Coderz … :mrgreen:

Kemarin, ada dari temen bro @ImanD mengenai bagaimana memunculkan gambar bukan dari database saja, akan tetapi dari file juga, soalnya kita pengguna Developer Express Quantum Grid.

Setelah membaca dan mengurai dari keterangan Knowledge Basenya Developer Express. Akhirnya bisa ditampilkan apa yang diinginkan … sebelumnya mah udah jalan tapi gak bisa munclu gambarnya :mrgreen:

Nah, sekarang daripada ngomong gak karuan langsung saja, kita buat project baru dan simpan deh komponen yang diperlukan seperti zConnection, zTable (karena pake ZeosLib), DataSource dan cxGridnya.

Untuk di gridnya ditambahkan 1 column unbound, jadi dikenal dengan column cxGrid1DBTableView1Column1, dengan set properties :

cxGrid1DBTableView1Column1.Properties := Images
.Properties.Images.GraphicClassName := TJPEGImage
.Properties.Images.ImmediatePost := true

sekarang untuk Databindingnya di set ke:

cxGrid1DBTableView1Column1.DataBinding.ValueType := string

untuk DataBinding.FieldName nya di kosyonk an saja, karena ini tidak dipakai, jadi column ini disebut unbound data-aware.

Sekarang … Codingz , tadi nya saya pikir bisa disimpan pada event onCustomDrawCell, karena untuk masalah beda warna tiap baris bisa digunakan event ini, tapi ternyata terjadi infinite-loop pada event Paint nya DevexGrid.

Jadi, saya tempatkan pada event : onGetProperties dari cxGrid1DBTableView1Column1 dengan isi :

procedure TForm8.cxGrid1DBTableView1Column1GetProperties(
  Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
  var AProperties: TcxCustomEditProperties);
var
  AFileName, AValue: String;
  APicture: TPicture;
begin
  AFileName := 'C:\Manz\Projects\Web\hrms\public_html\images\photo\' +
               VarToStr(ARecord.Values[cxGrid1DBTableView1nip.Index]) + '.jpg';
  if (fileexists(AFileName)) then
  begin
    APicture := TPicture.Create;
    try
      APicture.LoadFromFile(AFileName);
      SavePicture(APicture, AValue);
    finally
      freeAndNil(APicture);
    end;
  end
  else AValue := '';

  cxGrid1DBTableView1.DataController.Values[ARecord.RecordIndex, Sender.Index] := AValue;
end;


Dengan hasil snap-shot diatas .. maka hasil yang di-inginkan keluar seperti ini :mrgreen:

ImageLoad

ada 2 field tertera diatas, yaitu from DB dan from File, nah yang from File inilah yang disebut dengan unbounded data-aware.

Dikau temanz .. bisa mencoba nya … any error, any mistake (salah), access denied or error yang laindon’t ask … alias jangan tanya … silahkan trace sendiri sajah yah … :mrgreen:

Seperti biasa, kalau code ini berguna untuk kalian teman-temanz, teman-temanz bisa donate kepadaku ya ya ya :mrgreen: for keep this blog live and given the some tricky … :mrgreen:

Salam Coderz,
😎
Man’z

procedure TForm8.cxGrid1DBTableView1Column1GetProperties(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AProperties: TcxCustomEditProperties);
var
AFileName, AValue: String;
APicture: TPicture;
begin
AFileName := ‘C:\Manz\Projects\Web\hrms\public_html\images\photo\’ +
VarToStr(ARecord.Values[cxGrid1DBTableView1nip.Index]) + ‘.jpg’;
if (fileexists(AFileName)) then
begin
APicture := TPicture.Create;
try
APicture.LoadFromFile(AFileName);
SavePicture(APicture, AValue);
finally
freeAndNil(APicture);
end;
end
else AValue := ”;

cxGrid1DBTableView1.DataController.Values[ARecord.RecordIndex, Sender.Index] := AValue;
end;

Read Full Post »

Dear All pren ….

Langsung aja, cobain deh create registry pake :

Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.CreateKey(‘SOFTWARE\\Man’z, Inc.’);

di Vista … kalo berhasil … kasih tahu daku caranya ya …. soalnya daku gak berhasil dah coba gimana pun caranya pake system registry standard. 😎

Tapi setelah bertanya teman – teman , emang kalo di vista itu agak repod.. gak boleh create di key HKLM, karena bakal di anggap virus, karena ini security dari vista nya sendiri.

Nah, setelah berputar – putar dan bertanya pada rumput yang bergoyang, karena lagi ada angin :mrgreen: dapet deh caranya … gimana … gimana … gimana … ??????

Nih .. begieu yeuh : (daku mah to the point ajah, sesuai dengan phylosophy nya… :mrgreen: )

Create manifest dan kasih nama Vista.manifest ( namanya seh terserah ), yang isinya format xml :

<?xml version=”1.0″ encoding=”utf-8″ ?>
  <assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>
    <assemblyIdentity version=”1.0.0.0″
    processorArchitecture=”X86″
    name=”Vista UAC Compat.Application”
    type=”win32″ />
  <trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
    <security>
      <requestedPrivileges>
      <requestedExecutionLevel level=”requireAdministrator” />
      </requestedPrivileges>
    </security>
  </trustInfo>
  </assembly>

trus yang kedua, buat file Vista.rc, yang isi nya :

1 24 Vista.manifest

trus, compile si Vista.rc supaya jadi Vista.res, caranya :

brcc32 vista.rc jebred enter :mrgreen:

Nah, di program kita tambahin {$R vista.res} di paliiiinnnggg awal program kita, maksudnya mainunit nya lah.

Setelah itu coba jalankan … pasti deh munclu error kayak begini :mrgreen:

[DCC Error] E2161 Warning: Duplicate resource: Type 24 (user-defined), ID 1; File C:\Manz\Projects\BDS2007\ManagementSystem\Vista.res resource kept; file Vista.res resource discarded.

Lha … napa bisa begitu … 🙄

gak apa – apa, gak usah risau dan kaget … ini karena standard project dari CodeGear untuk theme runtime. Lha … trus gimana dwonk … 😉

Nih, keterangannya dulu ya … sabar dikit

si CodeGear atawa project kita gak bisa menjalankan Enable Theme Runtime setting yang ada di menu Project->Options trus Application->Enable Theme Runtime dan juga setting yang sama pada project kita.

Karena bakal terjadi saling tarik antar CodeGear sebagai main project dengan project kita yang disebut sub-project.

Nah, kita gak perlu pakai setting tersebut, jadi kita bisa bantai 2 setting tersebut. 😈

Setelah kita bantai 2 setting tersebut, silahkan di compile … pasti gak munclu lagi tuh errornya :mrgreen:

Setelah jadi EXECUTABLE file, aplikasi yang kita buat bisa dijalankan … cobain deh lewat explorer.

Tapi sekarang dapat masalah, kenapa ? karena proyek kita gak bisa dijalankan lewat IDE nya CodeGear, bakal munclu error 😦

Kalo pake debug mode :

Unable to create process.

Kalo gak pake debug mode :

System error. Code: 740
The requested operation requires elevation.

Ini nih yang jadi ganjelan masalah saat ini. Mungkin dari temenz ada solusi mengenai handling error seperti ini ? saya tunggu ya … 😎

Note: dah di cobain di Windows XP ama Vista … jalan … adem ayem 😀

Salam Coderz,
😎
Man’z

Read Full Post »

Allo Frenz … ketemu lagi …

Kali ini aku akan ngebahas sedikit cara di FastReport. Fastreport adalah software reporting tools buat delphi yang lumayan bagus, cakep, lite, gampang… satu lagi … cepret … 😀

Nah, disini aku akan mengulas sedikit mengenai bagaimana seh caranya ngitung balance ?, dalam kasus ku ini untuk ngitung balance quantity, tapi biasanya juga gak jauh berbeda dengan ngitung balance yang ada di akunting neraca … cuman beda field aja kali ya 😀

Dah lah gak mau cerita panjang lebar, karena daku bukan tukang dongeng, jadi lieur mo ngomongin apa.

Dikau frendz bisa lihat langsung di sekerin shyut nya dibawah ini :

Nah, biarpun sekerin shyut nya ketjil, tapi masih bisa liat kan 😀

Disini, daku memberlakukan peraturan kalau transaksi di detail typenya 101, berarti quantitynya nambah karena itu statusnya pemasukan, kalau 201 berarti quantitynya ngurang karena stattusnya pemakaian …. jadi … Opening Balance = 7, Pemasukkan (101) = 30, Pemakaian (201) = 15, jadi sisanya tinggal 22, gimana cara ngitungnya ?? ya tinggal 7 + 30 – 15 = 22 .. gampang kan …

Dah ah cape, sekarang koding nya nih …

Woops, sebelum ngoding, di DetailBand nya di simpen satu memo dengan nama memo1.

Sekarang codingya gimana, simpan coding dibawah ini pada event DetailData1OnBeforePrint.

  if (<frxDBDataset1."movement_type"> = '101') then                                                                                                              
    balance := balance + <frxDBDataset1."quantity">
  else if (<frxDBDataset1."movement_type"> = '102') then                                                                                                              
    balance := balance - <frxDBDataset1."quantity">;                                                                                                                         
  memo1.text := formatfloat('#0.00', balance);

Nah, tapi jangan lupa simpan pada paliiiiiinnnngggg atas code assingment ini :

var
  Balance: real;

Truzz … ?? ya wis … jalanin ajah .. see what already do with FastReport … no guarantee 😀

Salam Coderz,
😎
Man’z

Read Full Post »

Info pada TreeView

Singkat cerita ajah dan to de point … gimana seh mo tau ntu indexnya berapa atawa text nya apa yang kita engklik di treeview … (ni ngelanjutin cerite dulu mengenai menu di treeiew)

Nah, kalo mo tau indexnya yang di engklik pake kode : dxTreeview1.Selected.Index

dan kalo mo tau untuk textnyah : dxTreeView1.Selected.Text

Gitu ajah yach …  Salam Delphi Coderz

Read Full Post »

Write tree menu

Hi … i’m back …. now how to create/write the menu using tree.

In this paper, we currently use the developer express DB Tree feature. But, so simple when you using the standar tree.

You can see the tree like this :

Tree

The picture above, we extract from data, the table is :

create table m_module
(
m_id integer default 0,
parent_id integer default 0,
m_level integer default 0,
m_code varchar(10) default ”,
m_name varchar(50) default ”
);
create trigger m_module_m_id before insert on m_module for each row
begin
set @maxId = (select max(m_id) from m_module);
set new.m_id = if(@maxId is null, 1, @maxId + 1);
end;

The Code is :

<pre><span style="color:#000080;">
<pre>procedure TManz.createMenu();
var
  NodeView: TTreeNode;
  Level: integer;
  CodeMenu: string;
  NodeParent: array of TTreeNode;
  Q: TZQuery;

begin
  Level := 2;
  with MainForm do
  begin
    Q := TZQuery.Create(Self);
    with Q do
    begin
      Connection := ZConn;
      SQL.Clear;
      SQL.Text := 'Select * from m_module'
      Active := true;
      dxTreeView1.Items.Clear;
      SetLength(NodeParent, Level);
      while not eof do
      begin
        Level := FieldByName('m_level').AsInteger;
        CodeMenu := '';
        if (Level = 0) then
        begin
          NodeView := dxTreeView1.Items.Add(nil, FieldByName('m_name').AsString);
          NodeParent[Level] := NodeView;
        end
        else
        begin
          CodeMenu := FieldByName('m_code').AsString;
          if (CodeMenu &lt;&gt; '') then CodeMenu := CodeMenu + ' - ';
          NodeView := dxTreeView1.Items.AddChild(NodeParent[Level - 1], CodeMenu + FieldByName('m_name').AsString);
          NodeParent[Level] := NodeView;
        end;

        next;
      end;
    end;
  end;
end;</pre>
</span></pre>

That’s all folks … but, we still have any difficulities to map the ID related with parent_ID … still in investigate…

Read Full Post »