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

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

Автор: volser
Дата сообщения: 18.11.2011 10:15
Coltrain
WNetAddConnection2
Автор: Coltrain
Дата сообщения: 18.11.2011 10:36
wasilissk

Цитата:
Имеется в виду расшаренная папка?

Да. Именно.

Цитата:
Домен?

Тоже верно.

volser

Цитата:
WNetAddConnection2

Спасибо за функцию. Насколько я понял, она подключает расшаренную папку как сетевой диск. Будет ли он виден работающему пользователю через, скажем, проводник?


Автор: wasilissk
Дата сообщения: 18.11.2011 10:42
Coltrain
Tags:
MSDN
LogonUser
ImpersonateLoggedOnUser
RevertToSelf
FileCopy
Автор: Coltrain
Дата сообщения: 18.11.2011 10:44
wasilissk
Спасибо! Пошел курить мануалы.
Автор: Profiles1
Дата сообщения: 18.11.2011 17:29
Прошу помочь скомпилировать в Делфи один пример из NeuralBase, лежит в архиве по пути «neuralbase-1-0\Demo\Hopfield\», нужен .exe . У меня не хватает некоторых компонентов (не шарок в этом деле)
находится тут
Автор: Corsairs
Дата сообщения: 18.11.2011 18:32
Если исходить из списка используемых юнитов
Цитата:
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, NeuralBaseComp, NeuralBaseTypes, Db, DBTables, ExtCtrls, DBCtrls, StdCtrls, ToolWin, ComCtrls;
предполагаю, что ругается на NeuralBaseComp, NeuralBaseTypes Да?
А собственно компонент NeuralBase установлен? (Надо прописать пути к папке с файлами из архива, и установить компоненту (NeuralBase.dpk))
Автор: Profiles1
Дата сообщения: 18.11.2011 18:50
Corsairs, да, ругается на них. Как это сделать то? Нельзя ли напр. через Cкaйп помочь?
Автор: Corsairs
Дата сообщения: 18.11.2011 19:51
Нужно установить скачанную компоненту (т.е. NeuralBase) В принципе в установке подобных компонент ничего особо сложного нет...

Скайпа у меня нет. Можно через icq и teamviewer...
Автор: datato
Дата сообщения: 21.11.2011 21:15
Хотел попробовать написать простенькую прогу (игру), чтобы та по нажатию, к примеру на стрелку влево отодвигала некий обьект вправо (на 20 пунктов) до тех пор, пока значение Left обьекта не станет 800 (граница формы), а если будет равно 800 - то скроет фон.
[more]
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
While Image1.Left <= 800 do
if key=VK_RIGHT then
Image1.Left:=left+20;
until Image1.Left=800
end;
begin
if Image1.Left=800 then
Image2.visible:=false;
end;
end;
end.
[/more]
Если мой код ну ооочень ужасен говнокод, то можете указать на какие-нибудь исходники которые мне помогут?
P.S. Delphi 10 Lite v3.0 (2006)
Автор: Frodo_Torbins
Дата сообщения: 21.11.2011 21:40
datato
Значение Key внутри этого обработчика в пределах одного вызова остается неизменным. Так что while тут абсолютно не катит.
Возможно вам будет интересно почитать вот это: Жизнь и смерть в режиме run-time и это:
Основы работы с Win API в VCL-приложениях (раздел про обработку сообщений).
А от лайта лучше поскорее избавьтесь и поставьте себе полноценную XE2 со справкой. Места она конечно сожрет раз в 10 больше, зато получите полноценную среду и рабочую справку.
Автор: ShIvADeSt
Дата сообщения: 22.11.2011 01:03
А с каких пор конструкция
while do
until ...
является корректной?
Если память не изменяет есть
while do end
repeat until
но никак не то, что написал datato

Судя по всему тут надо прежде чем программировать - вначале синтаксис подучить.
Автор: datato
Дата сообщения: 22.11.2011 05:33
ShIvADeSt,
извиняюсь, у меня вчера ночью мозги не варили, сейчас понимаю какую ерунду написал...
Автор: DmitryKz
Дата сообщения: 27.11.2011 16:04
Наверно, глупый вопрос, но стало интересно:
возможно ли вести мониторинг изменений значения, например, глобальной переменной, как это происходит с событиями компонентов. Условно говоря, что-то вроде OnVaribaleChange? Т. е., понятно, что какой-то код можно и самому написать. Интересует, существуют ли, так сказать, аутентичные, или, по крайней мере, "кошерные" способы...
Примерная ситуация. Глобальная переменная должна получить некий путь - она берет его из реестра, ежели он там не обретается, пользователь сам должен его ввести, через диалог выбора директории. Т. е. существуют два способа получения этого значения. Независимо от этого, полученное значение нужно продублировать в Edit, для его визуализации, так сказать. Т. е. один и тот же код для отображения текста в Edit в программе существует в двух местах. Что уже как-то не нравится. А если кроме Edit значение понадобится дублировать где-то ещё в третий раз, или появится третий способ получения необходимого значения.
Автор: XPerformer
Дата сообщения: 27.11.2011 16:33
DmitryKz
Полагаю, именно поэтому глобальные переменные считаются плохим стилем программирования
Нужно создать класс, который имеет рассылать нотификейшины об изменении свого состояния
Автор: wasilissk
Дата сообщения: 27.11.2011 16:34
DmitryKz

Цитата:
Интересует, существуют ли, так сказать, аутентичные, или, по крайней мере, "кошерные" способы...

Нет, не существует.
Можно установить брейкпоинт на изменение памяти. Можно установить сеттер для поля объекта, а на него повесить событие. Это и является самыми кошерными способами.
Автор: DmitryKz
Дата сообщения: 27.11.2011 16:37
XPerformer
wasilissk
Понял, спасибо, парни, за разъяснение...
Автор: wasilissk
Дата сообщения: 08.12.2011 11:27
Имеется ExceptObject и ExceptAddr. Возможно ли как-то определить где возник эксепшен в защищенном блоке try..except или нет?
EurekaLog и madExcept как-то это определяют и не генерят отчет, если исключение возникло в try..except. EurekaLog и madExcept у меня без исходников, посмотреть не могу.

Ну и в инете есть эврика ентерпрайз версия с исходниками, скачай посмотри.
Автор: ShIvADeSt
Дата сообщения: 09.12.2011 03:42
wasilissk

Цитата:
EurekaLog и madExcept как-то это определяют и не генерят отчет, если исключение возникло в try..except

эврика генерит (по крайней мере у меня), если только не указать, что данное исключение должно обрабатываться rtl.
Автор: wasilissk
Дата сообщения: 09.12.2011 07:06
ShIvADeSt
EurkaLog 6. Advanced options -> Catch Handled exceptions. Если снять галку, в лог не пишет и диалог не показывает.
Ладно, спасибо, буду фулсорц искать.
Автор: A1exSun
Дата сообщения: 09.12.2011 21:21

Код: procedure TForm1.Button12Click(Sender: TObject);
begin
if length(Edit1.Text) > 1 then begin
x := strtofloat(Edit1.Text);
op := '/';
Edit1.Clear;
end
else ShowMessage('Введите первый операнд.');
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
if length(Edit1.Text) > 1 then begin
x := strtofloat(Edit1.Text);
op := '*';
Edit1.Clear;
end
else ShowMessage('Введите первый операнд.');
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
if length(Edit1.Text) > 1 then begin
x := strtofloat(Edit1.Text);
op := '-';
Edit1.Clear;
end
else ShowMessage('Введите первый операнд.');
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
if length(Edit1.Text) > 1 then begin
x := strtofloat(Edit1.Text);
op := '+';
Edit1.Clear;
end
else ShowMessage('Введите первый операнд.');
end;
Автор: akaGM
Дата сообщения: 09.12.2011 21:39
A1exSun

Цитата:
4 одинаковых процедуры, отличаются только присваиваемым значением op. Можно как-то упростить код?

когда "рисуешь" кнопки на форме, заполни поле Tag своими константами (хоть Tag = byte('твой_символ')),
напиши один общий обработчик-метод

procedure TForm1.internal_ButtonClick(Sender: TObject);
begin
...
// здесь получаешь op через Tag со всеми необходимыми преобразованиями
op := (Sender as TButton).Tag;
...
end;

все остальные баттон-обработчики просто зовут его:

procedure TForm1.Button15Click(Sender: TObject);
begin
internal_ButtonClick(Sender);
end;

как проще я не знаю...
Автор: Corsairs
Дата сообщения: 09.12.2011 21:53
Можно без использования Tag - просто передавать в процедуру значение...

procedure BC(s: char);
begin
if length(Edit1.Text) > 1
then
begin
x := strtofloat(Edit1.Text);
op := s;
Edit1.Clear;
end
else
ShowMessage('Введите первый операнд.');
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
BC('+');
end;
Автор: Frodo_Torbins
Дата сообщения: 09.12.2011 21:54
A1exSun
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342
1. А оно не работает?
2. Напишите ему обработчик нажатий клавиш (OnKey*)
3. А оно не работает?
4. Тут два варианта: можно сделать форме KeyPreview=True и написать обработчик нажатий клавиш с учетом текущего сфокусированного контрола. А можно в ActionList понасоздавать экшенов и назначить им те же обработчики что и кнопкам.
Автор: A1exSun
Дата сообщения: 09.12.2011 21:58
Frodo_Torbins

Цитата:
1. А оно не работает?

Цитата:
3. А оно не работает?

Edit1 - disable, мне не нужно чтоб там можно было писать/выделять мышкой и т.п.
То есть я поле использую только для вывода результата, а ввод осуществляется нажатиями кнопок в программе.
Автор: perceptron
Дата сообщения: 09.12.2011 22:09
Упростить МОЖНО:
Сделать 1 обрабочтк OnClick скажем у Button1
А всем остальным Button-ам поставить ссылку на этот же обработчик

Внутри проверять имя батона и op ставить который нужно:


Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Sender is Tbutton then
begin
if TComponent(Sender).Name = 'Button12' then // можно написать (Sender as Tbutton).Name = 'Button12'
op := '/'
else
if TComponent(Sender).Name = 'Button13' then
op := '*'

end;
end;
Автор: Corsairs
Дата сообщения: 09.12.2011 22:10
У меня вот такой вот вопрос:
Я хочу использовать в программе нестандартный диалог. Как я понимаю, для рисования используется редактор ресурсов (кстати, каким лучше всего воспользоваться?), но вот что делать дальше? Как вызвать этот диалог, и как организовать взаимодействие с ним? (т.е. передачу данных в диалог, обработку в диалоге и передачу данных в основную прогу)

Где об этом можно почитать и посмотреть примеры?
Автор: perceptron
Дата сообщения: 09.12.2011 22:15
Очистку Edit по Del - делать нужно в OnКeyDown

Код:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_DELETE) then
Edit1.Text := '';
end;

Автор: A1exSun
Дата сообщения: 09.12.2011 22:18
Frodo_Torbins

Цитата:
ActionList

Список действий?
perceptron

Цитата:
OnКeyDown

При нажатии клавиши?

Где их искать?
Автор: akaGM
Дата сообщения: 09.12.2011 22:26
A1exSun
как правильно сказал perceptron, а я забыл упомянуть, у всех обработчиков надо в инспекторе указать обработчиком твой internal_ButtonClick()
а TForm1.Button15Click() я наверное зря написал...


Corsairs
не
у тебя сколько баттонов столько и
procedure TForm1.Button_ххх_Click(Sender: TObject);
begin
BC('+');
end;
а у меня -- один...

perceptron
у меня всё-таки проще, никаких проверок, а поле tag всё равно есть и хранится в ресурсе формы :)
Автор: Frodo_Torbins
Дата сообщения: 09.12.2011 22:35

Цитата:
Список действий?

Да, каждому итему списка можно назначить горячую клавишу.
OnКeyDown есть у всех контролов (по крайней мере в современных делфях). В вашем случае возможно достаточно будет написать этот обработчик только для формы и выставить ей KeyPreview=True. Но вариант со списком действий тоже неплох.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

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


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