Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 230
от 06.09.2005, 20:24

Администратор:Калашников О.А.
В рассылке:Подписчиков: 235, Экспертов: 51
В номере:Вопросов: 6, Ответов: 32


Вопрос № 25622: Как организовать взаимодействие программы с dll, чтобы они использовали общие экземпляры классов? Поясню на примере. Пусть имеется приложение с мультиязычным интерфейсом. Имеется класс TIntr, который отвечает за перевод. Компоненты регистрируются для...
Вопрос № 25625: Здраствуйте уважаемые эксперты, появилась тупая проблема в работе с компонентом PopupMenu , ну написать код это могу, но как запускаю приложение как мне зделать чтобы этот popupmenu открылся, я думал надо нажать на форме левой кнопкой или правой, но ...
Вопрос № 25626: Доброго Времени суток, дорогие Эксперты! Подскажите, пожалуйста, как объявлять самодельную процедуру, если в ней должны использоваться помимо глобальных переменных ещё и параметры различных объектов типа: Panel, Edit и др....
Вопрос № 25641: Здравствуйте, уважаемые эксперты! Давно вам не писал, поэтому накопилось сразу несколько вопросов. 1. Можно ли сделать, чтобы элементы RadioButton включались независимо друг от друга, при условии, что все они в одном контейнере? 2. Возмо...
Вопрос № 25648: Добрый день! Подскажите как мне настроить BDE, чтобы можно было работать с DBF – файлами. Кодировка, видимо, Windows, русские буквы изображены неверно. В BDE Administratore менял Default Driver на Foxpro и Dbase в Init, LangDriver пробовал различ...
Вопрос № 25675: Здраствуйте уважаемые эксперты, появился еще один вопрос, скачал платный компонент но некупил его, когда пишу програму, всё нормально, но потом когда уже запускаю *.exe фаил этой програмы то выбивает ошибку "извините но эта програма использует н...

Вопрос № 25.622
Как организовать взаимодействие программы с dll, чтобы они использовали общие экземпляры классов? Поясню на примере. Пусть имеется приложение с мультиязычным интерфейсом. Имеется класс TIntr, который отвечает за перевод. Компоненты регистрируются для перевода например так: Button1.Caption := intr.GetString('Cancel', Button1). Есть функция смены языка, которая пробегается по всем зарегистрированным компонентам и меняет им язык, например так:
for _:= 0 to CompList.count - 1 do
begin
if CompRecord(CompList.item[_]^).Component is Tbutton then TButton(CompRecord(CompList.item[_]^).Component).Caption := getnewString(CompRecord(CompList.item[_]^).str);
//---
end;
Смена языка может происходить как вызовом из DLL, так и вызовом из основной программы, при этом язык должен смениться для всех зарегестрированных компонент. Если использовать разные экземпляры класса для программы и для DLL, то получится перевод только одной части (или программы или DLL - смотря что вызвали). Поэтому необходимо использовать один экземпляр класса. Тут то и возникают проблемы. В DLL я объявил переменную intr : TIntr и процедуру
procedure SetIntr(Intern: Tintr);
begin intr := Intern end;
Вызываю из основной программы так (handle dll и процедуры получил):
SetIntr(myintr);
Класс вроде передаётся, но дальнейшая его работа по крайней мере очень странна, особенно при вызовах из DLL. Пытался эксперементировать с собачками (@intr := @intern или SetIntr(@myintr)) - ничего не получается.
Не сильно хочется переходить на передачу процедур и функций (НЕ МЕТОДОВ классов) - т. к. достаточно серьёзно усложнит код.
Может есть какие идеи у кого? Буду очень благодарен.
P. S. К примеру можно не привязываться, т. к. это просто пример. Интерисует, как это сделать. Буду благодарен небольшому исходнику, который демонстрирует подобную ситуацию. Спасибо
Отправлен: 31.08.2005, 22:08
Вопрос задал: mvp (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: John Freeman
Здравствуйте, mvp!
Пардон, опять в твоём примере возвращаемся к юниту ShareMem, как говорится RTFM ShareMem...
---------
Ik bin ulien spiegel!
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 31.08.2005, 22:44
Оценка за ответ: 3

Отвечает: Anefedov
Здравствуйте, mvp!
Напишите общий интерфейс работы с копмонентой и все остальные классы наследуйте от него.
Ответ отправил: Anefedov (статус: 3-ий класс)
Отправлен: 01.09.2005, 11:57
Оценка за ответ: 3


Вопрос № 25.625
Здраствуйте уважаемые эксперты, появилась тупая проблема в работе с компонентом PopupMenu , ну написать код это могу, но как запускаю приложение как мне зделать чтобы этот popupmenu открылся, я думал надо нажать на форме левой кнопкой или правой, но ничего не пройсходит. Подскажите как открыть этот popupmenu в запущеном приложении? Я знаю что вопрос глупый но пожалуйста ответте понятливо.
Отправлен: 31.08.2005, 23:19
Вопрос задал: Станислав (статус: 1-ый класс)
Всего ответов: 12
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Козлов Николай Николаевич
Здравствуйте, Станислав!
Попробуй

popupmenu1.Popup(x,y);

где

x,y: integer;
Ответ отправил: Козлов Николай Николаевич (статус: 1-ый класс)
Отправлен: 31.08.2005, 23:43
Оценка за ответ: 5

Отвечает: Zubex
Здравствуйте, Станислав!
Обработать событие OnMouseDown следующим образом:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var pt:TPoint;
begin
GetCursorPos(pt);
if Button=mbRight then PopupMenu1.Popup(pt.X, pt.Y);
end;

Можно и так:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var pt:TPoint;
begin
pt.X:=X;
pt.Y:=Y;
pt:=ClientToScreen(pt);
if Button=mbRight then PopupMenu1.Popup(pt.X, pt.Y);
end;

Ответ отправил: Zubex (статус: 2-ой класс)
Отправлен: 01.09.2005, 01:28
Оценка за ответ: 5

Отвечает: Силантьев Евгений Александрович
Здравствуйте, Станислав!
См. приложение. Меня открывается при нажатии ПРАВОЙ кнопки мыши и возле её курсора!

Приложение:

---------
The world is mine! :)

Ответ отправил: Силантьев Евгений Александрович (статус: 5-ый класс)
Отправлен: 01.09.2005, 02:19
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Станислав!
У всех видимых компонентов есть свойство - PopupMenu. Если Вы присвоите ему Ваше меню, то оно будет открываться по клику правой кнопки мыши.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 01.09.2005, 10:17
Оценка за ответ: 5

Отвечает: Denis Hakimov
Здравствуйте, Станислав!
Укажите в свойстве "PopupMenu" нужного вам компонента (например главной формы) ваше меню, и теперь оно будет появлятся по нажатию на правую кнопку мыши на этом компоненте.
Ответ отправил: Denis Hakimov (статус: 2-ой класс)
Отправлен: 01.09.2005, 10:18
Оценка за ответ: 5

Отвечает: Полищук Владислав Игоревич
Здравствуйте, Станислав!
1. Необходимо в свойстве компонента, на котором Вы хотите вызывать меню, в свойстве PopupMenu, указать созданный Вами компонент меню.
2. если пункт 1 не подходит по каким-либо причинам, то у компонента PopupMenu, есть метод Popup, который должен принудительно раскрывать меню в нужный Вам момент.
С уважением, Владислав

---------
Чтобы вчера не случилось, радуйся новому дню
Ответ отправил: Полищук Владислав Игоревич (статус: 2-ой класс)
Отправлен: 01.09.2005, 11:08
Оценка за ответ: 5

Отвечает: Anefedov
Здравствуйте, Станислав!
Нужно связать визуальный объект и Попа п меню. Для этого в свойствах визуального объекта указать значение PopupMenu.
Вопрос не глупый - если Вы только начинаете программировать :-)
Ответ отправил: Anefedov (статус: 3-ий класс)
Отправлен: 01.09.2005, 11:49
Оценка за ответ: 5

Отвечает: Ерёмин Андрей
Здравствуйте, Станислав!
У самого PopupMenu есть функция Popup(x,y: integer), которая открывает меню в указанной точке экрана. Например:

PopupMenu1.Popup(Form1.Left+100,Form1.Top+100);
---------
Мышка побежала, xвостиком махнула - cервер упал...
Ответ отправил: Ерёмин Андрей (статус: Практикант)
Отправлен: 01.09.2005, 11:59
Оценка за ответ: 5

Отвечает: newinfo2005
Здравствуйте, Станислав!
Оч просто.
ПОЧТИ,в каждом компоненте есть свойство PopupMenu или что-то в этом роде,так вот если у тебя уже есть настроенный popup то просто выбери из списка нужный тебе попуп и все.
Кстати этот попуп будет открываться на том компоненте к которому ты привязал,то есть задал это свойство.
---------
Хочу стать умным и...много денег и халявного инета.
Ответ отправил: newinfo2005 (статус: 5-ый класс)
Отправлен: 01.09.2005, 12:17
Оценка за ответ: 5

Отвечает: Lector
Здравствуйте, Станислав!
У любого визуального компонента есть сойство PpopupMenu. Сделайте его равным вашему меню. Тогда оно заработает при нажатии на компоненте правой кнопкой мыши.
Удачи вам и саще читайте справку.
---------
Хочешь помочь дураку - сам дурак
Ответ отправил: Lector (статус: 2-ой класс)
Отправлен: 01.09.2005, 13:50
Оценка за ответ: 5

Отвечает: Ujin Antikvar
Здравствуйте, Станислав!
А ты присоединил это popupmenu к форме, если нет то тогда понятно почему он не появляется при нажетии левой кнопки мыши.
А присоединить можно так в Object Inspectore у формы есть такой пункт popupmenu в нем и укажи свое popupmenu.
Вот и все наслаждайся его работой.
---------
Не зацикливайся на достигнутом, а двигайся в перед
Ответ отправил: Ujin Antikvar (статус: 1-ый класс)
Отправлен: 01.09.2005, 16:08
Оценка за ответ: 5

Отвечает: Delphin
Здравствуйте, Станислав!
Вот так:
Mnu_PopUp.PopUpComponent := Frm_Main;
Mnu_PopUp.PopUp( Mouse.Point.X, Mouse.Point.Y );
---------
Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: 9-ый класс)
Отправлен: 03.09.2005, 21:06


Вопрос № 25.626
Доброго Времени суток, дорогие Эксперты! Подскажите, пожалуйста, как объявлять самодельную процедуру, если в ней должны использоваться помимо глобальных переменных ещё и параметры различных объектов типа: Panel, Edit и др.
Отправлен: 01.09.2005, 00:03
Вопрос задал: Puld (статус: Посетитель)
Всего ответов: 8
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Bob Johnson
Здравствуйте, Puld!
Передай ей указатель на форму, где находятся эти объекты:
procedure test (form : TForm);
begin
form.Panel1.Hide ();
end;
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 01.09.2005, 00:53

Отвечает: Zubex
Здравствуйте, Puld!

Так и объявлять:

procedure Form1.Proc1(Pnl: TPanel;Edt:TEdit);
begin
Pnl.Enable:=True;
Edt.Text:='Твой текст';
end;

Соответственно вызов:
Proc1(Panel1, Edit3);
Ответ отправил: Zubex (статус: 2-ой класс)
Отправлен: 01.09.2005, 01:15

Отвечает: Силантьев Евгений Александрович
Здравствуйте, Puld!
Объявление:
procedure Proc(Panel: TPanel; Edit: TEdit; Text: String);

Сама процедура:
procedure TForm1.Proc(Panel: TPanel; Edit: TEdit; Text: String);
begin
Panel.Align:= alBottom;
Edit1.Text:= Text;
end;

Вызов:
Proc(Panel1, Edit1, 'TEXT');
---------
The world is mine! :)
Ответ отправил: Силантьев Евгений Александрович (статус: 5-ый класс)
Отправлен: 01.09.2005, 02:30

Отвечает: Samum
Здравствуйте, Puld!
Не очень точно выразились, что вы хотите получить. Если проблема в том, как передать процедуре какой-нибудь объект, то надо лишь узнать тип этого объекта (например, у панелей это TPanel и т.п.) Затем в объявлении процедуры написать
procedure MyProc( aPanel: TPanel);
begin
// действия над aPanel
end;
Все ваши действия над aPanel отразятся на объекте, который вы передали в качестве параметра.
Иногда начинающие сталкиваются с такой проблемой - создают глобальную процедуру (не член класса формы) и пытаются из нее получить доступ к контролам на форме простым указанием их имен (напр.
procedure MyGlobalProc;
begin
// edit1 расположен на форме Form1
// и Вместо
Form1.Edit1.Text := 'text'; // пишут просто Edit1.text
end;
Это, кажется, основные проблемы с использованием объектов в процедурах.
---------
Если бы программистам за их ошибки отрывали части тела, то в конце концов им пришлось бы использовать голову!
Ответ отправил: Samum (статус: Специалист)
Отправлен: 01.09.2005, 09:16

Отвечает: sir henry
Здравствуйте, Puld!
Что значит "параметры различных объектов"? Эти объекты передаются в процедуру в качестве параметров? В процедуре используются свойства этих объектов?
Уточните пожалуйста.
Как хотите, так и объявляйте. Ее можно сделать частью класса (это считается хорошим тоном), однако,если Вы ее объявите как самостоятельную часть, то тоже ничего страшного, только придется имя компонента расположенного в другом классе прописывать полностью, например Form1.Edit1.Text.
Если процедура будет использоваться только внутри класса, то ее необходимо объявлять в секции private (тогда она будет доступна только внутри класса) или protected (тогда проца будет доступна и потомкам данного класса, но опять же только для внутреннего употребления).
Тот же эффект будет достигнут, если процедура (не член класса) не будет объявлена в секции interface, а только в implementation.
***************
1. Объекты передаются в качестве параметров.
Работаете с ними так же как и с обычными объектами:
Procedure MyProc(MyEdit: TEdit);
Begin
MyEdit.Text:='Какой-либо текст...';
End;
2. Использование свойства объектов в процедуре.
Необходимо, чтобы в Вашей процедуре эти объекты были видны. Если процедура расположена в другом модуле, то в списке Uses должен быть указан модуль с используемыми объектами.
Если процедура в том же модуле, что и объекты, то проблем никаких нет:
TMyForm=class(TForm)
Edit1: TEdit;
Edit2: TEdit;
...
Procedure MyProc;
...

Implementation

Procedure TMyForm.MyProc;
Begin
Edit2.Text:=Edit1.Text;
End;
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 01.09.2005, 10:40

Отвечает: Полищук Владислав Игоревич
Здравствуйте, Puld!
Не совсем понял Вашу проблему: при объявлении любой функции можно указать в
качестве параметров типы компонент
procedure P (aPanel:TPanel; aEdit:TEdit);
если Вы объявляте это в отдельном файле, то следует в разделе uses подключить модули содержащие объявления данных компонент (какие - смотри в Хелпе).
Вот и все. Или я неправильно понял ворос - тогда уточните.
С увжением, Владислав.

---------
Чтобы вчера не случилось, радуйся новому дню
Ответ отправил: Полищук Владислав Игоревич (статус: 2-ой класс)
Отправлен: 01.09.2005, 11:00

Отвечает: Anefedov
Здравствуйте, Puld!
Нет никаких проблем. Объекты глобального контекста будут видны в твоей локальной процедуре.
Ответ отправил: Anefedov (статус: 3-ий класс)
Отправлен: 01.09.2005, 11:44

Отвечает: Ерёмин Андрей
Здравствуйте, Puld!
В таком случае её следует объявлять от имени формы, причём дважды: в разделе type формы (вначале модуля) и в implementation. Ниже пример. Строки, которые нужно добавить выделены зелёным цветом:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure MyProcedure(Param1, Param2: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('Test');
end;

procedure TForm1.MyProcedure(Param1, Param2: Integer);
begin
Param1:=Param1 * Param2;
Param2:=Param1 + Param2;
end;


end.

---------
Мышка побежала, xвостиком махнула - cервер упал...
Ответ отправил: Ерёмин Андрей (статус: Практикант)
Отправлен: 01.09.2005, 12:04


Вопрос № 25.641
Здравствуйте, уважаемые эксперты!
Давно вам не писал, поэтому накопилось сразу несколько вопросов.
1. Можно ли сделать, чтобы элементы RadioButton включались независимо друг от друга, при условии, что все они в одном контейнере?
2. Возможно ли, чтобы несколько полей Edit и MaskEdit откликались на одно событие(например, OnExit), при условии, что ActionList был уже использован для одного из них при том же событии?
3. Извиняюсь за такой вопрос, но как мне получить результат такого выражения: ni:=ni+((intpower(length(diap),t))*(t+2))div(1024*1024), где-
t,ni:integer;
diap-строка в диапазоне от 10 до 50.
Компилятор все время ругается "Несовместимость типов", я его понимаю, но как привести тип Integer к Extended, не знаю:(
Заранее, всем большое спасибо!!!
Отправлен: 01.09.2005, 10:44
Вопрос задал: Sourse (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Anefedov
Здравствуйте, Sourse!
Вопрос 1: Не понятно, зачем это делать. Используй CheckBox.

Вопрос 2: Можно. Сначала задаете процедуру для первого поля. А затем для второго поля выбираете эту же процедуру. Когда выбираете событие на закладке Events, появляется кнопка для выпадающего списка. Нажимаете на неё и выбираете процедуру. В приложении видно, что в файле формы (расширение .dfm) для полей Edit1 и Edit2 задана оддинаковая процедура для события OnExit.

Вопрос 3: Используй функцию Round. ni:=ni+(Round(intpower(length(diap),t))*(t+2))div(1024*1024)

Приложение:

Ответ отправил: Anefedov (статус: 3-ий класс)
Отправлен: 01.09.2005, 11:34
Оценка за ответ: 5
Комментарий оценки:
По поводу 1 вопроса, это надо для внешнего вида программы, так как CheckBox был уже многократно использован.
2. Спасибо, за совет и исходник.
3. Помогло:)

Отвечает: Denisss
Здравствуйте, Sourse!
1. RadioButton сделана именно для того, чтобы переключаться между собой в определенном контейнере, потому, ответ: нет. Единственное, что Вы можете сделать, так это поставить на форму несколько панелей, установить им свойства Caption = ''; BevelInner, BevelOuter = bvNone; На одну панель поместить одну группу, на другую - вторую группу. Но не забывайте, что кнопки RadioButton предназначены для работы в группе и пользователь это знает и к этому привык. Не делайте ему неудобств - это пользователям вряд ли понравится. Компонента должна работать так, как от нее этого ждут!
2. Возможно.
3. Округляйте с помощью функций Round или Trunk. Например,
ni:=ni+Trunk(((intpower(length(diap),t))*(t+2))div(1024*1024));

PS
для увеличения быстродействия данной функции, могу предложить следующее решение:
ni:=ni+(Trunk(((intpower(length(diap),t))*(t+2))) shr 20);
Дело в том, что самая длительная арифметическая операция - деление, операция сдвига вправо (shr) гораздо быстрее. Тем более, что Вы делите на число 2 в 20-й степени (т.е. 1024=2 в 10-й степени, т.к. Вы их перемножаете, то получаете 20-ю степень).
Т.е., например, деление на 4 (div 4) можно заменить на сдвиг вправо на два разряда (shr 2). Результат будет одинаковым, но время вычисления будет заметно меньше.
Для умножения на степени двойки можно применять функцию shl - сдвиг влево, что также является более быстрым решением, нежели перемножение.

Удачи!
Ответ отправил: Denisss (статус: Студент)
Отправлен: 01.09.2005, 14:57
Оценка за ответ: 5
Комментарий оценки:
1. Спасибо за совет, учту.
2. Исчерпывающий ответ:)
3. Понял.
За совет, относительно увеличения быстродействия, отдельное большое спасибо! Я об этом как-то не подумал.


Вопрос № 25.648
Добрый день!
Подскажите как мне настроить BDE, чтобы можно было работать с DBF – файлами. Кодировка, видимо, Windows, русские буквы изображены неверно. В BDE Administratore менял Default Driver на Foxpro и Dbase в Init, LangDriver пробовал различный, но без толку. В SQL Explorer-е выбираю Standard, затем Foxpro при создании нового Alias-a.
Отправлен: 01.09.2005, 11:55
Вопрос задал: Пономарь Александр Николаевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Anefedov
Здравствуйте, Пономарь Александр Николаевич!
Есть два варианта.
1. При чтении из DBF перекодировать все символы. Процедура в приложении.
2. Работать через ADOConnection. Недостаток ADO - не получится выбрать произвольный файл из произвольной директории. (хотя и эту проблему можно решить). Будут вопросы по ADO - пиши.

Приложение:

Ответ отправил: Anefedov (статус: 3-ий класс)
Отправлен: 01.09.2005, 12:08
Оценка за ответ: 5

Отвечает: Полищук Владислав Игоревич
Здравствуйте, Пономарь Александр Николаевич!
BDE - закладка Configugation-> Drivers-> Native-> DBBase, поле Langdiver
выбираешь ansi, для Win - кодировки, dBaseRus cp866 - для Dos
С уважением, Владислав
---------
Чтобы вчера не случилось, радуйся новому дню
Ответ отправил: Полищук Владислав Игоревич (статус: 2-ой класс)
Отправлен: 01.09.2005, 12:34
Оценка за ответ: 5

Отвечает: Zubex
Здравствуйте, Пономарь Александр Николаевич!

Можно самому перекодировать из Win в Dos и наоборот:

function WinToDos(const Str :String) :String;
begin
SetLength(Result, Length(Str));
CharToOemBuff(PChar(Str), PChar(Result), Length(Str));
end;

function DosToWin(const Str :String) :String;
begin
SetLength(Result, Length(Str));
OemToCharBuff(PChar(Str), PChar(Result), Length(Str));
end;
Ответ отправил: Zubex (статус: 2-ой класс)
Отправлен: 01.09.2005, 15:52
Оценка за ответ: 5


Вопрос № 25.675
Здраствуйте уважаемые эксперты, появился еще один вопрос, скачал платный компонент но некупил его, когда пишу програму, всё нормально, но потом когда уже запускаю *.exe фаил этой програмы то выбивает ошибку "извините но эта програма использует незарегистрированый компонент" нажимаю ок и програма запускается, вопрос такой можно ли написать в програме чтото типа "if какаято ошибка then отключить и непоказывать её", и поместить это в событие oncreate?
Помогите пожалуйста.
Заранее спасибо.
Отправлен: 01.09.2005, 20:22
Вопрос задал: Станислав (статус: 1-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: John Freeman
Здравствуйте, Станислав!
Cracklab.ru форум, в запросы на ... , ответ на вопрос - нельзя, а на сайт зайди, попроси, может даже помогут...
---------
Ik bin ulien spiegel!
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 01.09.2005, 20:53

Отвечает: Силантьев Евгений Александрович
Здравствуйте, Станислав!
Не уверен что возможен тот вариант который предлагаете вы, так как скорее всего никакая ошибка не возникает!
Я предлагаю просто программно закрывать это окно! Я имею в виду находить хэндл кнопки и посылать ей сообщение о нажатии. Скажем, оформить это можно в сообщении Таймера.
Ну скажем так
1. Производим поиск хэндла кнопки.
2. Если он существует, то посылаем сообщение кнопке о нажатие и отключаем таймер.
А в OnCreate запускаем таймер (интервал таймера надо поставить поменьше).
Программный код не привожу но если в чем-то не разберетесь - пишите попробую помочь!
Успехов!!!
---------
The world is mine! :)
Ответ отправил: Силантьев Евгений Александрович (статус: 5-ый класс)
Отправлен: 01.09.2005, 22:41

Отвечает: sir henry
Здравствуйте, Станислав!
Немного не так.
Специально для отлова ошибок в Дельфи есть конструкция TRY...EXCEPT...END. Выглядеть это будет примерно так:
TRY
Использование компонента
EXCEPT
Здесь обработка возникшей ошибки (если возникла), например отключение или удаление компонента
END
Больше никак. Если Ваш незарегестрированый компонент предполагает его отключение, значит пишете код отключения. В методе Create формы Вы можете отслеживать дату окончания действия компонента и если дата истекла, то Вы его отключаете (если компонент поддерживает отключение) или удаляете YourComponent.Free. Если компонент поддерживает видимость и невидимость, то можно написать YourComponent.Visible:=False.
Что-либо кокретное сказать трудно. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 02.09.2005, 11:03

Отвечает: Romodos
Здравствуйте, Станислав!
Это у вас, скорее не ошибка, а так называемый NAG выплывает, т.е. MessageBox или какой-то диалог.
Вообще-то надо платить за компоненты, но не буду читать мораль,
надо посмотреть на компонент. У вас наверняка нет исходников, а только dcu файл, так что вы вряд ли что-то сможете сделать
---------
FAQ me off!
Ответ отправил: Romodos (статус: 4-ый класс)
Отправлен: 02.09.2005, 13:02

Отвечает: Werewolf
Здравствуйте, Станислав!
Бросте на форму компонент TApplicationEvents напишите обработчик его событию OnException
Про него написано в справке.
Ответ отправил: Werewolf (статус: 6-ой класс)
Отправлен: 04.09.2005, 03:19


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное