Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Tstring [Win2k]


Страницы:   1 2

TORT ©   (2005-06-06 18:06:00) 

привет народ подскажите пожалуйста Как не создавая всяких мемо итд просто создать переменную типа
Tstring и сохранить ее значение в тхт?


kot andrei   (2005-06-07 13:19:00) [1]

ни хрена себе вы заморочались...


VMcL   (2005-06-07 13:15:00) [2]

Удалено модератором


pasha_golub   (2005-06-07 13:13:00) [3]

VMcL ©   (06.06.05 20:09) [15]
Даже не видел, что там конструктор переобъявленный. :)


pasha_golub (temp)   (2005-06-07 13:05:00) [4]

VMcL ©   (06.06.05 20:09) [15]
Я тупо у Женьки скопировал


Просто Джо   (2005-06-06 20:35:00) [5]


>  [16] Просто Джо ©   (06.06.05 20:32)

Кхм...че-то я заработался :)


Просто Джо   (2005-06-06 20:32:00) [6]


>  [15] VMcL ©   (06.06.05 20:09)

А шобы не вводить во искушение создавать так-с: TString.Create;
Особенности реалызации! :-)


VMcL   (2005-06-06 20:09:00) [7]

>> Просто Джо
>> pasha_golub

Господа, а на фига вы конструктор reintroduce'ите? Он же у базового класса не виртуальный.


TORT   (2005-06-06 19:39:00) [8]

НУ ВОТ! ДАЖЕ РЕПЛИКУ МОЮ УКРАЛИ ;)


Просто Джо   (2005-06-06 19:22:00) [9]

Щас придет автор вопроса и скажет:
-- А чё это вы тут делаете, а?(ц) кинофильм.

:))


jack128   (2005-06-06 19:11:00) [10]

Мда. Маленькие недочеты
а) было inherited стало inherited Create;
b) было AnsiApperCase стало AnsiUpperCase
c) было Filename := _Params.rgvarg[0]; стало Filename := OleVariant(_Params.rgvarg[0]);
b) было WriteLn (FString) стало WriteLn (FileVar, FString)
e) к проэкту в обязательном порядке нужно подключить ComObj, иначе варианты типа Dispatch не могут вызыватьметоды/свойства


jack128   (2005-06-06 18:56:00) [11]

Virgo_Style ©   (06.06.05 18:51) [10]
Эволюция еще не закончилась :-)

type
 TString = class(TInterfacedObject, IUnknown, IDispatch)
 private
   fString: string;
 protected
   { IDispatch }
   function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
   function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
   function GetIDsOfNames(const IID: TGUID; Names: Pointer;
     NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
   function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
     Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
 public
   constructor  Create(AStr: string);
 end;

constructor TString.Create(AStr: string);
begin
 inherited;
 fString := AStr;
end;

function TString.GetIDsOfNames(const IID: TGUID; Names: Pointer;
 NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
type
 TDispIDsArray = array [0..MaxInt div SizeOf(TDISPID) - 1] of TDISPID;
 PDispIDsArray = ^TDispIDsArray;

 TNameArray = array [0..MaxInt div SizeOf(PWideChar) - 1] of PWideChar;
 PNameArray = ^TNameArray;
var
 _DispIDs: PDispIDsArray absolute DispIDs;
 _Names: PNameArray absolute Names;
begin
 if (NameCount = 1) and AnsiApperCase(_Names[0]) = 'SAVETOFILE' then
 begin
   Result := S_OK;
   _DispIDs[0] := 1;
 end else
   Result := DISP_E_UNKNOWNNAME;
end;

function TString.GetTypeInfo(Index, LocaleID: Integer;
 out TypeInfo): HResult;
begin
 Pointer(TypeInfo) := nil;
 Result := E_NOTIMPL;
end;

function TString.GetTypeInfoCount(out Count: Integer): HResult;
begin
 Count := 0;
 Result := S_OK;
end;

function TString.Invoke(DispID: Integer; const IID: TGUID;
 LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
 ArgErr: Pointer): HResult;
var
 _Params: TDISPPARAMS absolute Params;
 _ExcepInfo: PExcepInfo absolute ExcepInfo;
 FileName: string;
 FileVar: TextFile;
begin
 Result := DISP_E_MEMBERNOTFOUND;
 try
   if (DispID <> 1) or (Flags <> DISPATCH_METHOD) then Exit;
   if _Params.cArgs <> 1 then
   begin
     Result := DISP_E_BADPARAMCOUNT;
     Exit;
   end;
   Filename := _Params.rgvarg[0];
   AssignFile (FileVar, FileName);
   Rewrite(FileVar);
   try
     WriteLn (FString)
   finally
    CloseFile (FileVar);
   end;    
   Result := S_OK;
 except
   on E: Exception do
   begin
     Result := DISP_E_EXCEPTION;
     ZeroMemory(_ExcepInfo, SizeOf(TExcepInfo));
     _ExcepInfo.wCode := 1001;
     _ExcepInfo.bstrSource := 'Ошибка класса:' + E.ClassName ;
     _ExcepInfo.bstrDescription := E.Message;
   end;
 end;
end;

//-------------------------------------------------------
//   Пример использования
//-------------------------------------------------------

var
 Str: OleVariant;

begin
 Str := TString.Create('Мама мыла раму') as IDispatch;
 Str.SaveToFile('c:\test.txt');
end;


Virgo_Style   (2005-06-06 18:51:00) [12]

Похоже на "эволюцию программиста" %-)


pasha_golub   (2005-06-06 18:31:00) [13]

Удалено модератором


pasha_golub   (2005-06-06 18:29:00) [14]

Просто Джо ©   (06.06.05 18:23) [7]
Е-мае...


 IString = interface
 ['{A738C8C9-F469-48BA-BD3F-44261B34FA43}']
  procedure SaveToFile(S: string);
 end;

 TString = class(TInterfacedObject, IString)
 private
  FString: string;
 public
  constructor Create (AString: string); reintroduce;
  procedure SaveToFile(S: string);
 end;


Просто Джо   (2005-06-06 18:23:00) [15]

Мелко мыслите, товарище! Надо ООП-нуть по полной :)


 TString = class
 private
   FString: string;
 public
   constructor Create (AString: string); reintroduce;
   procedure SaveToFile (AFileName: string);
 end;

implementation

constructor TString.Create(AString: string);
begin
 inherited Create;
 FString := AString
end;

procedure TString.SaveToFile(AFileName: string);
var
 FileVar: TextFile;
begin
 AssignFile (FileVar,AFileName);
 Rewrite(FileVar);
 try
   WriteLn (FString)
 finally
   CloseFile (FileVar);
 end;
end;


Ы? ;-)


pasha_golub   (2005-06-06 18:16:00) [16]

jack128 ©   (06.06.05 18:15) [5]
Вау... Шаман. :0)


jack128   (2005-06-06 18:15:00) [17]

pasha_golub ©   (06.06.05 18:10) [2]
Хитер ;)  А я вот так хочу

type
Tstring = Integer;

var
F: text;
S: Tstring;

begin
AssignFile(f,'foo.txt');
Rewrite(f);
S := 10;
WriteLn(f,s);
CloseFile(f);
end;


:-)


pasha_golub   (2005-06-06 18:13:00) [18]

TORT   (06.06.05 18:11) [3]
спасибо попробую
Лучше не надо. Ибо я абсолютно не уверен, что это то, что нужно... :0)


TORT   (2005-06-06 18:11:00) [19]

спасибо попробую
PS вот это реакция


pasha_golub   (2005-06-06 18:10:00) [20]

type
Tstring = string;

var
F: text;
S: Tstring;

begin
AssignFile(f,'foo.txt');
Rewrite(f);
S := 'mama washing rama';
WriteLn(f,s);
CloseFile(f);
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо