Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.31;
Скачать: CL | DM;

Вниз

В чем разница? : M2 := TMemo(M1) и M2 := (M1 as TMemo)?   Найти похожие ветки 

 
@Ujin ©   (2003-07-17 15:12) [0]

Если можно попопулярней! Заранее спосибо!


 
AGAMEMNUM ©   (2003-07-17 15:16) [1]

а что тут непонятного? в перв случае создаешь еще одно мемо, по образу и подобию, во втором получаешь ссылку на то же мемо...


 
Skier ©   (2003-07-17 15:18) [2]

>@Ujin © (17.07.03 15:12)
M2 := TMemo(M1) быстрее чем M2 := (M1 as TMemo) , поскольку
as производит проверку на допустимость кастинга, за
TMemo(M1) отвечает сам программист, поэтому обычно пишут
так :

if M1 is TMemo then begin
with TMemo(M1) begin //не as поскольку на TMemo уже проверено
//.......
end; //with
end;


 
Palladin ©   (2003-07-17 15:20) [3]

хихи...


 
@Ujin ©   (2003-07-17 15:24) [4]

Так, вот что странно:
делаю так:

Libs.AddObject("Идентефикатор", TLib.Init(<Имя файла>));
При таком обращении: (Libs.Objects[i] as TLib) - ОШИБКА,
а при таком: TLib(Libs.Objects[i][i]) все в порядке!

В чем тут беда?


 
Palladin ©   (2003-07-17 15:27) [5]

а какая ошибка ?
а может (Libs.Objects[i][i] as TLib) тогда ?


 
@Ujin ©   (2003-07-17 15:29) [6]

Не, там массива нет.
А ошибка RunTime 216


 
Skier ©   (2003-07-17 15:30) [7]

>@Ujin
Я бы ответил так : ошибка видимо совсем не в приведении типов !


 
Palladin ©   (2003-07-17 15:32) [8]

AV...
код обращения приведи, реальный


 
@Ujin ©   (2003-07-17 15:34) [9]

function LibByName(const ALibName: string): TLib;
var idx: integer;
begin
idx := Libs.IndexOf(ALibName);
if idx <> -1 then Result := /b(Libs.Objects[idx] as TLib)
else Result := nil;
end;


 
@Ujin ©   (2003-07-17 15:35) [10]

/b - тытался делать жирным :)


 
Skier ©   (2003-07-17 15:36) [11]

>@Ujin
А чему у тебя равен Libs.Objects[idx] ?
Не nil случаем ?


 
Palladin ©   (2003-07-17 15:38) [12]

а ошибку выдает в каком случае?
код вызова функции тоже приведи...


 
@Ujin ©   (2003-07-17 15:39) [13]

procedure TryToUnloadAll;
var i: integer;
begin
i := 0;
while i < Libs.Count do begin
if LibRefCount(Libs[i]) = 0 then
TryToUnloadLib(Libs[i])
else kError;
inc(i);
end;
Unloader.Suspend;
end;


 
@Ujin ©   (2003-07-17 15:40) [14]

Сори...

function TryToUnloadLib(const ALibName: string): boolean;
begin
Result := false;
if LibRefCount(ALibName) = 0 then begin
with LibByName(ALibName) do try
if Active then Result := Unload;
except
kError("?????? ??? ???????? ??????????: ""+ALibName+""");
end;
end;
end;


 
Palladin ©   (2003-07-17 15:43) [15]

вот верхняя процедура интересна
попробуй
for i:=Libs.Count-1 downto 0 do
if LibRefCount(Libs[i]) = 0 then TryToUnloadLib(Libs[i])
else kError;


 
Palladin ©   (2003-07-17 15:45) [16]

и я так понимаю это у тебя многопоточность...
ты безопасность работы с общими ресурсами соблюдаешь надеюсь?


 
@Ujin ©   (2003-07-17 15:46) [17]

Есть казусы с Unloader = TThread. Я бы именно так и сделал...


 
@Ujin ©   (2003-07-17 15:47) [18]

Как правила дорожного движения! :)


 
@Ujin ©   (2003-07-17 15:49) [19]

Всем спосибо за участие - деньги заканчиваются!


 
Palladin ©   (2003-07-17 15:51) [20]

ну тогда у тебя какой то из Objects в списке есть nil...
трассируй содержимое...



Страницы: 1 вся ветка

Текущий архив: 2003.07.31;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
1-100797
ruslan_as
2003-07-16 17:45
2003.07.31
Как открыть файл Acrobat Reader с паролем


11-100651
Arhangel
2002-11-30 15:20
2003.07.31
Есть архив?


6-100852
Paylik
2003-05-24 20:14
2003.07.31
Компьютеры в сети


1-100742
alfim
2003-07-16 08:28
2003.07.31
Excel.Application.8, его свойства и методы...


3-100645
Spawn
2003-07-10 17:37
2003.07.31
IB