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

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

Освобождение ресурса в finally


Страницы:   1 2 ... 21 22 23 24 25 26 27 ... 32 33

Arinyshka ©   (2008-04-23 12:17:00) 

Не подскажете еще один момент:
Есть процедура, выглядит примерно так

procedure TSetPayFrm.BtnAddImageClick(Sender: TObject);
var  TempBitmap:TBitmap;
begin
if not(opendialog1.Execute) then  exit;
try
 TempBitmap  := TBitmap.Create;
 TempBitmap.LoadFromFile(OpenDialog1.FileName);
finally
TempBitmap.Free;
end;
end;

На освобождение  TempBitmap.Free; выдает варнинг
[Warning] uSetPaymentMain.pas(313): Variable 'TempBitmap' might not have been initialized
Не смертельно, но непонятно... почему варнинг? При изменениии условия и включении всей конструкции в один блок begin..end ситуация не менялась.


Palladin   (2008-04-24 17:50:00) [461]

чет я про ANB забыл :)


> ANB   (24.04.08 14:31) [96]

я считаю эту процедуру/метод уже жирной, все verb'ы разбиваются на логические куски, и решается это примерно так.

Type
TTextProceedManager=Class
 Private
  m_fileInText:TextFile;
  m_theLogStm:TFileStream;
  m_theErrStm:TFileStream;
  m_theSelQuery:TADOQuery;
  m_theExecQuery:TADOQuery;
 Public
  Constructor Create(Const p_strSrcFileName,p_strLogFileName,p_strErrFileName,p_strConnectionString:String) ;
  Destructor Destroy; Override;

  Procedure LogWriteLn(s:String);
  Function ReadLn:String;
  Procedure SaveErrorLine(s:String);
  Procedure Select(Const p_strSQL:String);
  Procedure Execute(Const p_strSQL:String);

  Property DataSourceQuery:TADOQuery Read m_theSelQuery;
End;

Constructor TTextProceedManager.Create;
Begin
If Not FileExists(p_strSrcFileName) Then Raise Exception(Format('File %s not found',[p_strSrcFileName]));

AssignFile(m_fileInText,p_strSrcFileName); Reset(m_fileInText);

m_theLogStm:=TFileStream.Create(p_strLogFileName,fmCreate);
m_theErrStm:=TFileStream.Create(p_strLogFileName,fmCreate);

m_theSelQuery:=TADOQuery.Create(Nil);
m_theSelQuery.ConnectionString:=p_strConnectionString;

m_theExecQuery:=TADOQuery.Create(Nil);
m_theExecQuery.ConnectionString:=p_strConnectionString;
End;

Destructor TTextProceedManager.Destroy;
Begin
CloseFile(m_fileInText);
m_theLogStm.Free;
m_theErrStm.Free;
m_theSelQuery.Free;
m_theExecQuery.Free;
End;

Procedure TTextProceedManager.LogWriteLn;
Begin
s:=s+#13#10;
m_theLogStm.Write(s[1],Length(s));
End;

Procedure TTextProceedManager.SaveErrorLine;
Begin
s:=s+#13#10;
m_theErrStm.Write(s[1],Length(s));
End;

Procedure TTextProceedManager.Select;
Begin
m_theSelQuery.Close;
m_theSelQuery.SQL.Text:=p_strSQL;
m_theSelQuery.Open;
End;

Procedure TTextProceedManager.Execute;
Begin
m_theExecQuery.SQL.Text:=p_strSQL;
m_theExecQuery.ExecSQL;
End;

Function TTextProceedManager.ReadLn;
Begin
System.ReadLn(m_fileInText,Result);
End;


и с наслаждением используем без всяких каскадов из try finally


Var
TPM:TTextProceedManager;
...
TPM:=TTextProceedManager.Create;
Try
Finally
TPM.Free;
End;


ZENsan   (2008-04-24 17:45:00) [462]

А книгу уже стянул, приступлю скоро..


ZENsan   (2008-04-24 17:44:00) [463]

Спасибо Восхищённый. Я и не говорил что я прям разрабатываю компоненты - лишь ингода учавствую в этом. А книжку поищю. Обид никаких. Я не силён сам в разработке компонентов, только чуток. Больше уделял время другому, поэтому и не знаю так глубоко объектную модель Делфи. Знал только то что использовал..наследования там всё такое.. А вот ети нюансы.. Буду читать, учится.. пригодится.

Спасибо, Восхищенный - даёшь дельные советы а не добиваешь в итак хреновой моральной обстановке..


Восхищенный   (2008-04-24 17:38:00) [464]

> ZENsan ©   (24.04.08 17:18) [181]

Хочешь совет, за который ты потом сто раз "спасибо" скажешь (если ему последуешь, конечно)?

Отложи на времяразработку компонентов. Рано тебе еще. Без обид. Почитал я тут твои сообщения (не только в этой ветке, в других тоже) - и говорю тебе - рано. Не знаешь ты еще объектной модели Delphi и не понимаешь ее на том уровне, чтобы хорошие компоненты писать. А плохие - кому они нужны? Их только ленивый не писал, плохих-то, ими пол-инета завалено. Только мусор все это.

Поэтому - отложи на времяразработку компонентов. А вместо этого потрать время на то, чтобы найти, скачать и капитально проштудировать книгу Рэя Конопки по разработке компонентов.

В сети она точно есть. И не смотри, что она старая - она не устарела. Все, что в ней написано, работает до сих пор. Много нового появилось - это да, но и старое никуда не исчезло, все осталось. И пока это старое наизусть не освоишь - о разработке приличных компонентов можно даже и не мечтать. Не получится.

Вот поверь. Может, оно и кажется обидным, но потом благодарить будешь. Этих самых компонентов я написал штук сто (а может и больше), очень разных, и простых, и сложных, и визуальных, и невизуальных, и для работы с данными, и всяких прочих - и все написаны профессионально, можешь поверить. Поэтому и говорю тебе - рано. Тебе сейчас не писать, а читать надо. И лучшей книги по этой теме, чем Конопка ты на русском не найдешь. Ее нет просто. Есть еще две другие книжки, но они послабее будут.

Вот такой совет.


ZENsan   (2008-04-24 17:34:00) [465]

Согласен. Стыдно даже... Извините пожалуйста... В селдующий раз точно буду внимателней...

Ещё раз извините.


{RASkov}   (2008-04-24 17:31:00) [466]

> [185] ZENsan ©   (24.04.08 17:27)

Да ладно тебе.... с кем не бывает...
Не горячись) Просто не нужно быть таким настырным, особенно когда многие говорят одно а ты с ними споришь...
Одно дело о вкусах спор, но здесь..... тут или так или не так.


sniknik   (2008-04-24 17:30:00) [467]

не изза промаха, а изза гонора... общался бы нормально без апломба и наездов давно бы уж все разъяснили бы.

опять путаешь теплое с мягким.


ZENsan   (2008-04-24 17:27:00) [468]

Иду торжественно вешаться...

Так облили из-за этого промаха... вот так ло....


Ega23   (2008-04-24 17:25:00) [469]


> Ну чё теперь с лохом со мной делать будем? ....


Оскопить, предать анафеме и торжественно сжечь на городской площади. :)


ZENsan   (2008-04-24 17:25:00) [470]

Простите мастера за упрямость... блин ну так жестоко лохануться...

Всё иду вешаться....


ZENsan   (2008-04-24 17:20:00) [471]

Я не прямой Jedi developer... не пугайтесь так.. просто с некоторыми разработчиками вместе ковырялись часто с некоторыми проблемами...


ZENsan   (2008-04-24 17:18:00) [472]

Удалено модератором
Примечание: Выражения выбираем, не в пивной


{RASkov}   (2008-04-24 17:15:00) [473]

> [175] Игорь Шевченко ©   (24.04.08 17:00)

Просто ZENsan уверяет, что он является разработчиком компонента(ов) в проекте JEDI... в [176] вместе со ссылкой есть номер поста.
Ну а мне почему-то издавна.... т.е. сразу как первый раз попробывал, не понравился данный монстр-проект.... а тут еще такое ...свалилось :)
Ничего личного.... считайте за шутку.


Игорь Шевченко   (2008-04-24 17:07:00) [474]

Ega23 ©   (24.04.08 17:02) [176]

"Ну так и вы говорите - в чем проблема" (с) известный анекдот про соседа


{RASkov}   (2008-04-24 17:06:00) [475]

> А причем тут Jedi ?

Не повезло ей
:о)


ZENsan   (2008-04-24 17:03:00) [476]

Ща переварю..


Ega23   (2008-04-24 17:02:00) [477]


> А причем тут Jedi ?


http://www.delphimaster.ru/cgi-bin/forum.pl?n=3&id=1208941969
[15]


Игорь Шевченко   (2008-04-24 17:00:00) [478]


> А мне сразу JEDI не понравилась


А причем тут Jedi ?


{RASkov}   (2008-04-24 16:57:00) [479]

А мне сразу JEDI не понравилась... жаль что RX к ним перешла :(
:о)

> ZENsan ©

если что, это у меня шутки такие) Хотя в данном случае - не совсем шутка.


Восхищенный   (2008-04-24 16:51:00) [480]

> ZENsan ©   (24.04.08 16:17) [147]

> "class static methods have no Self parameter at all" - официальный источник.
> Это про Делфи 2007. Там нету вообще Селф.

Все правильно. Но новоездесь толькослово static, а не class. Ты ошибся. Спутал теплое с мягким.

Классовые методы (class methods), как тебе уже устали говорить, в Delphi были всегда, начиная еще с D1. Они действительно могут быть вызваны без создания экземпляра класса - и это тоже было всегда. Параметр Self в них есть, но, в отличие от обычных методов, указывает он именно на класс, а не на экземпляр класса - и это тоже было всегда.

Новое здесь по сравнению с D7 (и всеми предыдущими) - слово static. Оно означает, что метод может быть вызван из типакласса. Читай описание внимательно, там же все сказано:

"Classes can have static class methods -- i.e. methods that can be called from a class type. Class static methods can be accessed without an object reference. Unlike ordinary class methods , class static methods have no Self parameter at all. They also cannot access any instance members. (They still have access to class fields, class properties, and class methods.) Also unlike class methods , class static methods cannot be declared virtual".

Обрати внимание на выделенные слова "Unlike ordinary class methods" и "unlike class methods". Об отличиях от чегоздесь говорится, по-твоему? Об отличиях от каких другихклассовых методов?

Вот от тех самых, которые существовали всегда, но только не были static. А ты почему-то решил, что их вообще никогда не было.

А они были. Всегда. Ты просто этого не знал. Но почему-то решил, что можешь спорить с людьми, которые знают и понимают гораздо больше тебя. И напорол чуши.

Подумай. И не ламерствуй более.


Страницы:   1 2 ... 21 22 23 24 25 26 27 ... 32 33

Наверх

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