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

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

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

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 101

   

Pasha_new



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста, от куда можно скачать Delphi? Какая версия последняя, а какая более стабильная? На какой работаете вы? Где можно скачать? Есть ли русификаторы на "эти" версии?

Всего записей: 251 | Зарегистр. 29-10-2007 | Отправлено: 19:15 22-10-2008
art0123



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pasha_new Последняя Embarcadero (CodeGear) RAD Studio 2009
 Тебе сюда... http://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=41251#1

Всего записей: 1300 | Зарегистр. 12-03-2008 | Отправлено: 19:33 22-10-2008
fcdobpiy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вопрос запостил еще на вингарде, но вдруг кто атм не бывает и знает ответ
 
вопрос этот практически нигде не освещен , ну я не смог найти в общем.
 
использую delphi 2007 . в ней есть настройки параметров сборки Release и Debug . одна из разниц между ними - не включается отладочная информация.
возникло 2 вопроса
1. если я использую делфи без всяких сторонних компонентов, то в debug сборке берутся dcu файлы из папок, указанных в debug dcu files (настройки среды), а в релизе из library paths ?
2. когда устанавливаешь сторонние компоненты , напрмиер тот же fibplus, они компилируются в обе версии , или только в релиз, или только в дебаг?
т.е. интересует процесс разработки
ставится делфи, ставятся все нужные компоненты но компилируются они все в дебаг сборку. получив приемлимый результат работы мы  (с помощью скривтов автосборщика, ну или машины где все версии компонент собраны в релиз) мы собираем релиз версию?  
 
лет 5 уже программирую на делфи , но как то этому не придавал значения, да и не знал. надо рости. поделитесь опытом .

Всего записей: 411 | Зарегистр. 22-08-2005 | Отправлено: 19:43 22-10-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fcdobpiy
Интересный вопрос, действительно, так как дело может быть не только в dcu. Если ide имеет пакеты с собранными одноимёнными модулями, то она может подумать, что от туда взять быстрее, чем с диска.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 08:56 23-10-2008
delover

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

Цитата:
    if Assigned(AValue) and Assigned(AValue.Intercept) and Assigned(FIntercept) then begin  
-----------------------------------------------------^ а вот сдесь наступает крах

2да, такое тоже бывает, есть такая опция Complete boolean eval в настройках проекта.  

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 14:48 23-10-2008
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, помогите, а то я запутался: нигде у себя и в инете не нашел рабочего примера приложения работы с базой данных, где используется отношение "многие-ко-многим". Таблицы с такими отношениями у меня уже есть, но как в Дельфи сделать, чтобы при выборе данных из одной таблицы отображались данные из 3-й (если вторая используется для связи между остальными).

Всего записей: 3145 | Зарегистр. 29-09-2005 | Отправлено: 17:39 23-10-2008
Frodo_Torbins

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

Цитата:
1. если я использую делфи без всяких сторонних компонентов, то в debug сборке берутся dcu файлы из папок, указанных в debug dcu files (настройки среды), а в релизе из library paths ?

Да.

Цитата:
2. когда устанавливаешь сторонние компоненты , напрмиер тот же fibplus, они компилируются в обе версии , или только в релиз, или только в дебаг?

Все зависит от самих компонентов. Обычно только релиз. Подробнее можно узнать посмотрев какие пути прописаны в "Debug DCU path". Например джедайские компоненты прописываются там и компилируются в две версии, если поставить галочку в инсталлере.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 20:19 23-10-2008 | Исправлено: Frodo_Torbins, 20:23 23-10-2008
ShIvADeSt



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

Цитата:
Таблицы с такими отношениями у меня уже есть, но как в Дельфи сделать, чтобы при выборе данных из одной таблицы отображались данные из 3-й (если вторая используется для связи между остальными).

Делай 2 отдельных запроса, в одном одна таблица, во втором вторая. При смене записи в первой фильтруй записи во второй по айдишнику.

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:10 24-10-2008
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fcdobpiy
На второй вопрос. Если ты просто компилируешь пакет в среде, компоненты компилируются только в одну из версий - в соответсвии с настойками самого пакета, обычно без отладочной информации. Обрати внимание, что в случае с JVCL о котором пишет Frodo_Torbins, истользуется сторонний установщик.
Кроме того, есть, кажется, один ньюанс. Если в Lib path компилятор находит исходники модулей, то при перестройке он будет компилить их с параметрами компиляции проекта, т.е. будут учитываться опции создания отладочной информации, да и другие тоже.

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 05:15 24-10-2008
fcdobpiy



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

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

это вот как раз заметил. сделал чтобы все dcu складывались в отдельную папку. после компиляции там как раз лежали все нужные dcu и от JVCL и от моих библитек. а пути до них были в Lib path.
 
ну и на форуме буржуйском http://objectmix.com/delphi/402712-debug-vs-release-build.html прозвучала такая фраза
Подробнее...
 
ну а из личного опыта  - как вы собираете релизы ?

Всего записей: 411 | Зарегистр. 22-08-2005 | Отправлено: 07:11 24-10-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fcdobpiy
Я делаю тупо. Чудес не бывает (касательно кремния), файл - это файл и всё. Если берёт не то, значит всё равно берёт с диска...

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 16:28 24-10-2008
Frodo_Torbins

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

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

Обязательно включаю EurekaLog, или какой нибудь другой логер. Ну а все остальные настройки - чтобы екзешник минимум места занимал.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 17:50 24-10-2008
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Через OLE Drag & Drop перетаскивается текст в ячейку Exel из  другой прилады, но в обьединенную ячейку не падает, а выдается ошибка 'не могу изменить часть обьединенной ячейки'.
кто может подсказать как такое реализовать, в принципе не обязательно через OLE

Всего записей: 518 | Зарегистр. 07-06-2007 | Отправлено: 17:56 24-10-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuriyRR
Это проблема Екселя, а никак не Дельфи. Спрашивай в топике по Ексель ВБА

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 06:53 25-10-2008
LadyOfWood

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

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

{$J-}    
{$H+}    
{$P+}    
{$T-}    
{$X+}
{$B-}    
{$O+}    
{$A8}    
{$Z1}    
{$R-}    
 
{$IFDEF DEBUG}
 
  {$W+}  
  {$D+}  
  {$L+}  
  {$Y+}  
  {$C+}  
  {$I+}  
  {$Q+}  
 
{$ELSE}
 
  {$W-}  
  {$D-}  
  {$L-}  
  {$Y-}  
  {$C-}  
  {$I-}  
  {$Q-}  
 
{$ENDIF}

Всего записей: 620 | Зарегистр. 16-09-2003 | Отправлено: 13:35 25-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здраствуйте. Нужно средствами Апи выполнить ownerdraw трекбара. Итак, долго искал я примеры реализации на просторах интернета, но самый нормальный видеть пример находится здесь, однако это на Си, поэтому некоторые тружности у меня возникли с переносом кода. По смыслу и догадкам наляпал "набросок" так сказать. Получилось вот что... Сразу вопрос, почему ползунок тоже перерисовывается? Вроде смотрел тот код и там ничего необычного такого нет... Может надо CDRF флаги как-то скомбинировать? Там вроде такие же аналогичные использованы... Потом, захотелось мне менять раскраску ползунка пр наведении/отведении указателя. Не получилось обработать nmcd.uItemState для этого, вернее я код поместил в CDDS_ITEMPREPAINT и все равно цвет то менялся, то не менялся. Поэтому пришлось убрать этот код... Потом хотелось бы прорисовать риски на шкале и саму линию, по которой полунок перемещается. Смотрел как в том примере сделано, чего-то не получлось прорисовать.наверное может быть оно то и прорисовывалось, но раз сама стандартная прорисовка ползунка видна, значит наверное и по умолчанию цвет на мой прорисовываемый накладывался на риски и линию и из-за этого такая фигня. Тоже пришлось убрать код...
 
Код из ресурсного файла

Код:
101 DIALOGEX 0, 0, 200, 170
STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION ""
LANGUAGE LANG_RUSSIAN, 0x1
FONT 8, "Tahoma"
{
   CONTROL "", 101, "msctls_trackbar32", TBS_HORZ | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 25, 127, 18  
}

 
И еще вопросик. Нужно убрать выделение трекбара когда его окошко активно. Вот как нарисовать пунктирную рамку, знаю, через DrawFocusRect, а вот в каком CDDS сообщении она отрисовывается чтобы ее не рисовать? Вобщем, кому не сложно и кто профессионал, помогите пожалуйста. Уж очень сложный контрол этот трекбар и много непонятно...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 19:33 25-10-2008 | Исправлено: Maks150988, 19:36 25-10-2008
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите, должны ли работать Экшены в Датамодуль? В Датамодуле у меня компоненты Датасет и связанный с ним Датасорс. Я хочу повесить на событие OnDataChange Датасорса Экшен, но в выпадающем списке его нет. Вручную прописать, понятно, тоже не получается. Мне нужно в трех ситуациях обработать событие, когда меняется текущая запись в ДБГриде, в остальное время эту обработку исключить. Если яснее, то так: в Эдите (не ДБЭдите) пользователь вводит инфу, одновременно фильтруются записи в ДБГриде, верхняя всегда выделена; также пользователь может клавишами и мышкой выделять записи в ДБГриде. В-общем, на эти три действия (фактически это одно событие OnDataChange) надо повесить один Экшен. Все это надо, чтобы избежать лишних кнопок на форме и лишних телодвижений для пользователя. Кто-нибудь сталкивался с этим???

Всего записей: 3145 | Зарегистр. 29-09-2005 | Отправлено: 01:10 26-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И еще, ребята, хотелось бы помощи в оптимизации части кода для программы. Вкратце: имеем строку с данными о маршруте вида 10.10.10.10 mask 255.255.255.255 (name) или вида 10.10.10.10 (name). Необходимо из такой строки выцепить адрес маршрута, его маску и название. Для тех кто не понял что имелось ввиду, поясню, Адрес - 10.10.10.10, маска - 255.255.255.255, название name.
 
Раньше делал функцию для вытаскивания названия маршрута из такой строки. Первый неоптимизированный вариант скажем был таким:

Код:
function GetRouteNameFromString(StrPrs : String) : String;
var
  Domen : String;
  I     : Integer;
  P     : Integer;
begin
  Result := '';
  // Удаляем из начальной строки последний символ (скобка после названия)
  Delete(StrPrs, Length(StrPrs), 1);
  // Проходимся по все строке и ищем начальную скобку перед названием
  P := -1;
  for I := Length(StrPrs) downto 1 do
    begin
      if StrPrs[I] = '(' then
        begin
          P := I;
          Break;
        end;
    end;
  // Если скобку нашли - получаем название из начальной строки
  if P <> -1 then
    Domen := Copy(StrPrs, P + 1, Length(StrPrs));
  Result := Domen;
end;
 

 
Потом переделал код и теперь функция такая:

Код:
function GetRouteNameFromString(S : String) : String;
var
  I : Integer;
begin
  // Удяляем из конца строки последний символ - закрывающую скобку
  // Она следует за названием маршрута и роли здесь не играет
  Delete(S, Length(S), 1);
  // Ищем позицию символа начальной скобки в строке, которую парсим
  I := Pos('(', S);
  // Копируем строку в результат с положения искомого символа скобки
  if I <> -1 then
    Result := Copy(S, I + 1, Length(S));
end;
 

Можно заметить что разница ощутима, при чем весьма.
 
Теперь собственно нужно вытащить из такой строки адрес маршрута и его маску. Я сделал очень "грязно": проверял на буковку m и парсил, копируя в контрол SysIPAddress32 строку с начальными цифрами и вот что помещалось в него, обратно вычислял длину из этого и вычитал ее для маски. Получалось уж очень много лишних манипуляций...
Вот старая неоптимизированная такая функция например:
 

Код:
{ Обрабатываем строку для отображения только адреса и названия }
procedure ParserStringGetListRoute1(StrPrs : String; hSys, hEdt : THandle);
var
  Domen : String;
  Route : String;
  I     : Integer;
  P     : Integer;
  Temp  : String;
begin
  // Удаляем из начальной строки последний символ (скобка после названия)
  Delete(StrPrs, Length(StrPrs), 1);
 
  // Проходимся по всей строке и ищем начальную скобку перед названием
  P := -1;
  for I := Length(StrPrs) downto 1 do
    begin
      if StrPrs[I] = '(' then
        begin
          P := I;
          Break;
        end;
    end;
 
  // Если скобку нашли - получаем название из начальной строки
  if P <> -1 then
    Domen := Copy(StrPrs, P + 1, Length(StrPrs));
 
  // Приравниваем начальную строку в строке маршрута
  Route := StrPrs;
 
  // Удаляем название из строки, включая 2 последних символа (две скобки из маршрута)
  Delete(Route, Length(StrPrs) - Length(Domen) - 1, Length(Domen) + 2);
 
  // Выводим полученные результаты в элементы управления
  SysIP32_SetText(hSys, PChar(Route));
 
  // Получаем точный адрес первого адреса для дальнейшего подсчета его длины
  Temp := SysIP32_GetText(hSys);
 
  // Выводим в первый контрол точный адрес
  SysIP32_SetText(hSys, PChar(Temp));
 
  // Выводим в третий контрол точное название
  SendMessage(hEdt, WM_SETTEXT, 0, Integer(PChar(Domen)));
end;
 
{ Обрабатываем строку для отображения адреса, маски и названия }
procedure ParserStringGetListRoute2(StrPrs : String; hSys1, hSys2, hEdt : THandle);
var
  Domen  : String;
  Route1 : String;
  Route2 : String;
  I      : Integer;
  P      : Integer;
  Temp   : String;
begin
  // Удаляем из начальной строки последний символ (скобка после названия)
  Delete(StrPrs, Length(StrPrs), 1);
 
  // Проходимся по всей строке и ищем начальную скобку перед названием
  P := -1;
  for I := Length(StrPrs) downto 1 do
    begin
      if StrPrs[I] = '(' then
        begin
          P := I;
          Break;
        end;
    end;
 
  // Если скобку нашли - получаем название из начальной строки
  if P <> -1 then
    Domen := Copy(StrPrs, P + 1, Length(StrPrs));
 
  // Приравниваем начальную строку в строке маршрута
  Route1 := StrPrs;
 
  // Удаляем название из строки, включая 2 последних символа (две скобки из маршрута)
  Delete(Route1, Length(StrPrs) - Length(Domen) - 1, Length(Domen) + 2);
 
  // Выводим полученные результаты в элементы управления
  SysIP32_SetText(hSys1, PChar(Route1));
 
  // Получаем точный адрес первого адреса для дальнейшего подсчета его длины
  Temp := SysIP32_GetText(hSys1);
  // Копируем с заданной позиции (число символов адреса + 1 для смещения + 6 для длины слова " mask ")
  Route2 := Copy(Route1, (Length(Temp) + 1) + 6, Length(Route1));
 
  // Выводим в первый контрол точный адрес
  SysIP32_SetText(hSys1, PChar(Temp));
  // Выводим во второй контрол точный адрес
  SysIP32_SetText(hSys2, PChar(Route2));
  // Выводим в третий контрол точное название
  SendMessage(hEdt, WM_SETTEXT, 0, Integer(PChar(Domen)));
end;

Собственно необходима помощь в оптимизации этих 2 функций. Или хотя бы желательно помощь со второй, что-то все никак не придумывается способ корректно-правильного вытаскивания маски из строки без копирования в контрол с последующим опять его выдиранием из него...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:13 26-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Такие вещи принято делать через TRegExpr. Весь ваш код превратится в две строки-маски

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 22:22 26-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Да мне собственно надо на одном паскале + апи если возможно. Я так понимаю TRegExpr на VCL завязан.
Покумекал я немного и переделал функциии:
 

Код:
function IsMaskRouteReadString(S : String) : Boolean;
begin
  if Pos('mask', S) > 0 then
    Result := TRUE
  else
    Result := FALSE;
end;
 
function GetRouteNameFromString(S : String) : String;
var
  I : Integer;
begin
  Result := S;
  Delete(S, Length(S), 1);
  I := Pos('(', S);
  Result := Copy(S, I + 1, Length(S));
end;
 
function GetRouteAddressFromString(S : String) : String;
var
  I : Integer;
begin
  Delete(S, Length(S), 1);
  if IsMaskRouteReadString(S) then
    I := Pos('mask', S)
  else
    I := Pos('(', S);
  Result := Copy(S, 1, I - 2);
end;
 
function GetRouteMaskFromString(S : String) : String;
var
  I : Integer;
  L : Integer;
begin
  L := Length(GetRouteNameFromString(S));
  Delete(S, Length(S), 1);
  I := Pos('mask', S);
  Result := Copy(S, I + 5, Length(S));
  Delete(Result, Length(Result) - L - 1, L + 2);
end;

 
Вроде думаю сойдет. Лучше пока придумать не удается. Если есть идеи как еще можно дооптимизировать (IsMaskRouteReadString не считается) буду рад поглядеть на реализации.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 23:43 26-10-2008
   

Страницы: 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 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru