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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

   

afiget



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

Цитата:
т к обычно по такой схеме настройки будут одни для всех пользователей

Смотря как сделать.
Мы взяли на вооружение принцип работы с пользовательскими настройками из 1С. Есть файл, который содержит сведения о раздельных директориях пользователей. И есть эти самые непересекающиеся каталоги, в которых хранятся локальные пользовательские настройки.
При этом админ может указывать основное хранилище настроек (БД или сетевой каталог), откуда копируются пользовательские настройки на компьютер, за который пользователь сел в первый раз (пользователи могут переходить от машины к машине).
Админ или пользователь могут указать местораположение каталога с настройками на каждом компьютере. Даже могут на одном указать директорию рядом с программой, на другом - \Users\*\AppData\Local...
А может вообще отказаться от сохранения настроек на конкретном компьютере (и обновления основного хранилища).
 
Кстати, мне вспомнилось, как у одного из клиентов делали реорганизацию сети (была одноранговая сеть, заводили всех в домен). Профили (стандартные виндовые) копировались на некоторых машинах по полтора часа. В подобных случаях наша программа показывает просто спринтерские результаты.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 01:07 08-05-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
afiget
C такой схемой от программиста в общем то и не зависит, где будут файлы лежать. Тут уж как админ распорядится.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:24 08-05-2009
InSe0F



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всем салют.
ищю библиотеки под DShow для win Vista
 
Единественное что нашел это dx9  
вроде бы все нормально, вот проблема с компиляцией
(лежит тут http://sourceforge.net/project/showfiles.php?group_id=53131&package_id=87408&release_id=168907)
при компл. вылезает ошибка  
[DCC Error] DirectDraw.pas(359): E2154 Type 'IDirectDrawSurface' needs finalization - not allowed in variant record
 
Если кто может помочь с комплиляцией или мб есть библиотека под Висту, буду рад помощи)
Очень надо(

Всего записей: 533 | Зарегистр. 13-03-2006 | Отправлено: 18:16 08-05-2009
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
InSe0F
Есть: Asphyre, omega, Clootie, UnDelphiX, xorDX8, XScene Engine, DirectXPanel.
Я не пользовался ими в плане мултимедии, соскочил на OpenGL, но библиотеки остались.
Помоему все с исходниками.
О них можно в сети почитать.
Если надо выложу.

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 19:41 08-05-2009
InSe0F



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V1s1ter
буду рад
мне вообще надо написать activeX который будет видео каптурить с web камеры
Так что если есть ещё по активиксу примерчик, было бы вообще замечательно
 
это дипломный проект, сам код обработки изображений уже написан, осталось оболочку сделать, хочу, чтобы объект был универсален

Всего записей: 533 | Зарегистр. 13-03-2006 | Отправлено: 19:49 08-05-2009
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
InSe0F
http://rapidshare.com/files/230657241/3Dx.rar.html
~30 метров всякого добра, наскольго окажется полезным не знаю...    
 
Добавлено:
InSe0F
Да, забыл, пароль стандартный.

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 21:39 08-05-2009
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть почти стандартный тулбар, брошенный на форму, кнопки, и еще на тулбар брошен TLabel с установленным autosize, то эта надпись либо вообще не отбражается, либо отображается неверно при попытке поменять текст надписи.
Суть вопроса в том, чтобы разместить на тулбаре надпись с заранее неизвестным размером.
{TDE}

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 02:22 09-05-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL
WinControl.Canvas.TextWidth(Label1.Test)

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 03:25 09-05-2009
InSe0F



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V1s1ter
респект)
 
Добавлено:
а кто нить может семпликов простых по актив иксу, а то пока мест не доводилось работать

Всего записей: 533 | Зарегистр. 13-03-2006 | Отправлено: 15:39 09-05-2009
boruss

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

Всего записей: 100 | Зарегистр. 19-03-2009 | Отправлено: 10:02 10-05-2009
Kursist



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такой вопрос:
Есть динамический массив:
DinArr: array[0..2] of array of Byte;
И 3 статических массива:
StatArr00: array[0..5] of Byte =(2,2,3,2,2,2);
StatArr01: array[0..1] of Byte =(2,2);
StatArr02: array[0..2] of Byte =(2,2,3);
 
Нужно что-то вроде:
DinArr[0]:=StatArr00;
DinArr[1]:=StatArr01;
DinArr[2]:=StatArr02;
 
Ругается, что разные типы (динамический и статический массивы).
Понимаю, можно сделать в цикле откопировать значение одного массива в другой, а можно как-то сразу присвоить целый массив (динамическому массиву статический, может как-то по указателю-ссылке)?
 
Пытался сделать общий тип:
Type
TmyList =array of Byte;
var
DinArr: array[0..2] of TmyList;
Arr00:TmyList = (2,2,3,2,2,2); <--Так не разрешает инициализировать дин.массив сразу
 
 
Пораскинул мозгами и сам решил:
Использую TList:
arrList.Add(@Path01);
arrList.Add(@Path02);
arrList.Add(@Path03);
 
а потом через PByteArray обращаюсь.

Всего записей: 137 | Зарегистр. 12-07-2004 | Отправлено: 22:31 10-05-2009 | Исправлено: Kursist, 23:45 10-05-2009
InSe0F



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kursist
жгешь) читай Архангельского что ли для начала

Цитата:
а можно как-то сразу присвоить целый массив

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

Всего записей: 533 | Зарегистр. 13-03-2006 | Отправлено: 03:35 11-05-2009
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kursist
Обойти можно, но не советую.
Если надо быстро сделать копию, то обратьи внимание на функцию Move, модуль System.
Предварительно не забуть выделить память под второй (дублирующий) масив.
Если надо получить несколько типизированных указателей, но масив в памяти ОДИН, тодя динамических масивов это просто присваивание. Для статических лучше сделать типизованые указатели. Про директиву absolute почтай, может это твой случай.
А вообще надо сначала цель указать, а потом спросить как...

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 05:10 11-05-2009
svs123456789

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

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

Всего записей: 2934 | Зарегистр. 10-04-2003 | Отправлено: 10:42 11-05-2009
Frodo_Torbins

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

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:57 11-05-2009
Kursist



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
InSe0F
Я знаю. Да, иногда сталкиваюсь с "ламерскими" ситуациями. А книги Архангельского (несколько) у меня всегда под рукой - поэтому сначала книги листаю, перед тем как спрашивать на форуме.
V1s1ter
Спасибо.
 
Опишу цель.
Пишу игру. Есть персонажи, которые двигуются по определенному маршруту. Маршрут задается заранее (то есть, статически). Персонажи двигаются в 4 направлениях, у каждого свой маршрут, поэтому:
Path01:array [0..9] of Byte = (2,2,3,2,2,2,3,3,4,4);
Path02:array [0..11] of Byte = (1,2,4,2,0,2,3,1,1,4,2,2);
 
Проблему решил, использовав TList (храню в нем ссылки на статические массивы). Выкладываю рабочий код.
Необходимо было получить унифицированный (через одну и ту же процедуру) доступ к разным путям (то есть, в каждой сцене свое колличество персонажей, а значит, количество маршрутов. Но сами маршруты уже известны заранее.
 
Использовал TList:
 globPathList.Add(@Path01);
 globPathList.Add(@Path02);
 globPathList.Add(@Path03);
 
Получение направления (для каждого персонажа):
  for loop := 0 to globHeroList.Count - 1 do
  begin
  pID:=THero(globHeroList.Items[loop]).Info.PathID;
  pStep:=THero(globHeroList.Items[loop]).Info.PathStep;
   if THero(globHeroList.Items[loop]).Info.PathStep> High(PByteArray(globpathList.Items[pID])^)
    then THero(globHeroList.Items[loop]).Info.PathStep:=0;
 
Direction:=PByteArray(globpathList.Items[pID])^[pStep];
...
 
 
На данный момент сижу над решением другой проблемы - поиск ошибки:
Нужно обнулять PathStep, когда Персонаж доходит до конца маршрута, для этого нужно получить длину массива, на который ссылается globpathList.  
 
Первоначальная реализация была такой:
Path:array [0..2,0..7] of Byte =((3,4,4,4,2,2,2,1),(3,2,2,0,4,4,1,0),(1,1,1,2,4,3,3,3));
А получение направления:
  pID:=THero(globHeroList.Items[loop]).Info.PathID;
  pStep:=THero(globHeroList.Items[loop]).Info.PathStep;
  Direction:=Path[pID,pStep];
 
Это хорошо работает для 1 сцены, а если их много, это можно обойти сделав: Path:array [0..n,0..m] - где в каждой новой сцене n - номер пути у персонажей будет все возрастать, но есть проблема в такой реализации - одинаковый размер (длина маршрута) для каждого персонажа, а нужен разный размер.
 
Подскажите, пожалуйста, где у меня ошибка в этом выражении:
High(PByteArray(globpathList.Items[pID])^) т.е. как правильно получить высоту массива, на который ссылается указательс, сохраненный в TList? Спасибо.

Всего записей: 137 | Зарегистр. 12-07-2004 | Отправлено: 14:47 11-05-2009 | Исправлено: Kursist, 15:08 11-05-2009
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kursist
Предлагаю поступить немного по другому.
В место статических массивов использовать динамические. Они медленее, но думаю в Вашем случае это совсем не критично. Зато Вы получите два преимущества: читабельный код и возможность использовать многомерный массив без затрат памяти под "выравнивание" как в статическом. Маршруты можно создат при инициализации в коде процедуры, но я настйчево рекомедную считать из файла.
Пример. Трехмерный "разнодлинный" массив.
type
  TByteArray: array of Byte;
  TByteMatrix: array of TByteArray;
  TByteVolume: array of TByteMatrix;
var
  V: TByteVolume;
 
SetLength(V, 3);
SetLength(V[0], 12);
SetLength(V[0, 12], 10);
SetLength(V[2], 7);
 
Запись пути при инициализации
V[0, 12, 0] := ;
V[0, 12, 1] := ;
...
V[0, 12, 9] := ;
 
процедура обработки одного пути
procedure OnePath(OneV: TByteArray);
begin
   for i :=0 to Length(OneV) do ;
end
 
вызов OnePath(V[0, 12]);
 
Для скорости инициализации в файле с путями можно сначала записать длину(разсер) пути, а затем сами данные. Такой подход позволит сразу выделить нужную память, а потом ее заполнить.
   
И еще IMHO, если что-то в програме сложно, значить что-то сделали не так.
 
 
Добавлено:
Опс,
не
   for i :=0 to Length(OneV) do ;  
а
   for i :=0 to Length(OneV)-1 do ;  
Непридирайтесь, я только расказал идею, а непривел отлаженный код...

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 15:36 11-05-2009
Kursist



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V1s1ter
Спасибо за быстрый ответ!
off:Из-за читабельности кода мне массивы больше нравятся, чем TList (Правда, у TList не замечал утечек памяти, в отличие от динамических массивов) - Не надо заморачиваться каждый раз приведением типов. Да, согласен, инициализация динамического массива из файла в данном случае оптимальней, и код читабельней, но мне стало уже интересно разобраться с этой процедурой (для общего развития):
 
if THero(globHeroList.Items[loop]).Info.PathStep> High(PByteArray(globpathList.Items[pID])^)
   
Оттрассировал программу, получается, что High(PByteArray(globpathList.Items[pID])^)  равно 32767 - это явно не высота массива, а его адрес.

Всего записей: 137 | Зарегистр. 12-07-2004 | Отправлено: 16:04 11-05-2009
V1s1ter



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

Цитата:
High(PByteArray(globpathList.Items[pID])^)
 
В отличие от динамических массивов, хранящих количество переменных на них ссылающихя и размер выделенной для них памяти, статистические массивы этого не хранят. Поэтому, вышеуказзанное выражение вернет макимальный индекс для типа PByteArray. Если внимательно посмотреть на этот тип, то можно узнать, что  
PByteArray = ^TByteArray;
а
TByteArray = array[0..32767] of Byte;
тогда какое число вернет High(PByteArray(Неважно, что здесь)^) ?  

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 16:32 11-05-2009
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Понадобилась юникодовая LowerCase. Сделал так:
 

Код:
function LowerCaseW(szString: WideString): WideString;
var
  Ch    : WideChar;
  L     : Integer;
  Source: PWideChar;
  Dest  : PWideChar;
begin
  L := Length(szString);
  SetLength(Result, L);
  Source := Pointer(szString);
  Dest := Pointer(Result);
  while L <> 0 do
    begin
      Ch := Source^;
      if ((Ch >= 'A') and (Ch <= 'Z')) or ((Ch >= 'А') and (Ch <= 'Я')) then
        Inc(Ch, 32);
      Dest^ := Ch;
      Inc(Source);
      Inc(Dest);
      Dec(L);
    end;
end;

 
Но что-то не работает. Необходимо сразу в строке делать маленькими буквами и русские а английские. Как нужно правильнее?

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 16:33 11-05-2009
   

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