Страница 17 из 35
Добавлено: 19.01.2008 23:35:06
Attid
B4rr4cuda
У кого какие мысли?
как костыль можно дерективы поставить, как решение премер на 2 кнопки и в трекер.
Добавлено: 20.01.2008 00:39:46
Alexx2000
B4rr4cuda писал(а):Это работает также под GTK и GTK2.
Точнее работает, но не совсем коректно...
У кого какие мысли?
Раньше без синхронизации под гтк сразу падало или висло. Вот тогда я намучался

Конечно это баг Лазаруса, надо им в баг трекер закинуть, если еще нету. Надо чтобы везде работало одинаково.
Добавлено: 20.01.2008 00:58:04
B4rr4cuda
Закоментировал синхронизы в uCopyThread и uMoveThread - отлично работает под qt.
Пока лазаровцы не наладили можно, как костылик, использовать:
в make.sh
Код: Выделить всё
if [ "$lcl" = "qt" ]
then
rm interface.inc
echo "{\$DEFINE QT}">interface.inc
fi
в каждый проблемный файл
и в проблемные места:
Код: Выделить всё
{$IFDEF QT}
FFileOpDlg.UpdateDlg;
{$ELSE}
synchronize(@FFileOpDlg.UpdateDlg);
{$ENDIF}
Добавлено: 20.01.2008 01:07:34
B4rr4cuda
Туплю.
В make.sh просто
Код: Выделить всё
rm interface.inc
echo "{\$DEFINE $lcl}">interface.inc
Добавлено: 21.01.2008 11:55:36
B4rr4cuda
Во первых, наваял скриптик для автоматической адаптации DC для QT.
Копируем код ниже в файлик в каталог DC, права на исполнение, запускаем.
(!) Больше одного раза не запускать.
Потом компилим патченый код под qt. Все потоковые операции работают коректно.
Если нужно скомпилить под гтк или гтк2 в interface.inc вместо
{$DEFINE QT} указываем {$DEFINE GTK} или что-то другое.
Вновь нужно под qt - указываем {$DEFINE QT}.
Скрипт заново запускать НЕ надо!
Код: Выделить всё
#!/usr/bin/perl -w
`rm interface.inc;echo '{\$DEFINE QT\}'>interface.inc`;
@list=`ls *.pas`;
foreach (@list)
{
#удаляем левые символы и выставляем выходное расширение
$fon=$_;
$fon=~s/\n//;
$fon=$`;
$fon=~s/\r//;
`cp $fon $fon.bak`;
$fon=$`.".bak";
open( FIN,"<$fon");
open( FOUT,">$_");
while ($str=<FIN>)
{
$str=~s/\n//;
$str=$`;
$str=~s/\r//;
$str=$`;
#Включаем инклуд
$rez=$str=~m/\{\$H\+\}/;
if ($rez)
{
$str.="\n\{\$I interface.inc\}\n"
}
#поиск
$rez=$str=~m/.*Synchronize\(.*\@/;#@*
#если строка найдена
if ($rez)
{
#Присваиваем переменым найденые значеня
$func=$';
$sync=$&;
#Повторный поиск и отделяем мух от котлет
$rez=$func=~m/\)\;/;
if ($rez)
{
$func=$`;
$str= "{\$IFDEF QT}\n\t$func;\n{\$ELSE}\n\t$sync$func);\n{\$ENDIF}\n";
}
}
print FOUT "$str\n";
}
close(FIN);
close(FOUT);
}
А во вторых - понравился лог. Очень удобно, красиво и функционально!

Добавлено: 21.01.2008 16:24:04
mpyat2
По поводу появления пустого имени файла:
у меня в директории есть файл "file:" (с двоеточием в конце). Я заметил, что если в имени файла двоеточие, то откусыается все до него, включая его самоё

.
Видимо, это баг FindFirst/FindNext. Попытаюсь исследовать глубже.
Добавлено: 22.01.2008 06:38:03
B4rr4cuda
2mpyat2
Возможно проблема в модуле uDCUtils или где-то рядом, в частности в этом модуле многие функции а-ля ExtractOnlyFileName удаляют символы разделители ( ['.', '/', '\', ':']), и двоеточие включено в них. Также ищется включение DriveDelim, который тоже является ':'.
Добавлено: 22.01.2008 08:27:50
B4rr4cuda
Нашел.
mpyat2 оказался прав. Функция FindNext возвращает обрезанное имя файла, если в имени есть двоеточие. Имя обрезается в
FindNext ()->FindGetFileInfo()->ExtractFileName()->
fina.inc строка 82
Код: Выделить всё
while (I > 0) and not (FileName[I] in ['/', '\', ':']) do Dec(I);
Result := Copy(FileName, I + 1, MaxInt);
Обратите внимание на двоеточие в set-е.
Добавлено: 22.01.2008 10:50:44
Attid
отправил в
трекер
как временое решение сделать примерно так
Код: Выделить всё
{ifdef linux}
while (I > 0) and not (FileName[I] in ['/', '\']) do Dec(I);
{else}
while (I > 0) and not (FileName[I] in ['/', '\', ':']) do Dec(I);
{endif}
Result := Copy(FileName, I + 1, MaxInt);
и пересобрать фпц
Добавлено: 22.01.2008 12:34:45
B4rr4cuda
Может включить FindFirst/FindNext функции в DC, чтобы не зависеть от багов фпцешников?
Добавлено: 22.01.2008 13:48:36
B4rr4cuda
Перекомпилил fpc с поправкой {$ifdef .... отображает теперь нормально, но операции копирования\перемещения теперь вопрошают "Недостаточно места на диске продолжить?" и, если согласиться копируют с удвоением имени файла до двоеточия:
было new:111.txt, скопировалось, как new:new:111.txt.
Добавлено: 22.01.2008 14:13:17
Alexx2000
Сриптик надо добавить в SVN.
Может включить FindFirst/FindNext функции в DC, чтобы не зависеть от багов фпцешников?
Кстати думал об этом, правда по другой причине:
Чтобы атрибуты под Линуксом возвращал не всякие там faReadOnly, faArchive (которые под Линуксом имеют мало смысла), а типа rwxrwxrwx. Не охота везде IFDEF'ы пихать. В модуле uFindEx сделал даже небольшой hack так, сказать для этого, но криво это как то.
Добавлено: 22.01.2008 18:24:15
B4rr4cuda
Сриптик надо добавить в SVN.
Только предупреждение о двойном запуске добавь, а то мешанина {$IFDEF} на выходе будет.
Чтобы атрибуты под Линуксом возвращал не всякие там faReadOnly, faArchive (которые под Линуксом имеют мало смысла), а типа rwxrwxrwx.
Очень правильная мысль. Плюс к этому не каждый фпц перекомпилить будет (да и умеет, если откровенно). На днях, один кадр, проприетарные дрова ати ставил, а они с дри в ядре конфликтуют, надо ядро перекомпилить. Он, как об этом узнал, вообще от идеи отказался, под vesa-ой сидит, *здесь была матерная фраза*. *убунты уничтожают новообращеным мозг. Грустно.
А юникод сейчас популярен. И фм просто обязан с ним правильно работать.
Добавлено: 22.01.2008 20:15:28
Attid
B4rr4cuda писал(а):Сриптик надо добавить в SVN.
Только предупреждение о двойном запуске добавь, а то мешанина {$IFDEF} на выходе будет.
а может все таки выполнить скрипт один раз и все ? в будущем много еще каких директив может понадобиться только interface.inc переименовать в dc.inc хотя это не важно.
Чтобы атрибуты под Линуксом возвращал не всякие там faReadOnly, faArchive (которые под Линуксом имеют мало смысла), а типа rwxrwxrwx.
а можно переписать и отправить в фпц =)
Добавлено: 23.01.2008 00:14:50
Alexx2000
а может все таки выполнить скрипт один раз и все ? в будущем много еще каких директив может понадобиться только interface.inc переименовать в dc.inc хотя это не важно.
Сам не знаю как лучше, а когда поправят это дело, опять писать скриптик который будет убирать IFDEF'ы?
а можно переписать и отправить в фпц =)
Ну FindFirst, FindNext они менять не будут, потеряется совместимость. А вот дополнительные функции можно было бы добавить.