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

» Вопросы по Delphi

Автор: vshersh
Дата сообщения: 23.02.2006 10:55
Schatz
Напиши в OnFormCreate

Код: if not Assigned(ClientFrmMain) then
ClientFrmMain := Self;
Автор: Schatz
Дата сообщения: 23.02.2006 11:33
vshersh

Огромное тебе спасибо, очень помог

Цитата:
А еще лучше твою процедуру StartClient; написать прямо в классе формы. Тогда не будет проблем с доступом к инстансу формы.


проблема решена переносом процедуры в класс формы.
Автор: BABAYKA
Дата сообщения: 23.02.2006 12:36
Привет всем, кто несмотря на всеобщий выходной опять сидит у монитора....тем не менее с праздничком...
Тут вопрос у меня возник наивный, суть его следующая.....имеется главная форма, дополнительная (для ввода логина, пароля) и дата модуль. Обработчик появления доп. формы следующий:

procedure TFEmpl.FormShow(Sender: TObject);
begin
if FLogin.ShowModal=mrOK then
begin
while( not DataModule1.pFIBDatabase1.Connected ) do
begin
DataModule1.pFIBDatabase1.ConnectParams.UserName := FLogin.EdLogin.Text;
DataModule1.pFIBDatabase1.ConnectParams.Password := FLogin.EdPassword.Text;
try
DataModule1.pFIBDatabase1.Connected:=True;
DataModule1.pFIBDataSet1.Active:=True;
Except
ShowMessage('kgff fgfgkfl gkflg klk.');
if FLogin.ShowModal=mrOK then
end;
end;
end;
end;

Все работает.....кроме второй пимпы на доп. форме отвечающей за закрытие всего приложения при невозможности ввести правильные логин и пасс......я накалякал для её события клик Application.Terminate; но естественно приложение не закрывается полностью...начинают последовательно мигать окно ошибки и доп. форма.....Может кто подскажет как корректно закрыть приложение?
Автор: vshersh
Дата сообщения: 23.02.2006 12:47
BABAYKA
Я не понял насчет пимпы... :-D
Но поробуй после Application.Terminate; вызвать Application.ProcessMessages;

а потом все дальнейшие обработки начинай с

Код:
if Application.Terminated then
Exit;

// тут пишешь код который выполняется в случае номального входа в систему
Автор: BABAYKA
Дата сообщения: 23.02.2006 13:09
vshersh
ссори ... про непонятную пимпу... на доп. форме есть две кнопки: первая ВХОД (подключение к БД) другая ВЫХОД (закрытие всего приложения при невозможности входа)
Ранее я привел описание события появления главной формы (перед появлением вызывается доп. форма с обязательным вводом пароля/ логина если они е корректен выскакивает сооющение об ентом и опять висит доп. форма и так бесконечно. Оборвать этот процесс возможно по клику на кнопку ВЫХОД. Вот с этим и не понятно мне......при Application.Terminate; процесс появления доп. формы и сообщения об ошибке не пропадают , а мигают последовательно на экране.....вот их то и нужно как то убить....
может что то докалякать сюда?
while( not DataModule1.pFIBDatabase1.Connected ) do
т. е. пока не будет установленно pFIBDatabase1.Connected или не произайдет нажатие на кнопку ВЫХОД?
Автор: vshersh
Дата сообщения: 23.02.2006 13:35
BABAYKA
Я бы сделал отображение формы логина до отображения главной формы. А потом бы проверял: если логин прошел, то показываю главную форму -- иначе выход из приложения.
И не надо никаких циклов, можно написать так:


Код: procedure TLoginForm.OKButtonClick(Sender: TObject);
begin
try
// все присваиваем
DB.User := ...
DB.Pass := ...

// проверяем коннект
DB.Connected := True;

// закрываем форму
ModalResult := mrOk;
except
// говорим, что пароль или еще чего-то неверно!
ShowError('Error connecting ...');
ModalResult := mrNone;
end;
end;
Автор: BABAYKA
Дата сообщения: 23.02.2006 14:04
vshersh

Спасибо....сейчас попробую таким путем.....только я что то не понял все таки как установить чтобы LoginForm появлялась первой, как её вызвать..?
Автор: vshersh
Дата сообщения: 23.02.2006 14:14
BABAYKA
ну я же написал -- ShowLoginOK
Автор: BABAYKA
Дата сообщения: 23.02.2006 14:21
да...да.....спасибо.......уже воткнулся и пытаюсь реализовать....

Добавлено:
vshersh

Что то не идет никак.......ругается:

[Error] ULogin.pas(17): Unsatisfied forward or external declaration: 'TFLogin.ShowLoginOK'

т.е. Неудовлетворенная передовая или внешняя декларация: 'TFLogin. ShowLoginOK'

подскажи плиз как её удовлетворить???

Автор: Schatz
Дата сообщения: 23.02.2006 15:43
Доброго времени суток вам.

Еще раз обращусь, своими силами не получилось справиться.
Есть пример от Indy \Indy9Demos\IdTCPDemo\Client
Пытаюсь переложить этот пример на ActivX(OCX)

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

Сейчас столкнулся с тем что:
Есть класс
TClientHandleThread = class(TThread)
private
CB: TCommBlock;
procedure HandleInput;
protected
procedure Execute; override;
end;
Есть Событие ReadData(Data:String);

Вот процедуры класса:

procedure TClientHandleThread.HandleInput;
begin
if CB.Command = 'GetClients' then
MessageDlg ('Список подключеных клиентов'+#13+CB.Msg,
mtInformation, [mbOk], 0)
else
if ??????????????.FEvents <> nil then ??????????????.FEvents.OnDataRead(CB.Msg);
end;

procedure TClientHandleThread.Execute;
begin
while not Terminated do
begin
if not Client.Connected then
Terminate
else
try
Client.ReadBuffer(CB, SizeOf (CB));
Synchronize(HandleInput);
except
end;
end;
end;
Procedure StopClient;

Затык в том что я не знаю как правильно достучаться до FEvents и не совсем уверен в правильном ли направлении я изначально пошел
Автор: vshersh
Дата сообщения: 23.02.2006 16:40
BABAYKA
См. тестовый пример
_http://rapidshare.de/files/13946325/TestLogin.rar.html
Автор: BABAYKA
Дата сообщения: 23.02.2006 16:46
vshersh

отл. работает!.....Большое тебе человеческое спасибо!
Автор: vshersh
Дата сообщения: 23.02.2006 16:59
Schatz

Цитата:
Затык в том что я не знаю как правильно достучаться до FEvents и не совсем уверен в правильном ли направлении я изначально пошел

Не понятно, кто такие у тебя FEvents
А насчет направления - так лучше толком объясни что надо сделать, ато много слов и мало смысла.
Автор: Vitus_Bering
Дата сообщения: 24.02.2006 18:01
Есть текст. файл с данными хотелось бы его добавить в программный файл, и затем обращаться к нему, напр. через LoadFromStream. Как это можно сделать?
Автор: vshersh
Дата сообщения: 24.02.2006 18:06
Vitus_Bering
Если стоят RX-компоненты то в меню Project->Resources можно добавлять данные, а читать при помощи TResourceStream
Автор: Vitus_Bering
Дата сообщения: 24.02.2006 18:14
vshersh
Что такое RX-компоненты ?
Автор: vshersh
Дата сообщения: 24.02.2006 18:18
Vitus_Bering
_http://www.rx.delphiplus.org/
Можно и без них
Идея такая: запихнуть нужные тебе данные в файл ресурса проекта.
Автор: Vitus_Bering
Дата сообщения: 24.02.2006 18:21
vshersh
Спасибо, но как запихнтуть их туда?


Добавлено:
хотелось бы сделать это без RX.
Автор: vshersh
Дата сообщения: 24.02.2006 18:27
Vitus_Bering
Я же говорю это можно сделать при помощи любого редактора ресурсов. Я использовал либо рх либо вижуал студию.
Автор: Vitus_Bering
Дата сообщения: 24.02.2006 18:32
Как это можно сделать средствами Дельфи?
Автор: vshersh
Дата сообщения: 24.02.2006 18:37
Vitus_Bering
IMHO средствами делфи можно только картинки, иконки и курсоры добавить. Если надо бинарные данные без сторонних продуктов не обойтись
(Я говорю о Delphi 7 и ниже)
Автор: Vitus_Bering
Дата сообщения: 24.02.2006 19:39
vshersh
Решение нашлось:
AppControls by UtilMind там есть компонент FileStorage это то, что нужно.
В .ехе сохраняет любые файлы, работать с ними можно, не распаковывая их.
Автор: mainstream
Дата сообщения: 25.02.2006 10:53
Всем привет.
Хочу забомбить компонент, который можно будет в рантайме таскать и ресайзить мышой.
Например как в дельфях, беру, скажем, Panel, ставлю её на форму и могу её таскать.
Т.е. как мне сделать чтобы при наведении мыши менялся курсор, и как рисовать рамку которая показывает будующие размеры контрола(кто её вообще рисует, сам контрол?). Мне пришло в голову только смотреть WM_MOUSEMOVE и по координатам отслеживать когда менять курсор, и таким же образом в паинте рисовать рамку. Может есть более грамотный способ, как вообще это делают?

Заранее спасибо.
Автор: gpi
Дата сообщения: 25.02.2006 12:43
mainstream
Код: procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
if Button=mbRight then
TWinControl(Sender).Perform(WM_SYSCOMMAND, SC_SIZE+8,0)
else
TWinControl(Sender).Perform(WM_SYSCOMMAND, SC_MOVE+2,0);
end;
Автор: mainstream
Дата сообщения: 25.02.2006 13:50
Да блин, так намного удобнее, и самое главное намного меньше кода.
gpi, большое спасибо.
Автор: vshersh
Дата сообщения: 25.02.2006 13:56
mainstream
Глянь еще здесь
Там есть демо-проект
Автор: mainstream
Дата сообщения: 25.02.2006 16:08
vshersh, заценил проджект, там та же идея, но за ответ спасибо.
Автор: Schatz
Дата сообщения: 26.02.2006 07:22
vshersh

Мне необходимо сделать следующее:
Есть TCP сервер(обычное вин приложение), который следит за COM портом и при получении данных передает их всем подключившимся клиентам.
Клиенты - ActivX компанента с TCP слиентом, котоя цепляется к серверу, получает с него данные переданные в ком порт, и отдает их приложению.
Сервер я подготовил, точнее он уже почти в готовом виде был в демках Indy.
А вот с клиентом не могу разобраться.
На клиенте нужно всего лишь три события сделать
1) onDataRead - при получении данных от сервера.
2) onConnect - при соединении с сервером
3) onDisconnect - при потери связи
и один метод SetServerName - установить имя/IP сервера к которому нужно прицепиться


Цитата:
Не понятно, кто такие у тебя FEvents

При создании Active Form в делфе, она прописывает сразу кучу методов и событий связанных с формой, в событиях идет проверка
if FEvents <> nil then FEvents.Событие();
Автор: Apleks
Дата сообщения: 26.02.2006 10:13
Хочу разобрать, переделать и скомпилировать код, который, как мне сказали, точно компилируется под Делфи 4. У себя установил Делфи 8 (Architect Edition).
в папке такие файлы:
ic16.ico ic32.ico
IP.~dp IP.~ds IP.bpg IP.cfg IP.dof IP.dpr IP.dsk IP.RC IP.res
P.~dp P.cfg P.dof P.dpr P.res
После компиляции должно получится два файла: IP.exe и P.dll

Подскажите в двух словах как это скомпилировать! Типа надо проект создать, какие-то файлы подключить....
Автор: sunduk4
Дата сообщения: 26.02.2006 10:44
Apleks
Открываешь IP.dpr, компилируешь, открываешь P.dpr, компилируешь.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Вероятность одинакового CRC32


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