![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Tstring [Win2k]
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;