Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (до версии 2009) - часть 6

Автор: Frodo_Torbins
Дата сообщения: 18.07.2010 13:46
Bonivur
Цитата:
AkelPad и WordPad
У обоих есть автоопределение кодировки. Но в акельпаде можно открыть файл как 1251.

EugeneBoss3
А вы знатный партизан Ану быстро колитесь что у вас написано в строке с "FTimer.OnTimer :="?
Автор: EugeneBoss3
Дата сообщения: 19.07.2010 01:06
Frodo_Torbins

Цитата:
в строке с "FTimer.OnTimer :="?

написано FTimer.OnTimer := TimerEvent; // процедуру при сработке таймера

constructor TMyLabel.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
...
FTimer := TTimer.Create(Self); // создаем таймер
FTimer.Interval := FInterval;
FTimer.OnTimer := TimerEvent; // процедуру при сработке таймера
FTimer.Enabled := False;
...

// Вот моя процедура
procedure TMyLabel.TimerEvent(Sender: TObject);
begin
Sleep(FInterval); ???
// Генерируем событие OnTime компонента
if Assigned(FOnTimer) then FOnTimer(Self);
end;
Автор: Bonivur
Дата сообщения: 19.07.2010 08:41
EugeneBoss3
Вам надо, чтобы при событии OnMouseEnter происходила задержка? Потому, что судя по [more=этому куску кода]

Код: [no]procedure TMyLabel.CMMouseEnter(var Message : TMessage);
begin
// запускаем таймер
FTimer.Enabled := True;
inherited;
MouseEnter;
end;[/no]
Автор: EugeneBoss3
Дата сообщения: 19.07.2010 10:21
Bonivur

Цитата:
Вы этот FInterval где задаете? Почему не работаете через свойства?

Я не привожу весь код компонента т.к. он большой. Естественно FInterval - переменная для свойства таймера Interval. Sleep вызывает задержку всего приложения, а мне нужно чтобы при вхождении мыши в область компонента сначала срабатывала задержка, а затем после обработки таймера выполнялся код OnMouseEnter.
Автор: Bonivur
Дата сообщения: 19.07.2010 13:03
EugeneBoss3
Ну вот [more=примерно так]

Код:
//код компонента без регистрации (создается в run-time) так как это просто пример
unit Label1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

var Timer: TTimer;

type
TMyLabel = class(TCustomLabel)
private
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
protected
procedure TimerEvent(Sender: TObject);
public
{ Public declarations }
constructor Create(AOwner:Tcomponent);override;
published
{ Published declarations }
end;


implementation

constructor TMyLabel.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
Caption := 'Old caption';
Timer:=TTimer.Create(self);
Timer.Enabled:=false;
Timer.OnTimer:=TimerEvent;
Timer.Interval:=1000; // выставляете нужную задержку
end;

procedure TMyLabel.CMMouseEnter(var Message : TMessage);
begin
if Assigned(FOnMouseEnter)
then FOnMouseEnter(Self);
Timer.Enabled := true;
end;

procedure TMyLabel.CMMouseLeave(var Message : TMessage);
begin
if Assigned(FOnMouseLeave)
then FOnMouseLeave(Self);
Timer.Enabled := false;
end;

procedure TMyLabel.TimerEvent(Sender: TObject); //действие для примера, изменяем Caption
begin
Caption := 'New caption';
end;

end.
Автор: AlexIntegral
Дата сообщения: 19.07.2010 19:10
В Orbit, если вызвать модальное окно (Добавить URL), то можно заметить что кнопка ОК всегда находится в фокусе, даже если перемещаться по эдитам, как такое можно реализовать на делфи?

Автор: psa1974
Дата сообщения: 19.07.2010 20:23
Bonivur

Цитата:
нужно ли высвобождать TStringList методом Free?

Все что создается руками, руками должно и освобождаться. Безусловно, при завершении работы программы вся память,распределенная под объекты программы освободится так или иначе, но во время работы программы утечки памяти неизбежны, если объекты не освобождать.
Другой вопрос, что все потомки от TComponent при собственном разрушении могут самостоятельно разрушать объекты, владельцами которых они являются, т.е. те объекты (также потомки от TComponent), в конструкторе которых они указаны в качестве параметра AOwner. Но TStringList к таким объектам не относится - им никакой компонент не может завладеть.


Цитата:
Просто я видел несколько кусков кода, где этого Free не было.

Где именно? Хоть один пример из ВСЛ, пожалуйста...
Автор: Bonivur
Дата сообщения: 19.07.2010 21:25
psa1974
Спасибо за ответ. Хотя если мы создаем в ран-тайм Button мы же ее не освобождаем. Так что вернее сказать, освобождаем те объекты у которых нет Owner'a.


Цитата:
Где именно? Хоть один пример из ВСЛ, пожалуйста...

Примеры подобные видел в сети. Сейчас уже не помню где, но проскакивало пару раз. А что такое ВСЛ?
Автор: psa1974
Дата сообщения: 21.07.2010 01:01
Bonivur

Цитата:
Хотя если мы создаем в ран-тайм Button мы же ее не освобождаем. Так что вернее сказать, освобождаем те объекты у которых нет Owner'a.

Верно, но тут есть нюансы. В отличие от невизуальных компонентов, визуальный компонент, например, тот же Button, может не иметь владельца (Owner = nil), при этом если установлено значение его свойства Parent, компонент нормально будет функциклировать. Кроме того, он будет разрушен родителем при разрушении самого родителя Т.е. для визуальных компонентов происходит эдакое дублирование - при разрушении визуального компонента с одной стороны владелец уничтожает компоненты, которыми владеет, с другой стороны визуальный компонент уничтожает всех своих детей. Ну а если ни Owner, ни Parent не определен, визуальный компонент надо разрушать руками.

Цитата:
А что такое ВСЛ?

Ну, батенька... ВСЛ - или если правильно написать - VCL - Visual Component Library, или в переводе на русский - библиотека визульных компонентов. Это вся палитра компонентов Дельфи... Как минимум.
Просто VCL - для меня единственно убедительный пример правильного кодинга. Все остальное, что попадается в сети, надо сто раз проверять.
Автор: lezval
Дата сообщения: 21.07.2010 06:22
AlexIntegral
В стандартных диалогах в дельфи это тоже реализовано.
Автор: salexn1
Дата сообщения: 21.07.2010 09:33

Цитата:
AlexIntegral

Просто у кнопки выстави свойство Default = true
Автор: pavlo1704
Дата сообщения: 21.07.2010 11:40
Здравствуйте, помогите пожалуйста, Создаю приложение в Делфи , работающее с БД MS Access через ADO. Вопрос: Можно ли вывести на форму или, например в статусБар строку UserName из окна LoginPrompt. Если можно, то как это сделать? Спасбо! Т.Е. Можно ли испоьзовать "User ID" из ADOConnection?
Автор: lezval
Дата сообщения: 21.07.2010 15:59
pavlo1704
У adoconnection есть свойство connectionstring в которой хранится строка подключения. Напрямую получить user id нельзя (в дельфи7), но можно вырезать из строки соответствующее значение.
Автор: pavlo1704
Дата сообщения: 21.07.2010 16:05
Спасибо "lezval"! Насчет вырезать - не подумал, попробую.
Автор: AviDen
Дата сообщения: 22.07.2010 14:08
pavlo1704, lezval

Код: s:= ADOConnection1.ConnectionObject.Properties['User ID'].Value;
Автор: Czechoslovak
Дата сообщения: 22.07.2010 15:05
AviDen

пробывал , не работает c Access
Автор: Andryshok
Дата сообщения: 22.07.2010 15:10

Цитата:
pavlo1704, lezval

Код:s:= ADOConnection1.ConnectionObject.Properties['User ID'].Value;


Либо
Код: ADOConnection1.ConnectionObject.Properties[1 или 2 ето точно не помню, можно поэксперементировать ].Value
Автор: AviDen
Дата сообщения: 22.07.2010 17:34
Czechoslovak, насчёт аксеса не скажу, я лично с сиквеллом работаю. Но тот факт, что коллекция Properties доступна только после установления соединения, конечно же, учитывался? И да, можно и по номеру попробовать, как предлагает Andryshok. Плюс, я вообще не понимаю, зачем вытаскивать логин из свойств коннекшна, если он и так должен быть известен в приложении, которое устанавливало соединение. Ну, и на худой конец, ведь есть же целая пачка встроенных функций сиквелла типа user_name(), suser_sname(), user, system_user и т.п. - можно подобрать на свой вкус )
Автор: Czechoslovak
Дата сообщения: 23.07.2010 08:43
AviDen
Точно после соединения работает...сорри
Автор: DIMMUA2006
Дата сообщения: 24.07.2010 19:22
Здравствуйте.

Знаю, что такие вопросы обычно вызывают улыбку, но все же - на какой версии Delphi лучше программировать? В данный момент я учусь и уже делаю небольшие коммерческие программки на Delphi 7.0 В принципе функций Delphi 7 мне хватает с головой (а может фантазии не хватает представить, что есть в новых версий).

Но вот задумался, если я разобрался с Delphi 7 может уже идти в ногу со временем и установить CodeGear 2010 или 2009 ? Но, в данный момент я часто использую дополнительные компоненты и заметил, что для старых версий Delphi они чаще бывают бесплатными. Получается, меня все устраивает в Delphi 7, но вот смущает "древность" этой версии и думаю, что в новых версиях все красивее, удобнее и т.д.

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

Может, у кого богаче опыт в программировании, подскажите, стоит ли переходить на новую версию? Или может не обязательно на самую новую, выбрать среднюю версию между ними, скажем Delphi 8 ?
Автор: Frodo_Torbins
Дата сообщения: 24.07.2010 19:54
DIMMUA2006
Нееееет только не Delphi 8/2005, о существовании этих двух лучше вообще забыть Если уж переходить, то либо на D2007 - это последняя ансишная, либо на D2010 - эта просто последняя. Переход на D2009+ потребует разбирательств с юникодом, хотя рано или поздно с ним вам все равно придется столкнутся.
И на счет компонентов разрешите с вами не согласится. Если компонент до сих пор живой и продолжает развиваться, то поддержка последних версий делфи в нем обязательно будет.
Да и на счет литературы тоже. Если с английским хоть немного дружите, то информации столько, что можно читать круглыми сутками не успевая собственно программировать.

С другой стороны у меня на машине сейчас установлены сразу две версии - D7 и D2010. Первая максимально облегчена, ее я использую для того, чтобы быстренько наклацать какую-нибудь демку или проверить идею. А основной является вторая, она и нафарширована по полной программе и грузится соответственно ощутимо дольше.
Автор: psa1974
Дата сообщения: 24.07.2010 21:04
DIMMUA2006
Полностью согласен с Frodo_Torbins.
Добавлю, что программировать можно одинаково успешно и в Дельфи 7 и в Дельфи 2007-2010... И даже в Дельфи 3, например (Дельфи8 - ошибка эволюции, Дельфи 2005 - первый блин в создании студии, соответственно - вышел комом). И, кроме того переход на Дельфи 2007-2010 совсем не означает необходимость сноса Дельфи 7 - поставь рядом, ощути разницу

По крайней мере, у меня стоят 7, 2007, 2010 версии, но после перехода на Дельфи 2006, и далее по мере появления новых версий, я Дельфи 7 ни разу больше не запускал - слишком много в новых версиях дельфей вкусностей появилось как в самой среде, так и в языке, возвращаться на Дельфи 7 как-то мысли даже не возникает (даже чтоб какой-то тестовый проект сделать на коленях) - слишком уж она аскетичная по нынешним меркам, хотя, опять же, с помощью экспертов ее можно привести в "божеский вид"... Короче, для меня Дельфи 7 - замечательная для своего времени среда, но ее время уже кануло в лету.

Литература - этого полно - и книги, и блоги в инете, в том числе русскоязычные; компонентов тоже полно, всё что живо - всё поддерживает новые версии Дельфи (и даже что уже давно не живо и брошено авторами - тоже иногда портируется под новые версии студии умельцами ).

Так что... На мой взгляд под рукой надо иметь Дельфи 7 - "чтоб було" и для душевного спокойствия , Дельфи 2007 как последнюю анси-версию для совместимости (да и проекты с Дельфи 7 на Дельфи 2007 переносятся практически без проблем) и Дельфи 2010 (а вскоре 2011) - чтоб в ногу со временем ...
Автор: DIMMUA2006
Дата сообщения: 25.07.2010 00:20
Frodo_Torbins
psa1974

Спасибо за исчерпывающие ответы, попробую перейти на Delphi 2007, чтоб не так ощутить переход А то сразу такой временной прыжок с 2002 года на 2010, боюсь голова будет забита только изучение интерфейса, а не самими проектами.
Автор: Bonivur
Дата сообщения: 25.07.2010 11:12
DIMMUA2006
Я перешел с Delphi 7 на Delphi 2010 недавно, где-то неделю назад. Почитал книжки Марко Кэнту и все отлично. На семерку уже возвращаться не собираюсь.
Автор: kvazars
Дата сообщения: 25.07.2010 18:38
Bonivur, иногда приходится в любом случае...
Автор: pavlo1704
Дата сообщения: 29.07.2010 15:02
Люди, подскажите, можно ли ADOQuery использовать как предварительный список, т.е. постепенно добавлять записи из таблицы БД , чтобы в последующем можно было удалить одну или несколько записей или все добавленные записи записать в другю таблицу БД, т.е. не сохраняя промежуточный набор в базе. Если кто знает другие варианты реализации, подскажите плиз!
Автор: Coltrain
Дата сообщения: 29.07.2010 17:01
pavlo1704
TClientDataSet поможет. Ну или его аналоги.
Автор: salexn1
Дата сообщения: 29.07.2010 17:55
pavlo1704
Есть такое свойство, как LockType = ltBatchOptimistic - не пошлет на сервер изменения до команды UpdateBatch. Он для твоего случая. Ну или TClientDataSet, TMemoryTable (Rx, Jvl)
Автор: pavlo1704
Дата сообщения: 29.07.2010 19:33
Спасибо Вам! Буду пробовать
Автор: gx90
Дата сообщения: 30.07.2010 06:17
Простите пожалуйста за простой вопрос, я тут новенький.
Подскажите, как набранный текст Object Pascal можно красиво отформатировать (отступы, выравнивания и т.п.)? Это возможно в Delphi или может есть иные программы (типа модуля к редактору far)?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

Предыдущая тема: MPO File


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.