Archive for the 'Delphi' Category

Zoom

Da moze da vam više koda stane u Delphi – u 2007,p robajte da u registry dodate string value koji će sadržati vrednost i zvaće se Zoom u [HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Editor.

Preuzeto odavde.

Posted on Monday, June 9th, 2008
Under: Delphi | No Comments »

Align with task bar.

Cilj mi je bio da napravim aplikaciju koja ce biti u system tray – u i na neki događaj da mi se podigne forma u system tray – u, kao neki PopUp Notification u Microsoft Windows Messenger – u, ili MS Outlook 2003. Nisam našao komponentu, ali sam našao parče koda koji radi to što želim:

function TaskBarRect: TRect;
var
  data : TAppbardata; //za ovo vam treba unit ShellApi, u uses listi
begin
  FillChar( data, SizeOf(data), 0 );
  SHAppBarMessage(ABM_GETTASKBARPOS, data);

// Taskbar autohide has no effect on the resulting rect.
  result := data.rc;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  workarea : TRect;
begin
  SystemParametersInfo( SPI_GETWORKAREA, 0, @workarea, 0 );

// If the taskbar is set to autohide the entire desktop
// is the workarea.
  SetBounds( workarea.Right -Width,
    workarea.Bottom -Height,
    Width, Height );
end;

Preuzeo odavde.

Posted on Wednesday, May 28th, 2008
Under: Delphi | No Comments »

Slanje komandi.

Dobio sam zadatak da napravim aplikaciju koja će da prikazuje i prima pozive iz VoIP centrale.

Koliko sam shvatio do sada, centrala može da prima i šalje komande preko TCP/IP, odn., preko telneta.

Npr napišete u command promptu:

telnet 191.118.5.89 5038

I onda u telnet konzoli:

Asterisk Call Manager/1.0
Action: Login
Username: user
Secret: password

I udarite enter dva puta i treba da dobijete odgovor:

Response: Success
Message: Authentication accepted

U Delphi – u počeo da istražujem kako radi indy telnet komponenta.

Prvi problem, gde sam zapeo, je da mi se indy zakucao kod ove komande:

IdTelnet1.SendCmd(‘Action: logoff’+cr+cr,0);

Morao sam da uradim sledeće:

  s:='Action: logoff'+cr+cr;
  for i := 1 to length(length(s)) do
    IdTelnet1.SendCh(s[i]);

Odn., za svaku komandu koju šaljete preko telneta asterisku mora tako ići.

Primer malo duži:

procedure TForm2.Button2Click(Sender: TObject);
var
  pom: TStrings;
  s: String;
  i, j: Integer;
begin
  pom := TStringList.Create;

  pom.Add('Action: Login'+cr);
  pom.Add('Username: user'+cr);
  pom.Add('Secret: password'+cr+cr);

  for j := 0 to pom.Count - 1 do
    for i := 1 to length(pom.Strings[j]) do
      IdTelnet1.SendCh(pom.Strings[j][i]);

  FreeAndNil(pom);
end;

Posted on Friday, May 23rd, 2008
Under: Asterisk VoIP, Delphi | No Comments »

User identifier

Da biste u WebSphere MQ poslali user identifier, potrebne su vam sledece linije koda:

var
MsgDesc : MQMD;
...
MsgDesc := MQMD_DEFAULT;
MsgDesc.UserIdentifier := chrUserID;
PutMsgOptions.Options := MQPMO_SET_IDENTITY_CONTEXT;

Preuzeto odavde. Jedino, za sada, user identifier mi se prebacuje u lower case, za sada ne znam zasto.

Posted on Friday, May 23rd, 2008
Under: Delphi, WebSphere MQ | No Comments »

Broj poruka u queue u MQ.

Prilikom otvaranja (open) navesti kao opcije:

MQOO_INQUIRE + MQOO_FAIL_IF_QUIESCING

Funkcija je:

var
mqlCompCode, mqlReason, mqlIntAttrs: MQLONG;
mqlSelectors: array [0..2] of MQLONG;
...
MQINQ(Hconn, Hobj, 1, @mqlSelectors, 1, @mqlIntAttrs, 0, nil, @mqlCompCode, @mqlReason);

I sa mqlIntAttrs mozete dobiti potrebne informacije:

if mqlCompCode <> MQCC_OK then
ShowMessage( 'Inquire Failed. Reason: ' + IntToStr(mqlReason))
else
ShowMessage(inttostr(mqlIntAttrs));

Preuzeto odavde.

Posted on Friday, May 16th, 2008
Under: Delphi, WebSphere MQ | No Comments »

MySQL i unicode.

Otprilike ovako nekako radimo:

Polja u MySQL – u neka sva budu utf8

U Delphi – u na after connect pokrecemo jedan upit:

set names cp1250

I u svakom PHP unitu koji koristimo radimo:

mysql_query(“set names utf8″);

Valjda je to sve.

Posted on Friday, May 9th, 2008
Under: Delphi, MySQL, PHP | No Comments »

Stream

Note to my self.

Kad radimo nešto tipa

stmGetText :=  TStringStream.Create(Buffer);
xml.LoadFromStream(stmGetText)

Onda moramo da kažemo

stmGetText.Position:=0;

Jer stream ode na kraj…

Posted on Tuesday, April 15th, 2008
Under: Delphi | No Comments »

Ini.

Ukoliko imate više sekcija sa istim nazivom, možete ih u ini – u preuzeti preko:

var
ini: TMemIniFile;
...
begin
...
  ini := TMemIniFile.Create('c:\file.ini');
  slSections := TStringList.Create;
  ss := TStrings.Create;
  ini.ReadSections(slSections);
  for I := 0 to slSections.Count - 1 do
  begin
    ss := TStrings(slSections.Objects[i]);
    for j := 0 to ss.Count - 1 do
    begin
      if ss.Values['value']<>'' then
        strValue:=ss.Values['value'];
    end
  end
end

Posted on Monday, April 14th, 2008
Under: Delphi | No Comments »

Delphi DLL i C#.

A verovatno važi i za druge jezike ne samo za C#, tu sam probao.

Kada želite da prosledite jednostavan string iz C# u Delphi DLL, procedura mora da vam uzgleda ovako:

procedure RSS2File(strRSS: pchar); stdcall; export;

Znači umesto da je tipa string koristite pchar i takođe vam je potreban stdcall inače će vam prijavljivati grešku.

U C# kod vam izgleda ovako:

[DllImport("Project1.dll", CharSet = CharSet.Ansi)]
unsafe static extern string RSS2File(String asc);
unsafe private void button1_Click(object sender, EventArgs e)

Znači bitno je i da stavite unsafe na private void.

Posted on Monday, March 17th, 2008
Under: C#, Delphi | No Comments »

TObjectList.

Tip podataka TObjectList je pokazivač, dobro je što vam on brine za dodavanje i brisanje elemenata u listu, ali problem je što morate biti obazrivi šta dodajete.

Moj problem je bio sledeći, radio sam nešto ovako:

  olLista: TObjectList;
  slLista:TStringList;
  i: Integer;
...
  olLista := TObjectList.Create;
  slLista := TStringList.Create;
  for i := 0 to 3 do
  begin
     slLista.Text := IntToStr(i);
     olLista.Add(slLista);
  end;
  olLista.Free;

Problem je što u gornjem kodu, sva 4 elemnta u olLista biće 3, trebalo je uraditi ovako nešto:

  olLista: TObjectList;
  slLista:TStringList;
  i: Integer;
...
  olLista := TObjectList.Create;
  for i := 0 to 3 do
  begin
     slLista := TStringList.Create;
     slLista.Text := IntToStr(i);
     olLista.Add(slLista);
  end;
  olLista.Free;

olLista.Free; na kraju će pobiti sve objekte tipa TStringList koji se nalaze u listi.

Kod nisam testirao, tako da je moguće da nešto ne radi.

Posted on Friday, February 22nd, 2008
Under: Delphi | No Comments »