Как использовать класс делфи

Тема в разделе "ASM, С/С++, Delphi, Java", создана пользователем Bicdibus, 30 мар 2012.

  1. Bicdibus

    Bicdibus

    Регистр.:
    5 мар 2010
    Сообщения:
    485
    Симпатии:
    7
    нашел то что мне надо авторизация на сайте и отправка поста но все это оформлено в виде класа, я не понимаю как все это использовать и куда впихнуть чтоб можно было использовать процедуры этого класа.Я в делфи немного новичек, перешел с паскаля, потому привык к линейному програмированию и в ООП не секу, потому прошу не матерится в мою сторону, а просто скажыте куда весь этот код вставить.чтоб можно было в проге использовать процедуры написаные в этом класе
     
  2. Funaki

    Funaki

    Регистр.:
    26 июн 2008
    Сообщения:
    151
    Симпатии:
    16
    не очень понятно, что конкретно спрашиваешь, мало инфы - что есть, но попробую помочь
    1. в uses добавляешь свой unit с классом
    2. делаешь вызов своей процедуры например по нажатию кнопочки:)
    Код:
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      m1t: T_твой_класс;
    begin
      m1t := T_твой_класс.Create(Self); //создали объект
      m1t.GO; // Запустили процедуру
      m1t.Free; //Удалились
    end;
     
  3. Bicdibus

    Bicdibus

    Регистр.:
    5 мар 2010
    Сообщения:
    485
    Симпатии:
    7
    вот собственно сам клас в нем 2 процедуры которые я хочу использовать в своей програме это постер в ЖЖ в какое место в программе его надо вставить чтоб потом можна было использовать процедуры в проге, при попытке скомпилировать как юнит выдает ошыбки, по отзывам на сайте код вроде рабочий.
    Код:
    interface
     
    uses Classes, Windows, Dialogs, SysUtils, idHttp;
     
    type
     
    TLJXmlRpc=class
    private
      FUsername: string;
      FPassword: string;
      FLogged: boolean;
      function PostXML(XML: string): string;
      procedure AddLoginInfo(XML: TStringList);
      procedure AddVersionInfo(XML: TStringList);
      procedure AddDateInfo(XML: TStringList; Date: TDateTime);
    public
      function Login(AUserName,APassword: string): boolean;
      function Post(ASubj,AText: string; ACreated: TDateTime=0): integer;
    end;
     
    implementation
     
    procedure TLJXmlRpc.AddLoginInfo(XML: TStringList);
    begin
      XML.Add('<member><name>username</name>');
      XML.Add('<value><string>'+FUsername+'</string></value>');
      XML.Add('</member>');
     
      XML.Add('<member><name>password</name>');
      XML.Add('<value><string>'+FPassword+'</string></value>');
      XML.Add('</member>');
    end;
     
    procedure TLJXmlRpc.AddVersionInfo(XML: TStringList);
    begin
      XML.Add('<member><name>ver</name>');
      XML.Add('<value><int>1</int></value>');
      XML.Add('</member>');
    end;
     
    procedure TLJXmlRpc.AddDateInfo(XML: TStringList; Date: TDateTime);
      var y,m,d,h,mi,s,ms: word;
    begin
      DecodeDate(Date,y,m,d);
      DecodeTime(Date,h,mi,s,ms);
      XML.Add('<member><name>year</name>');
      XML.Add('<value><int>'+IntToStr(y)+'</int></value>');
      XML.Add('</member>');
      XML.Add('<member><name>mon</name>');
      XML.Add('<value><int>'+IntToStr(m)+'</int></value>');
      XML.Add('</member>');
      XML.Add('<member><name>day</name>');
      XML.Add('<value><int>'+IntToStr(d)+'</int></value>');
      XML.Add('</member>');
      XML.Add('<member><name>hour</name>');
      XML.Add('<value><int>'+IntToStr(h)+'</int></value>');
      XML.Add('</member>');
      XML.Add('<member><name>min</name>');
      XML.Add('<value><int>'+IntToStr(s)+'</int></value>');
      XML.Add('</member>');
    end;
     
    function TLJXmlRpc.PostXML(XML: string): string;
      var http: TIdHTTP;
          XMLRequest: TStringStream;
    begin
      http:=TIdHTTP.Create(nil);
      XMLRequest:=TStringStream.Create('<?xml version="1.0"?>'+XML,CP_UTF8);
      try
        XMLRequest.Position:=0;
        Result:=http.Post('http://www.livejournal.com/interface/xmlrpc',XMLRequest);
      finally
        XMLRequest.Free;
        http.Free;
      end;
    end;
     
    function TLJXmlRpc.Login(AUserName,APassword: string): boolean;
      var XML: TStringList;
          Ret: string;
    begin
     
      FUsername:=AUsername;
      FPassword:=APassword;
     
      XML:=TStringList.Create;
      try
        XML.Add('<methodCall>');
        XML.Add('<methodName>LJ.XMLRPC.login</methodName>');
        XML.Add('<params>');
     
        XML.Add('<param>');
        XML.Add('<value><struct>');
     
        AddLoginInfo(XML);
        AddVersionInfo(XML);
     
        XML.Add('</struct></value>');
        XML.Add('</param>');
     
        XML.Add('</params>');
        XML.Add('</methodCall>');
     
        Ret:=PostXML(XML.Text);
     
        if Pos('<methodResponse><fault>',Ret)=0 then FLogged:=true else
        begin
          FUsername:='';
          FPassword:='';
          FLogged:=false;
        end;
     
        Result:=FLogged;
      finally
        XML.Free;
      end;
    end;
     
    function TLJXmlRpc.Post(ASubj,AText: string; ACreated: TDateTime=0): integer;
      var XML: TStringList;
          Ret: string;
    begin
      if not FLogged then
        raise Exception.Create('Not logged on');
     
      XML:=TStringList.Create;
      try
        XML.Add('<methodCall>');
        XML.Add('<methodName>LJ.XMLRPC.postevent</methodName>');
        XML.Add('<params>');
        XML.Add('<param>');
        XML.Add('<value><struct>');
     
        AddLoginInfo(XML);
        AddVersionInfo(XML);
     
        XML.Add('<member><name>event</name>');
        XML.Add('<value><string>'+AText+'</string></value>');
        XML.Add('</member>');
        XML.Add('<member><name>subject</name>');
        XML.Add('<value><string>'+ASubj+'</string></value>');
        XML.Add('</member>');
        XML.Add('<member><name>lineendings</name>');
        XML.Add('<value><string>pc</string></value>');
        XML.Add('</member>');
     
        if ACreated=0 then AddDateInfo(XML,Now) else AddDateInfo(XML,ACreated);
     
        XML.Add('</struct></value>');
        XML.Add('</param>');
        XML.Add('</params>');
        XML.Add('</methodCall>');
     
        Ret:=PostXML(XML.Text);
     
      finally
        XML.Free;
      end;
    end;
    

     
  4. Bicdibus

    Bicdibus

    Регистр.:
    5 мар 2010
    Сообщения:
    485
    Симпатии:
    7
     
  5. Goodw1n

    Goodw1n Писатель

    Регистр.:
    30 ноя 2008
    Сообщения:
    5
    Симпатии:
    2
    всё же описано по ссылке. нужно создать в папке с программой файл ljxmlrpc.pas в него вставить код:

    unit ljxmlrpc;

    interface

    uses Classes, Windows, Dialogs, SysUtils, idHttp;

    type

    TLJXmlRpc=class
    private
    FUsername: string;
    FPassword: string;
    FLogged: boolean;
    function PostXML(XML: string:( string;
    procedure AddLoginInfo(XML: TStringList);
    procedure AddVersionInfo(XML: TStringList);
    procedure AddDateInfo(XML: TStringList; Date: TDateTime);
    public
    function Login(AUserName,APassword: string:( boolean;
    function Post(ASubj,AText: string; ACreated: TDateTime=0:( integer;
    end;

    implementation

    procedure TLJXmlRpc.AddLoginInfo(XML: TStringList);
    begin
    XML.Add('<member><name>username</name>');
    XML.Add('<value><string>'+FUsername+'</string></value>');
    XML.Add('</member>');

    XML.Add('<member><name>password</name>');
    XML.Add('<value><string>'+FPassword+'</string></value>');
    XML.Add('</member>');
    end;

    procedure TLJXmlRpc.AddVersionInfo(XML: TStringList);
    begin
    XML.Add('<member><name>ver</name>');
    XML.Add('<value><int>1</int></value>');
    XML.Add('</member>');
    end;

    procedure TLJXmlRpc.AddDateInfo(XML: TStringList; Date: TDateTime);
    var y,m,d,h,mi,s,ms: word;
    begin
    DecodeDate(Date,y,m,d);
    DecodeTime(Date,h,mi,s,ms);
    XML.Add('<member><name>year</name>');
    XML.Add('<value><int>'+IntToStr(y)+'</int></value>');
    XML.Add('</member>');
    XML.Add('<member><name>mon</name>');
    XML.Add('<value><int>'+IntToStr(m)+'</int></value>');
    XML.Add('</member>');
    XML.Add('<member><name>day</name>');
    XML.Add('<value><int>'+IntToStr(d)+'</int></value>');
    XML.Add('</member>');
    XML.Add('<member><name>hour</name>');
    XML.Add('<value><int>'+IntToStr(h)+'</int></value>');
    XML.Add('</member>');
    XML.Add('<member><name>min</name>');
    XML.Add('<value><int>'+IntToStr(s)+'</int></value>');
    XML.Add('</member>');
    end;

    function TLJXmlRpc.PostXML(XML: string:( string;
    var http: TIdHTTP;
    XMLRequest: TStringStream;
    begin
    http:=TIdHTTP.Create(nil);
    XMLRequest:=TStringStream.Create('<?xml version="1.0"?>'+XML,CP_UTF8);
    try
    XMLRequest.Position:=0;
    Result:=http.Post('http://www.livejournal.com/interface/xmlrpc',XMLRequest);
    finally
    XMLRequest.Free;
    http.Free;
    end;
    end;

    function TLJXmlRpc.Login(AUserName,APassword: string:( boolean;
    var XML: TStringList;
    Ret: string;
    begin

    FUsername:=AUsername;
    FPassword:=APassword;

    XML:=TStringList.Create;
    try
    XML.Add('<methodCall>');
    XML.Add('<methodName>LJ.XMLRPC.login</methodName>');
    XML.Add('<params>');

    XML.Add('<param>');
    XML.Add('<value><struct>');

    AddLoginInfo(XML);
    AddVersionInfo(XML);

    XML.Add('</struct></value>');
    XML.Add('</param>');

    XML.Add('</params>');
    XML.Add('</methodCall>');

    Ret:=PostXML(XML.Text);

    if Pos('<methodResponse><fault>',Ret)=0 then FLogged:=true else
    begin
    FUsername:='';
    FPassword:='';
    FLogged:=false;
    end;

    Result:=FLogged;
    finally
    XML.Free;
    end;
    end;

    function TLJXmlRpc.Post(ASubj,AText: string; ACreated: TDateTime=0:( integer;
    var XML: TStringList;
    Ret: string;
    begin
    if not FLogged then
    raise Exception.Create('Not logged on');

    XML:=TStringList.Create;
    try
    XML.Add('<methodCall>');
    XML.Add('<methodName>LJ.XMLRPC.postevent</methodName>');
    XML.Add('<params>');
    XML.Add('<param>');
    XML.Add('<value><struct>');

    AddLoginInfo(XML);
    AddVersionInfo(XML);

    XML.Add('<member><name>event</name>');
    XML.Add('<value><string>'+AText+'</string></value>');
    XML.Add('</member>');
    XML.Add('<member><name>subject</name>');
    XML.Add('<value><string>'+ASubj+'</string></value>');
    XML.Add('</member>');
    XML.Add('<member><name>lineendings</name>');
    XML.Add('<value><string>pc</string></value>');
    XML.Add('</member>');

    if ACreated=0 then AddDateInfo(XML,Now) else AddDateInfo(XML,ACreated);

    XML.Add('</struct></value>');
    XML.Add('</param>');
    XML.Add('</params>');
    XML.Add('</methodCall>');

    Ret:=PostXML(XML.Text);

    finally
    XML.Free;
    end;
    end;

    end.

    далее в основном коде программы в разделе uses прописать ljxmlrpc и пользоваться...
     
  6. Bicdibus

    Bicdibus

    Регистр.:
    5 мар 2010
    Сообщения:
    485
    Симпатии:
    7
    прописал в юзес при запуске говорит [Fatal Error] Unit1.pas(7:( File not found: 'ljxmlrpc.dcu'
     
  7. Funaki

    Funaki

    Регистр.:
    26 июн 2008
    Сообщения:
    151
    Симпатии:
    16
    ljxmlrpc.pas добавь в проект
     
  8. Bicdibus

    Bicdibus

    Регистр.:
    5 мар 2010
    Сообщения:
    485
    Симпатии:
    7
    как его добавить, есть какая-то директива?
     
  9. Funaki

    Funaki

    Регистр.:
    26 июн 2008
    Сообщения:
    151
    Симпатии:
    16
    меню = project = add to project
     
  10. Bicdibus

    Bicdibus

    Регистр.:
    5 мар 2010
    Сообщения:
    485
    Симпатии:
    7
    блин компилятор ругается на строчку XMLRequest:=TStringStream.Create('<?xml version="1.0"?>'+XML,CP_UTF8); кто-то может попробовать у себя работоспособность этого кода, может это из-за того что у меня делфи 6