Вопрос № 86972: Я написал на Delphi программу типа Client-Server, которая обменивается сообщениями. Когда программа запускается первый раз, то все работает отлично, а если запускаю по второму разу Client или Sevre? то выдает ошибку: Asyncronous socket error 10061. Ч...Вопрос № 86996: Здравствуйте Уважаемые эксперты.
Пишу, что-то типа курсовой... в общем жалкое подобие курсовой. Училке вот видишь ли захотелось.
В общем. Я к программе подключили компоненты скинов. Все работает (уже делал не одну программу с ними)....Вопрос № 86998: Здравствуйте уважаемые программисты!
Будьте добры подскажите, пожалуйста, почему у меня в приложении при выполнении определенной команды вылетает сообщение об ошибке такого вида:
Мол приложение вызвало ошибку в EOleSysError с сообщением «Не б...Вопрос № 87005: Здравствуйте товарищи!
Подскажите пожалуйста, как узнать координаты в пикселах курсора в
TEdit или TMemo?
Заранее спасибо....Вопрос № 87038: Здраствуйте!!! У меня не большая проблема и поэтому прошу вас помочь, необходимо написать программу, которая будет переводить число десятичной системы в восьмеричную, как целую, так и дробную ее часть, а также программа проверяла, чтобы вводили именн...Вопрос № 87090: Здравствуйте, эксперты.
При симуляции нажатия клавиш мыши я использую Mouse_Event(MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0); или
SetCursorPos(X,Y); SendMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, 0).
Вопрос: как выпольнить симуляцию нажатия клави...Вопрос № 87096: Уважаемые эксперты!
Может у кого-нибудь есть опыт в использовании архивации в программе? Желательно код с использованием ZIP, RAR, 7z. Код может быть и с использованием внешних длл.
Заранее благодарен!...Вопрос № 87114: Доброе утро Уважаемые эксперты.
У меня на форме есть StringGrid, состоящая из 2 столбцов. Как можно построить график функции, заданной точками, координаты которых указаны в StringGrid. Есть ли компоненты для вывода графической информации на экран...Вопрос № 87135: Здравствуйте, уважаемые Эксперты!
Скажите как из программы скопировать саму программу, но с другим именем? Т.е. есть у меня программа proj1.exe, мне надо чтобы она скопировала себя же в proj2.exe.
P.S. Кажется это просто......
Вопрос № 86.972
Я написал на Delphi программу типа Client-Server, которая обменивается сообщениями. Когда программа запускается первый раз, то все работает отлично, а если запускаю по второму разу Client или Sevre? то выдает ошибку: Asyncronous socket error 10061. Что это за ошибка.
Отправлен: 15.05.2007, 13:08
Вопрос задал: Soadbest (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Gladiator
Здравствуйте, Soadbest!
Либо сервер у вас при выходе клиента накрывается либо некорректно отсоединяетесь.
Приложение:
Ответ отправил: Gladiator (статус: 9-ый класс)
Ответ отправлен: 15.05.2007, 14:18
Отвечает: PGM
Здравствуйте, Soadbest!
Эта ошибка появляется если Сервер закрыл сокет и больше не слушает его. Скорее всего вы закрываете на Сервере сокет, а не соединение, при отсоединении клиента, что и приводит к таким результатам.
Вот ниже выдержка из MSDN по ошибке:
Приложение:
Ответ отправил: PGM (статус: 7-ой класс)
Ответ отправлен: 15.05.2007, 17:48
Вопрос № 86.996
Здравствуйте Уважаемые эксперты.
Пишу, что-то типа курсовой... в общем жалкое подобие курсовой. Училке вот видишь ли захотелось.
В общем. Я к программе подключили компоненты скинов. Все работает (уже делал не одну программу с ними). Сейчас же мне захотелось, чтоб программа сама выводила возможные скины на выбор.
Т.е. Есть Меню (TMainMenu) в нем пункт Скин (ID 1 т.к. идет Файл, Скин, Помощь). Написал процедуру, чтоб узнать количество файлов в каталоге с указанным расширением. Работает :)
Далее циклом For через процедуру (в приложении) создаю новые пункты AddSubiIem(GetNextFileName('skins'),1);.
Функция GetNextFileName возвращает следующее имя файла в каталоге. Там тоже все работает.
AddSubItem - тоже работает. Создает меню. Куча новых пунктов, прям как и надо.
Но тут проблемы в количестве 2-х штук:
1) Меню все выводиться сплошняком... т.е. нет прокрутки. У меня сейчас только 30 скинов а могу и больше сделать... будет ужасно смотреться. Во весь экран. Как это можно реализовать... или это я уже что-то забыл изначально в настройках TMainMenu?
2) Разумеется при нажатии на какой-то пунк меню должен загружаться новый скин... как загрузить я знаю. Но я же не знаю сколько у меня будет новых пунктов. И для не созданных пунктов нельзя писать процедуру обработки. Скажите плиз как обработать для них элементарный OnClick?
3) Это так на десерт. Как сделать все новые пункты с флажками? Т.е. на один нажимаешь флажок загорелся, а на дургом убрался.
Приложение:
Отправлен: 15.05.2007, 15:06
Вопрос задал: Сарумян (статус: 5-ый класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 6)
Отвечает: Ерёмин Андрей
Здравствуйте, Сарумян!
2) Чтобы обрабатывать события компонент, созданных динамически, нужно объявить процедуру с аналогичными параметрами и затем присвоить её имя событию созданного компонента. Для того, чтобы узнать, какой пункт нажат, можно, например, использовать свойство Tag - записывать в каждый созданный пункт меню его порядковый номер, который затем легко прочитать. См. пример в приложении. Процедура MenuItemClick - это обработчик события, а по нажатию Button1 создаются 10 пунктов меню. При выборе любого из пунктов в заголовке
окна появляется надпись "Выбран пункт №..."
3) Можно применить ту же самую технологию, что и в п.2 - обрабатывать OnClick.
Желаю удачи!
Приложение:
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор) Россия, Тула WWW:Программирование на Delphi. Помощь, советы, обмен опытом. ICQ: 286837644 ---- Ответ отправлен: 15.05.2007, 15:20 Оценка за ответ: 5 Комментарий оценки: Ох ну и намучался же я, пока понял что к чему... все какие то лишние ошибку выдавал Дельфин. А кстати на счет Tag, он мне не понадобиться :) У меня имя пункта берется
как название файла минус '.skn', т.е. чтоб загрузить скин надо всего лишь дописать к заголовку расширение. А за пищу к размышлению большое спасибо.
Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Сарумян!
1. свежесозданному пункиу меню (каждому 10 например) установите свойство NewItem.Break := mbBreak или
NewItem.Break := mbBarBreak
- следующие пункты мею будут выводится в новом столбце (во втором слусае - между ними будет разделитель)
2. Создаете в любом разделе описания класса процедуру вида
procedure OnSkinClick(Sender: TObject),
в разделе implementation модуля - его реализацию
и каждому свежесозданному пенкту меню устанавливаете обработчик:
NewItem.OnClick := OnSkinClick;
3. NewItem.RadioItem := True;
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 8-ой класс)
Ответ отправлен: 15.05.2007, 15:37 Оценка за ответ: 5 Комментарий оценки: Большое спасибо за ответ. Хотя с флажками придеться еще думать... Да и с выводом разграниченным тоже. Но 5 ставлю, не за то что, дали ответ, а за то что дали пищу для размышления. Куда как лучше самому понять как все работает нежели копи-паст совершать бездумно.
Вопрос № 86.998
Здравствуйте уважаемые программисты!
Будьте добры подскажите, пожалуйста, почему у меня в приложении при выполнении определенной команды вылетает сообщение об ошибке такого вида:
Мол приложение вызвало ошибку в EOleSysError с сообщением «Не был произведен ваызов CoInitialize.»
Ошибка в строке:
ExcelApp:=CreateOleObject('Excel.Application');
Переменная ExcelApp объявлена как Variant, в uses модуля подключены модули ComObj и ActiveX, все как положено при создании Com-объекта. А все это написано в процедуре нажатия кнопки. Если создаю Com-объект в отдельном проекте все ОК. Как быть?
Премного благодарен за ответы.
Отправлен: 15.05.2007, 15:24
Вопрос задал: Bvg82 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 5)
Отвечает: PGM
Здравствуйте, Bvg82!
Потому что стоит явно вызывать метод CoInitialize, когда работаете с COM/Ole объектами "до" любого обращения к COM объекту. А в конце работы вызывать CoUninitialize. Возможно в вашем случае где-то этот вызов неявно присутствует - поэтому при определенных условиях все работает. Имейте также ввиду, что работа с COM объектом из потока, также требует вызова данной пары методов и в потоке, независимо от того вызывали ли вы их в основном приложении.
Ответ отправил: PGM (статус: 7-ой класс)
Ответ отправлен: 15.05.2007, 17:56 Оценка за ответ: 5 Комментарий оценки: Спасибо, что натолкнули на правильную мысль, проблема решилась за 5 секунд, в файле проекта отсутствовала строчка application.initialize При ее добавлении все работает :)
Вопрос № 87.005
Здравствуйте товарищи!
Подскажите пожалуйста, как узнать координаты в пикселах курсора в
TEdit или TMemo?
Заранее спасибо.
Отправлен: 15.05.2007, 15:56
Вопрос задал: _porodox_ (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: ~Steep~
Здравствуйте, _porodox_!
Можно рассчитать: берем позицию курсора на главной форме и вычитаем позицию крайнего левого угла TEdit или TMemo (Top, Left)
--------- Все всегда делаеться к Лучшему!
Ответ отправил: ~Steep~ (статус: 7-ой класс)
Ответ отправлен: 15.05.2007, 16:13 Оценка за ответ: 3
Отвечает: PGM
Здравствуйте, _porodox_!
Если имеется ввиду не мышиный курсор (для него GetCursorPos), а то что называется "каретка" в тексте, то используйте GetCaretPos, он вернет клиентские координаты относительно текущего элемента (т.е. того который в фокусе и в котором мигает "каретка").
Ответ отправил: PGM (статус: 7-ой класс)
Ответ отправлен: 15.05.2007, 18:02 Оценка за ответ: 5
Вопрос № 87.038
Здраствуйте!!! У меня не большая проблема и поэтому прошу вас помочь, необходимо написать программу, которая будет переводить число десятичной системы в восьмеричную, как целую, так и дробную ее часть, а также программа проверяла, чтобы вводили именно число.
Отвечает: Coupler
Здравствуйте, FallenAngel!
Текст программы полностью в приложении. Проверка на ввод только чисел осуществляется следующим образом: просто запрещаем вводить в Edit все символы, кроме цифр и одной запятой. Число цифр в дробной части такое же, как и у числа в десятичной системе, но это можно убрать, если нужно (строку lendr := length(edit1.Text) - pos(',', edit1.Text); заменить, например, на lendr := 5; - будет 5 цифр после запятой). Связано это с тем, что число цифр в дробной части может быть бесконечным.
Приложение:
Ответ отправил: Coupler (статус: Студент)
Ответ отправлен: 16.05.2007, 14:46 Оценка за ответ: 5 Комментарий оценки: Большое спасибо за ответ, программа написана и работает просто отлично, были небольшие проблемы с StdCtrls, но думаю из-за разных версий среды Delphi, я удалили этот модуль и все заработало, Delphi его автоматически сам подключил, не знаю в чем проблема, думаю сама среда косячит!!! еще раз спасибо ;)
Вопрос № 87.090
Здравствуйте, эксперты.
При симуляции нажатия клавиш мыши я использую Mouse_Event(MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0); или
SetCursorPos(X,Y); SendMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, 0).
Вопрос: как выпольнить симуляцию нажатия клавиш мыши одновременно с нажатием, например, Ctrl+Alt?
Т.е. как будто мы удерживаем Ctrl(ssCRTL: TShiftState) и Alt(ssAlt: TShiftState), потом щелкаем LBUTTON, и отпускаем Ctrl и Alt.
Спасибо.
Для этого нужно применять эмуляцию нажатия кнопок (keybd_event - по применению очень похожа на mouse_event):
// Нажатие кнопки ALT (левой)
keybd_event(VK_LMENU, 45, KEYEVENTF_EXTENDEDKEY, 0);
// Нажатие кнопки CTRL (левой)
keybd_event(VK_LCONTROL, 45, KEYEVENTF_EXTENDEDKEY, 0);
// Нажатие кнопки мыши (левой)
mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
// Отжатие кнопки мыши
mouse_event(MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
// Отжатие кнопки CTRL
keybd_event(VK_LCONTROL, 45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
// Отжатие кнопки ALT
keybd_event(VK_LMENU, 45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
- приблизительно так.
Удачи!
Ответ отправил: Denisss (статус: Профессионал) Россия, Москва WWW:Хлама много, по сути ничего... ICQ: 281599577 ---- Ответ отправлен: 16.05.2007, 00:36 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо!
Ответ отправил: VinipuX (статус: 2-ой класс)
Ответ отправлен: 17.05.2007, 03:26
Вопрос № 87.096
Уважаемые эксперты!
Может у кого-нибудь есть опыт в использовании архивации в программе? Желательно код с использованием ZIP, RAR, 7z. Код может быть и с использованием внешних длл.
Заранее благодарен!
Отправлен: 16.05.2007, 00:47
Вопрос задал: LEXASOFT (статус: 4-ый класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 8)
Отвечает: Louken
Здравствуйте, LEXASOFT!
Попробуйте поискать в инете компонент ZipTV. С ним должны поставляться и демки, т.е. архиваторы, менеджеры архивов и др. У меня например дистрибутив этого компонента называется "ZipTV_d7_u7.0.6.exe".
Ответ отправил: Louken (статус: 2-ой класс)
Ответ отправлен: 16.05.2007, 01:42 Оценка за ответ: 5 Комментарий оценки: Спасибо нашел на http://www.ziptv.com/
Отвечает: LanK
Здравствуйте, LEXASOFT!
Я использовал в своей программе TZipMaster Freeware Delphi Zip v1.73
Минус... в том, что "с собой" надо таскать zip.dll / unzip.dll :( но Free!
Пример распаковки в приложении. Запаковка аналогично.
В версии 1,73 было 9 демо примеров :).
Приложение:
--------- Пусть все будет хорошо! Давайте жить дружно! :) И будет жить еще лучше!
Ответ отправил: LanK (статус: Студент)
Ответ отправлен: 16.05.2007, 13:17 Оценка за ответ: 5 Комментарий оценки: Большое спасибо!
Отвечает: Sattar
Здравствуйте, LEXASOFT!
Для архивацыи можна использовать WinRAR. Управление архивацыей можно управлять через передаваемые параметры.
Примеры:
Первый пример создаст архив всех файлов c папки c:data и сохранит под именем c:ackup.rar
Второй пример создаст папку c:
ewdata и туда поместит файлы с архива c:ackup.rar
Для более детальной работы прочытайте справку по консольным командам в WinRar.
Приложение:
Ответ отправил: Sattar (статус: 3-ий класс)
Ответ отправлен: 17.05.2007, 20:02 Оценка за ответ: 5
Вопрос № 87.114
Доброе утро Уважаемые эксперты.
У меня на форме есть StringGrid, состоящая из 2 столбцов. Как можно построить график функции, заданной точками, координаты которых указаны в StringGrid. Есть ли компоненты для вывода графической информации на экран или ActiveX.
Отправлен: 16.05.2007, 08:13
Вопрос задала: Pns (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Gh0stik
Здравствуйте, Pns!
Конечно есть - допустим компонент Chart (вкладка Additional).
Расположите компонент Chart на форме, далее вызовите контекстное меню компонента и выбирете пункт Edit Chart, далее в появившемся окошке нажимаете кнопочку Add и выбираете тип Fast Line. На этом настройку компонента закончим.
Далее Вам будет достаточно добавить такой обработчик который построит график по известным парам точек, которые записаны в StringGrid1: procedure TForm1.BitBtn1Click(Sender: TObject);
var i:integer;
begin
with StringGrid1 do
for i:=0 to RowCount-1 do
Series1.AddXY(StrToInt(Cells[0,i]),StrToInt(Cells[1,i]),'',clTeeColor);
end;
Обращаю Ваше внимание на то что метод AddXY() - работает только с целыми числами, потому Вам дополнительно потребуется сделать дополнительные преобразования если значения дробные (привести их к целому типу).
Также прикрепляю к ответу код с программой, которая строит график функции f(x)=x2, координаты точек принадлежащие графику предварительно заношу в StringGrid1.
Good Luck!!!
Приложение:
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа. --------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 16.05.2007, 12:24 Оценка за ответ: 5 Комментарий оценки: Спасибо.все работает.
Вопрос № 87.135
Здравствуйте, уважаемые Эксперты!
Скажите как из программы скопировать саму программу, но с другим именем? Т.е. есть у меня программа proj1.exe, мне надо чтобы она скопировала себя же в proj2.exe.
P.S. Кажется это просто...
Отправлен: 16.05.2007, 10:54
Вопрос задал: LanK (статус: Студент)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: W@NDeReR
Здравствуйте, LanK!
CopyFile('Proj1.exe','C:Proj2.exe',false);
//Proj1.exe - исходный файл
//C:Proj2.exe - путь и конечное название файла куда скопировать
//False - будет или нет перезаписан файл, если таковой уже существует (true - не будет, false - будет перезаписан).
--------- Опыт — дитя мысли, а мысль — дитя действия. Нельзя учиться по книгам.
Ответ отправил: W@NDeReR (статус: 4-ый класс)
Ответ отправлен: 16.05.2007, 11:21 Оценка за ответ: 5 Комментарий оценки: верно, спасибо! Чего то я совсем запамятовал :). FileExist помню, а Copy забыл :).
Отвечает: Elpher2006
Здравствуйте, LanK! Воспользуйтесь функцией CopyFile. Пример в приложении.
Приложение:
--------- Не делай другим того, чего сам не хочешь испытать!
Ответ отправил: Elpher2006 (статус: 1-ый класс)
Ответ отправлен: 17.05.2007, 04:58