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

Bicdibus

Участник
Регистрация
5 Мар 2010
Сообщения
497
Реакции
7
нашел то что мне надо авторизация на сайте и отправка поста но все это оформлено в виде класа, я не понимаю как все это использовать и куда впихнуть чтоб можно было использовать процедуры этого класа.Я в делфи немного новичек, перешел с паскаля, потому привык к линейному програмированию и в ООП не секу, потому прошу не матерится в мою сторону, а просто скажыте куда весь этот код вставить.чтоб можно было в проге использовать процедуры написаные в этом класе
 
не очень понятно, что конкретно спрашиваешь, мало инфы - что есть, но попробую помочь
1. в uses добавляешь свой unit с классом
2. делаешь вызов своей процедуры например по нажатию кнопочки:)
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  m1t: T_твой_класс;
begin
  m1t := T_твой_класс.Create(Self); //создали объект
  m1t.GO; // Запустили процедуру
  m1t.Free; //Удалились
end;
 
вот собственно сам клас в нем 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;

 
всё же описано по ссылке. нужно создать в папке с программой файл 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('Для просмотра ссылки Войди или Зарегистрируйся
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 и пользоваться...
 
прописал в юзес при запуске говорит [Fatal Error] Unit1.pas(7:( File not found: 'ljxmlrpc.dcu'
 
ljxmlrpc.pas добавь в проект
 
как его добавить, есть какая-то директива?
 
меню = project = add to project
 
блин компилятор ругается на строчку XMLRequest:=TStringStream.Create('<?xml version="1.0"?>'+XML,CP_UTF8); кто-то может попробовать у себя работоспособность этого кода, может это из-за того что у меня делфи 6
 
Назад
Сверху