Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2

Модерирует : ShIvADeSt

ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы http://forum.ru-board.com/topic.cgi?forum=33&topic=3647&start=2020#lt
Внимание, все большие куски кода (более 5 строк) оформляем в тег [more] дабы уменьшить размер поста.

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:52 20-04-2006 | Исправлено: ShIvADeSt, 02:02 30-06-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
George_Lucky
Стоит или нет - решать тебе, попробуй перевести один проект, потом другой - а там уже определишься, с семеркой они живут вместе без проблем.  
 
Глюков хватает - не меньше чем в 7й, на достаточно сложных COM-библиотеках на мой взгляд работает менее стабильно, память жрет с удовольствием.  
 
С другой стороны (наверное) более корректная поддержка современногол WinAPI, на мой взгляд IDE стала намного удобнее, .NET на паскале (но только 1.1)
 
С переходом вроде никаких проблем не было - разве что в сторонних компонентах, которые уже не развиваются, пришлось дефайны на новую версию добавить.

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 11:49 06-06-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Существует ли способ установить (именно "установить", а не запустить/остановить) свою службу в обход консольной команды /install? Т.е. программным путём?

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 14:07 06-06-2006 | Исправлено: reenoip, 14:08 06-06-2006
EVD



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip
Функция CreateService из WinApi

Всего записей: 123 | Зарегистр. 22-12-2005 | Отправлено: 14:32 06-06-2006
Betorgon



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Можно ли сделать так что-бы при использования холста(Canvas) в Delphi при изменения чего либо на нём не было мигания?

Всего записей: 272 | Зарегистр. 19-05-2006 | Отправлено: 17:50 06-06-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EVD, замечательно. А можно пример для Delphi?
А то всё, что я нашёл, - относительно С ((

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 17:52 06-06-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Betorgon
Если для рисования на контроле в его Paint (OnPaint) то можно завести TBitmap, рисовать на него тогда, когда картинка меняется, а в Paint делать  
Canvas.Draw(X, Y, bmp);
 
reenoip
Смотри в модуле SvcMgr - TServiceApplication.RegisterServices, можно даже в отладке пройтись, если отладочные DCU включить

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 21:31 06-06-2006 | Исправлено: RomanTim, 21:36 06-06-2006
FireZone

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip
Попробуй так:
Код:
uses ... winsvc ...
...
function InstallService(filename, svcname, svcdisplayname: string): boolean;
var
  hSCM, hService: THandle;
begin
  result:= false;
 
  hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if hSCM <> 0 then
  try
    hService:= CreateService(
      hSCM, PChar(svcname), PChar(svcdisplayname), SERVICE_ALL_ACCESS,
      SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START,
      SERVICE_ERROR_NORMAL, PChar(filename), nil, nil, nil, nil, nil);
    if (hService <> 0) then
    try
      result := true
    finally
      CloseServiceHandle(hService)
    end
  finally
    CloseServiceHandle(hSCM)
  end
end;
Флажки в CreateService измени по потребностям. Их можно глянуть в справке по WinApi или в msdn. Если удалось установить сервис, возвращается истина.

Всего записей: 293 | Зарегистр. 28-01-2004 | Отправлено: 21:43 06-06-2006
0315

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
???
создаю файл: file of string[64]
записываю в него строку, всё нормально
пытаюсь считать в переменную (s64: string[64])  
выдаёт ошибку:[Error] Unit1.pas(238): Incompatible types
в чём прикол?

Всего записей: 5 | Зарегистр. 17-04-2006 | Отправлено: 03:40 07-06-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0315

Цитата:
???  
создаю файл: file of string[64]  
записываю в него строку, всё нормально  
пытаюсь считать в переменную (s64: string[64])  
выдаёт ошибку:[Error] Unit1.pas(238): Incompatible types  
в чём прикол?

Прикол в том, что у тебя на 10 строке стоит неправильный параметр, который вводит в заблуждение компилятор.
А если по сути, то дай кусок, как пишешь и как читаешь.  
Кстати File of string[64] - это маньячество? если тебе надо просто в файл текс тписать то TextFile тип который тебе надо.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:37 07-06-2006
FireZone

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0315

Цитата:
в чём прикол?
В том, что компилятор считает string[64] и string[64] разными типами. Надо делать примерно так:
Код:
type
  TStr64 = string[64];
var
  f: file of TStr64;
  s64: TStr64;

Всего записей: 293 | Зарегистр. 28-01-2004 | Отправлено: 05:22 07-06-2006
George_Lucky



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim
Спасибо за совет!

Всего записей: 413 | Зарегистр. 12-09-2002 | Отправлено: 12:02 07-06-2006
0315

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Кстати File of string[64] - это маньячество? если тебе надо просто в файл текс тписать то TextFile тип который тебе надо.

 
Согласен, что маньячество, но мне помимо ввода текста в файл, необходимо изменять его в нужной строке с нужной позиции... Если кто подскажет способ легче, буду очень признателен.
 
FireZone спасибо за совет надо будет попробовать.

Всего записей: 5 | Зарегистр. 17-04-2006 | Отправлено: 04:18 08-06-2006
Butcher



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
0315
по-моему, намного удобнее работать с текстовыми файлами посредством TStringList.

Всего записей: 41 | Зарегистр. 12-02-2003 | Отправлено: 09:11 08-06-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
0315

Цитата:
Согласен, что маньячество, но мне помимо ввода текста в файл, необходимо изменять его в нужной строке с нужной позиции... Если кто подскажет способ легче, буду очень признателен.  

Можно грузить файл в StringList, а после изменения сохранять обратно на диск.  
Получаешь свободный доступ к строкам, которые к тому же могут быть разной длины (вдруг пригодится). Есть, правда, ограничение - та строка, которая одно целое с точки зрения программы, не может содержать перевод строки.

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 09:12 08-06-2006
Aladdinych



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня есть приложение написанное на Delphi 5 и в нем компоненты работающие с базой данных Interbase. Это прежде всего TTable и TQuery.
Мне нужно написать DLL, Функции из которой вызывались бы из приложения и чтобы изнутри таких функций можно было обращаться к компонентам TTable и TQuery созданным в основном приложении. Как получить к ним доступ из DLL?
Как это сделать?
 

Всего записей: 323 | Зарегистр. 18-10-2005 | Отправлено: 09:25 08-06-2006
FireZone

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aladdinych

Цитата:
Как это сделать?

Объявлять callback функции и передавать указатели на них в твою dll, чтобы она их вызывала. А напрямую обращение делать нельзя.
 
Добавлено:
Напиши подробнее, что должна делать dll с этими компонентами, и я накидаю примерчик с коллбэками.

Всего записей: 293 | Зарегистр. 28-01-2004 | Отправлено: 10:32 08-06-2006
Aladdinych



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Моя dll это что-то вроде плаггина.
Есть основная программа. И мне надо заложить на будущее средство для расширения ее возможностей за счет вызова внешних модулей.  
В основной программе есть датасеты. Мне надо:
1. Вызвать из Dll процедуру, которая выдает на экран форму для заполнения.  
2. Пользователь ее заполняет, а по кнопке ОК  
3. обновляются данные в датасетах (добавляются, удаляются, модифицируются записи). При этом датасеты есть объекты созданные в основной программе
4. После чего соответствующую процедуру можно выгрузить из памяти.
И как это сделать?

Всего записей: 323 | Зарегистр. 18-10-2005 | Отправлено: 08:29 09-06-2006
ArtemiyUO

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну можно примерно так
в длл объявляеш тип
type
TPShowFrm = procedure (param : integer);
 
у себя в длл объявляеш переменную для хранения ссылки на функцию
 
var
ShowFrmPrc : TPShowFrm;
 
Потом у тебя должна быть какаето функция иницилизации ДЛЛ. она должна быть стандартная для всех плюгинов и апликуха о ней знает, например
 
procedure INIT(PShowFrmPrc : TPShowFrm);
begin
ShowFrmPrc := PShowFrmPrc;
end;
 
 
а в основной программе у тебя есть процедура которая выводит твой справочник или выполняет любые другие действия, например  
procedure ShowList (param : integer); //она должна быть объявлена так же как и указатель ..на неё в длл
begin
//какието действия
end;
 
все теперерь при подключении плюгина ты импортируеш из длл стандартную функцию иницилизации, передавая ДЛЛке указатель на функцию ядра.
Init(ShowList) или  Init(@ShowList)
так можно передавать указатели на любое кол-во стандартных методов ядра, типо твое апи.
 
Когда тебе надо из длл вызвать функцию из основной програмы ты просто пишеш.
ShowFrmPrc(param) и вызывается процедура ShowList
 
Вообщем я думаю идея ясна - передать в длл указатели на функции ядра.
А вообще если поискать в инете то можно и без всего этого обойтись если воспользоваться функцией MethodAddress(), только там для меня не совсем прозрачна проблема разных адресных пространств.

Всего записей: 539 | Зарегистр. 12-12-2005 | Отправлено: 08:46 09-06-2006
OXDBA

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
В основной программе есть датасеты. Мне надо:  
1. Вызвать из Dll процедуру, которая выдает на экран форму для заполнения.  
2. Пользователь ее заполняет, а по кнопке ОК  
3. обновляются данные в датасетах (добавляются, удаляются, модифицируются записи). При этом датасеты есть объекты созданные в основной программе

Плагин это конечно хорошо, но зачем датасеты в основной программе?
ИМХО гораздо логичнее из основной программы вызвать плагин редактирвания, который
выполнит все действия, включая сохранение, а обратно вернет только результат(True/False). Представь, что твой плагин будет вызываться из двух программ, тогда тебе прийдется два раза писать код для сохранения данных.
У меня реализация следующая -  в основной программе коннект к базе и визуализация только по чтению. Все редактирование находится в плагинах(dll) куда передается только хэндл на DataBase.
 
 

Всего записей: 426 | Зарегистр. 19-01-2005 | Отправлено: 11:09 09-06-2006
boban1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у вас нет код 'Hardware monitor'?

Всего записей: 3 | Зарегистр. 09-06-2006 | Отправлено: 11:49 09-06-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2
ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru