Вопросы по Delphi (все версии) - часть 3 - [95] :: Прикладное программирование :: Компьютерный форум Ru.Board
Перейти из форума на сайт.

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

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

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

   

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xy
хороший вопрос...
также просто и доступно -- увы...
я родной TXMLDocument использую, но можно нарыть что-нибудь попроще...

Всего записей: 25521 | Зарегистр. 06-12-2002 | Отправлено: 19:18 11-03-2008
fcdobpiy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xy
да, с xml просто работать не получится.
искал себе билиотечку для чтения xml. самое оптимаьное по мне оказалось _http://www.destructor.de/xmlparser/index.htm
 
_____________________
 
вопрос  
нужно заданную строку вписать в строку из одних 0 или пробелов, где длина результирующе строки определна , меньше 255.
функция вида
function left_zero(len:integer;s:string):string;   //длина строки и строка для вписания
var i:integer;
t:string;
begin
  for I := 1 to len-length(s) do  t:=t+'0';
  Result:=t+s;
end;
 
я так понимаю совсем не оптимальна, и ужасна по производительности.
у меня есть мысль делать так  - задать строку в коде из 255 нулей (пробелов). в функции её укоротить до нужной длины и вписать внутрь нужную  строку.
 
или есть получше варианты?

Всего записей: 411 | Зарегистр. 22-08-2005 | Отправлено: 07:48 12-03-2008 | Исправлено: fcdobpiy, 07:49 12-03-2008
lerthe61

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Рекомендую сделать так:
 
function PadRight(s: string; pad: char; len: integer): string;
begin
  Result := s+StringOfChar(pad, len-Length(s));
  SetLength(Result, len);
end;
 
или
 
function PadLeft(s: string; pad: char; len: integer): string;
begin
  Result := StringOfChar(pad, len-Length(s))+s;
  SetLength(Result, len);
end;

Всего записей: 74 | Зарегистр. 04-05-2007 | Отправлено: 08:52 12-03-2008
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fcdobpiy
с пробелами можно так:
 
format('%255.255s',[s]);

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 09:32 12-03-2008
akaGM

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

Цитата:
заданную строку вписать в строку

почему не задаётся с какой позиции?
 
тогда Insert() именно для твоего случая и предназначена...
 
-----------
xy
забыл...

Цитата:
+ читабельно для ручной настройки

а с другой стороны, ты много знаешь редакторов с подсветкой *.ini,
a *.xml?

Всего записей: 25521 | Зарегистр. 06-12-2002 | Отправлено: 14:32 12-03-2008 | Исправлено: akaGM, 14:40 12-03-2008
fcdobpiy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lerthe61
когда символ, из кторой ссостоит строка неизвестен, то самое то. минус в том, что функция StringOfChar по сути просто прибавляет к строке символ , что было у меня выше
RostY
спасибо. кратко и четко. но по производит. тоже плохо, ибо анализурует строку.
akaGM
конкретнее - в строке состоящей из одного и того же символа вписать слева или справа (выровнять по левому краю или правому) заданную строку.
тут больше вопрос в том что лучше - хранить строку из нулей или пробелов готовую и пользоваться инсертом, либо генерировать эту строку в рантайме и добавлять к ней нужную

Всего записей: 411 | Зарегистр. 22-08-2005 | Отправлено: 15:28 12-03-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fcdobpiy
для производительности лучше пользуйся FillChar()

Всего записей: 25521 | Зарегистр. 06-12-2002 | Отправлено: 15:46 12-03-2008
Iron Demon



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую благородных прогммеров, если кто занимался или знает что нибуть о функции реструктурирования таблиц DbiDoRestructure, очень прошу помочь.
 Проблема заключаеться в том что почемуто не хочет правильно работать:
  после выполнения, изменяет некоторые типы полей и из размерность, в результате при открытии таблицы в место данных представлен полный бред...
 Задача заключаеться в том чтобы переименовать поле в структуре таблицы, не меняя ни типов, ни размерность полей, не хотелось бы делать закат солнца в ручную, т.к. файлов более 800 штук, и в нутрь файла стандартными средствами OpenFile и в наглуюю писать не хочеться т.к. гибкой эта прога не будет, кроме как переименовывание она не чего не сделает, а хотелось бы большего.

Всего записей: 1 | Зарегистр. 12-03-2008 | Отправлено: 19:06 12-03-2008 | Исправлено: Iron Demon, 19:11 12-03-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здраствуйте. Никак не разберусь с функцией SetWindowPOs. А именно ситуация такая. В ресурсах допустим есть статусбар и трекбар. Вот мне надо постоянно на диалоге отображать трекбар поверх статуса, когда трекбар расположен на самом статусе. Сейчас код такой:
  SetWindowPos(GetDlgItem(hApp, CTRL_STATUSBAR_PANEL), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW or SWP_NOZORDER);
  SetWindowPos(GetDlgItem(hApp, CTRL_TRACKBAR_VOLUME), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
Пробовал убирать ноузордер и менять ноутопмост, но бесполезно. Тупизм какой-то. При инициализации диалога трекбар упорно не видно, хотя стоит навести курсор на его место и он появляется. Пробовал invalidaterect, showwindow потом, updatewindow и не помогает. Что за такое!!!...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 00:19 13-03-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И еще хотел бы разобраться с двойной буферизацией. На данный момент процелура такая:

Код:
 
    if (XMGetRow() mod 8 = 0) and (Module <> nil) then
      begin
        DeleteObject(hBmp);
        hBmp := LoadImage(hInstance, PChar(RES_BITMAP_APPBANNER_2), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE);
        SendMessage(GetDlgItem(hAbt, CTRL_STATIC_ABOUTBANNER), STM_SETIMAGE, IMAGE_BITMAP, hBmp);
      end
    else
      begin
        DeleteObject(hBmp);
        hBmp := LoadImage(hInstance, PChar(RES_BITMAP_APPBANNER_1), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE);
        SendMessage(GetDlgItem(hAbt, CTRL_STATIC_ABOUTBANNER), STM_SETIMAGE, IMAGE_BITMAP, hBmp);
      end;
 

ПРи замене битмапа статик мигает временами что не хорошо. Как вот можно обойти? Пытался искать пример реализации, но там чего-то все для игр через OpenGL...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 11:41 13-03-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хочу простую реализации вин-консоли, из функционала достаточно только расцвечивания выводимого по writeln() текста...
бродящие по сети wincrt32 и crt32 не понравились, громоздко и, вообше говоря, некрасиво
 
кто что скажет?

Всего записей: 25521 | Зарегистр. 06-12-2002 | Отправлено: 14:39 15-03-2008
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот нашел исходник, присутствует реализация базовых функций для проектирования консольных приложений. Протестил на Turbo Delphi 2006
 
Подробнее... [?]

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 16:32 16-03-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar79
спасибо...
я тоже нашёл, очень маленькую crt'шку из порта ТурбоВизион под Дельфи3.0
пока вроде устроила...

Всего записей: 25521 | Зарегистр. 06-12-2002 | Отправлено: 22:32 16-03-2008
xy



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

Цитата:
а с другой стороны, ты много знаешь редакторов с подсветкой *.ini,  
a *.xml?

суть ини-файла, в том что там можно хранить базовые настройки и состояние приложения
причём оно доступно и ситабельно безо всяких подсветок :)
 
--
 
Народ, подскажите плиз такую вещь по самому языку (призабыл уже):
в паскале насколько я помню, если объявить переменную в глобальной части юнита - она инциализируется автоматически (т.е. строки пустые, в числах нули и т.п.)
если объявить локально в функции - то там мусор всякий, надо инициализацию ручную обзательно
 
в дельфи это поведение сохранено для переменных..
 
но я не уверен на счёт record - подскажите как оно себя ведет для таких типов, нужно их инициализировать при глобальном объявлении, при локальном и как это удобнее делать :-? а то типы большие бывают.. проще в класс их переделать, но классы передаются в функции и обратно не так как хотелось бы :)

----------
Счастливые мысли приводят к счастливой клеточной биохимии

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 23:14 16-03-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А чего их инициализировать? FillChar да и все.
На счет сложностей с передачей классов в функции можно подробнее?

Всего записей: 2322 | Зарегистр. 24-05-2007 | Отправлено: 00:03 17-03-2008
xy



ХУдератор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
хмм.. есть рекорд, где разнотипных полей много.. скажем

Код:
 
type
   TMyRecord = record
    Report: TfrxReport;
    Result: TModalResult;
 
    Type: Integer;
    Code: Integer;
 
    Name     : String;
    Name2   : String;
    Name22 : String;
 
    Num    : String;
    Series  : String;
    Date : TDateTime;
end;
 

есть функция обработки например:
function MyDialog(ARec: TMyRecord): TMyRecord;
 
поля мне нужно заполнять не все, иногда все.. когда как - а вызывать из разных мест часто.. поэтому и возникает вопрос инициализации, или в рекорде можно описать что-то типа  

Код:
Name     : String = 'default string';
:-?
 
с классами проблема, что их надо создавать явно, удалять явно и передаются они ссылками на объект, а не копиями объекта, что в данной ситуации не удобно

----------
Счастливые мысли приводят к счастливой клеточной биохимии

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 01:09 17-03-2008 | Исправлено: xy, 01:34 17-03-2008
Andrey128

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как программно сделать иконку красной?
 
В TreeView есть разные иконки, и некоторые узлы должны выглядеть красными иконками. Сейчас делаю так:
1. Открываю иконку в Axialis IconWorkshop. Иконка должна быть формата XP with Alpha Channel (RGB - 24 bits)
2. Открываю диалог Adjust Hue - Saturation - Brightness
3. Делаю  
   [x] Colorize
   Hue -180
   Saturation +100
   Brightness 0
и иконка становится красной без потери изображения
 
Когда иконок было мало, проблем не было, а сейчас их стало много и хотелось бы процесс автоматизтровать.

Всего записей: 410 | Зарегистр. 16-01-2003 | Отправлено: 05:42 17-03-2008
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Делай в самой программе. Грузишь иконку в TIcon. Создаешь TBitMap, рисуешь на нем иконку и "краснишь"
 
Преобразование цветного изображение в оттенки одного [?]

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 06:17 17-03-2008
ILSOFT

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

Цитата:
Код:  
type  
   TMyRecord = record  
    Report: TfrxReport;  
    Result: TModalResult;  
 
    Type: Integer;  
    Code: Integer;  
 
    Name     : String;  
    Name2   : String;  
    Name22 : String;  
 
    Num    : String;  
    Series  : String;  
    Date : TDateTime;  
end;  
 
 
есть функция обработки например:  
function MyDialog(ARec: TMyRecord): TMyRecord;  
 
поля мне нужно заполнять не все, иногда все.. когда как - а вызывать из разных мест часто.. поэтому и возникает вопрос инициализации, или в рекорде можно описать что-то типа  

 
Вариантов куча! Вот 3 на вскидку...
решение 1 - заполнить структуру нолями:

Код:
procedure XYZ;
var
  Params: TMyRecord;
begin
  FillChar(Params,sizeof(TMyRecord),0);
  { че то делаем }
end;

решение 2 - cделать "чистую" константу:
const ClearParams: TMyRecord = (Report: nil; Result: mrNone; ...);
а потом для очистки:

Код:
procedure XYZ;
var
  Params: TMyRecord;
begin
  Params:=ClearParams;
  { че то делаем }
end;

решение 3 - процедура "зачистки":

Код:
 
procedure ClearParams(var Params: TMyRecord);
begin
  with Params do
     begin
        Report:= nil;  
        Result:= mrNone;
        ...
     end;
end;
 
procedure XYZ;
var
  Params: TMyRecord;
begin
  ClearParams(Params);
  { че то делаем }
end;

 

Всего записей: 231 | Зарегистр. 20-09-2002 | Отправлено: 07:22 17-03-2008 | Исправлено: ILSOFT, 07:31 17-03-2008
xy



ХУдератор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ILSOFT
Спасибо! второй вариант более красив и симпатичен мне :)
 
Добавлено:
процедурой зачистки сейчас и пользуюсь, хотелось что-нить изящней

----------
Счастливые мысли приводят к счастливой клеточной биохимии

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 07:34 17-03-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 (все версии) - часть 3
ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru