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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).


 
Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    mcdie



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SIgor33
    Есть некоторые ресурсы (типа шрифтов, анимированных курсоров), которые не могут использоваться из памяти. Мы обязательно должны сохранить эти ресурсы во временном файле на диске и загружать их оттуда.
    http://demi-s.narod.ru/resources/002.html
     
    Можно попробовать в примере, конечно, заменить сохранение в файл на TStream, но думаю что не получится.

    Всего записей: 145 | Зарегистр. 03-05-2006 | Отправлено: 10:31 16-11-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как записать record'ы в файл (может у кого-нибудь есть наглядный пример):
    Есть заголовок файла:
    THeader = record
       cTransForm: char;
       wFormVersion: WORD;
       bAlgCRC: BYTE;
       dwCreateEmit: DWORD;
    .......................................
    end;
     
    И сами записи:
    TRecords = record
      wRecId: WORD;  
      dwDocDate:  DATETIME;
      bReservoir: BYTE;
    .......................................                      
    end;

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 17:06 17-11-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Рекорды должны быть упакованы, то есть packed, иначе разные версии вашей проги скомпилированные с разными настройками не смогут найти общий язык. Ну а далее либо типизированные файлы, либо TStream.Read/Write.
    И еще Char на AnsiChar замените.

    Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 17:47 17-11-2010 | Исправлено: Frodo_Torbins, 17:49 17-11-2010
    akaGM

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

    Цитата:
    Есть заголовок файла:

    и что?
     
    рекорды можно писать по кр. мере тремя способами:
    1. отдельно каждое поле каждого рекорда writeln'ом в текстовый файл
    f: Text;
    r: TRecords;
    ...
    assign(f, 'filename.ext');
    rewrite(f);
    with r do begin
      writeln(f,  wRecId);
      writeln(f,  dwDocDate);
      writeln(f,  bReservoir);
    ...
    end;
    close(f);
    ...
     
    2. в "файл записей"
    f: File of TRecords;
    r: TRecords;
    ...
    assign(f, 'filename.ext');
    rewrite(f);
    write(f, r)
    close(f);
    ...
     
    3. в "нетипизированный файл"
    f: file;
    h: THeader;
    r: TRecords;
    ...
    assign(f, 'filename.ext');
    rewrite(f, 1);
    blockwrite(f, h, sizeof(h)); // header
    blockwrite(f, r, sizeof(r)); // record
    close(f);
    ...
     
    слабо в учебнике посмотреть?

    Всего записей: 24808 | Зарегистр. 06-12-2002 | Отправлено: 17:48 17-11-2010 | Исправлено: akaGM, 18:11 17-11-2010
    Man_Without_Face



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

    Цитата:
    разные версии вашей проги

    Загружать файл будет вообще другая прога...

    Цитата:
    типизированные файлы

    А можно наглядный пример...

    Цитата:
    либо TStream.Read/Write.

    Access violation вызывает следующий код:
    var AStream: TMemoryStream;
          Header: tHeader;
    ................................................
      Header.wFormVersion := 2;
      AStream.Write(Header, SizeOf(THeader));
      AStream.Position := 0;
      AStream.SaveToFile('D:\SD.641');
     
    Спасибо...
     
     
     
     
     
     
    Добавлено:
    akaGM
    Спасибо, завтра попробую.

    Цитата:
    слабо в учебнике посмотреть?

    В нете нашел через stream - не работает.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 17:53 17-11-2010
    akaGM

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

    Цитата:
    В нете нашел через stream - не работает

    в сети надо искать принципы (как и в учебнике), а не готовые решения...

    Всего записей: 24808 | Зарегистр. 06-12-2002 | Отправлено: 18:05 17-11-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Типизированные файлы - это вариант номер 2 по классификации akaGM. Что касается вашего кода, то я в нем не вижу создания объекта AStream. Должно быть хотя бы так:

    Код:
      AStream := TMemoryStream.Create;
      try
        Header.wFormVersion := 2;
        AStream.Write(Header, SizeOf(THeader));
        AStream.Position := 0;
        AStream.SaveToFile('D:\SD.641');
      finally
        AStream.Free;
      end;

    Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 18:08 17-11-2010 | Исправлено: Frodo_Torbins, 18:12 17-11-2010
    mcdie



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как реализовать следующий алгоритм:
    Необходимо по названию Формы.Название компоненты.Название свойства известрых нами в текстовом виде изменить это свойство на нужное значение.
    допустим:
    по сохраненному тексту 'Form1.Edit1.Text' изменить свойство Text на другое значение.

    Код:
    Procedure MyProc('Form1.Edit1.Text',Value);
    begin
    ... ??? ...
    end;

    Всего записей: 145 | Зарегистр. 03-05-2006 | Отправлено: 16:05 18-11-2010 | Исправлено: mcdie, 16:06 18-11-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mcdie
    Погуглите на RTTI. Правда в делфи до 2010-й работать можно только со свойствами в секции published.

    Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 16:11 18-11-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как сделать запись в массивы типа Byte и Char из Tquery:
    BYTE     bCardNumber[19]  
    Char     cTransForm[10]
    ........................................
    TRecords = record
      bCardNumber: array[0..18] of byte;
      cTransForm: char[0..9] of char;
    end;
    ..........................................
    Такое вызывает ошибку несовместимости типов:
       for i := 1 to length(qLoyalty.FieldByName('rc_loyalty_CardNumber').Asstring) do begin
         R.bCardNumber[i - 1] := qLoyalty.FieldByName('rc_loyalty_CardNumber').Asstring;
       end;
    Что не так делаю (Delphi 2006)? Спасибо.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 17:27 18-11-2010 | Исправлено: Man_Without_Face, 17:38 18-11-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Видимо "qLoyalty.FieldByName('rc_loyalty_CardNumber').Asstring" у вас является строкой, а "R.bCardNumber[i - 1]" - число, вот и несовместимость. Судя по вашему коду вам надо сделать: "bCardNumber: array[0..18] of AnsiChar;". Тогда весь ваш цикл сможете заменить на простое присваивание: "R.bCardNumber := qLoyalty.FieldByName('rc_loyalty_CardNumber').Asstring;".

    Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 18:05 18-11-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    В рекорде должны быть только такие поля:
    BYTE     bCardNumber[19]  
    Char     cTransForm[10]  

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 09:04 19-11-2010
    ShIvADeSt



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

    Цитата:
    Такое вызывает ошибку несовместимости типов:

    Код:
     
       for i := 1 to length(qLoyalty.FieldByName('rc_loyalty_CardNumber').Asstring) do begin
         R.bCardNumber[i - 1] := qLoyalty.FieldByName('rc_loyalty_CardNumber').Asstring;
       end;  
     

     

    попробуй так
    R.bCardNumber[i - 1] := StrToInt(qLoyalty.FieldByName('rc_loyalty_CardNumber').Asstring[i]);
    или если будет ругаться то вначале
    s:=qLoyalty.FieldByName('rc_loyalty_CardNumber').Asstring;
    а потом
    R.bCardNumber[i - 1] := StrToInt(s[i]);
    а еще лучше вначале проверить, что qLoyalty.FieldByName('rc_loyalty_CardNumber') не null, а потом сделать s:=qLoyalty.FieldByName('rc_loyalty_CardNumber').Asstring; и работать дальше только с s.


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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 09:34 19-11-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    ShIvADeSt
    Спасибо, вроде что то получилось...,
    только так сделал R.bCardNumber[i - 1] := s[i];  

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 10:18 19-11-2010
    ShIvADeSt



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

    Цитата:
    только так сделал R.bCardNumber[i - 1] := s[i];  

    У меня Дельфи 5, в ней такой фокус не пройдет Поэтому использую StrToInt

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 11:06 19-11-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Я так подозреваю, что вам нужна совместимость на бинарном уровне. Так вот можете посмотреть под отладчиком - будет точно тоже самое, а работать с таким типом будет проще.

    Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 11:31 19-11-2010 | Исправлено: Frodo_Torbins, 11:38 19-11-2010
    MedvedevDM



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите плиз  
    пример кода
    для отправки почтового сообщения  
    используя SMTP 25 порт  
     
    без Outlook api напрямую,
    возможно ли такое?

    Всего записей: 114 | Зарегистр. 03-11-2010 | Отправлено: 14:51 19-11-2010
    mcdie



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MedvedevDM
    В D5 можно попробовать использовать компоненты TNMSMTP,  
     
    в D6 и дальше компонентами Indy.
     
    можно примеры глянуть:
    http://www.delphisources.ru/pages/faq/base/send_email_using_mapi.html
    http://www.delphisources.ru/pages/faq/base/send_email.html
    http://www.delphisources.ru/pages/faq/base/send_email2.html

    Всего записей: 145 | Зарегистр. 03-05-2006 | Отправлено: 16:22 19-11-2010 | Исправлено: mcdie, 16:22 19-11-2010
    gur gur

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Я делаю пошагово программу решения системы уравнений методом интерполяции - экстраполяции в Delphi, и на одном шаге застрял.  
    1. ввести коэффициенты матрици An,n и столбец свободных членов Bn
    2. задать интервал интерполяции h и относительную погрешность e
    3. выполнить ввод первоначальных значений Xn, x[i]:=1,2,...,n.
    4. x[i]:=w[i]
    5.Привести систему к виду f[i]:=0, где x[i]:=w[i];
    на этом - 5 шаге я застрял. Как привести систему к виду f[i]:=0, где x[i]:=w[i]?  
             

    Всего записей: 1 | Зарегистр. 20-11-2010 | Отправлено: 13:11 20-11-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые программисты, прошу оказать помощь в решении следующей задачи, очень нужна помощь.
     
    Есть три DBF файла:
     
    accounts.dbf
    rectranc.dbf
    rectranh.dbf
     
    нужно связать между собой данные из этих трех файлов, извлечь их в отдельную таблицу, после этого данные перенести в txt файл, который будет иметь спец. вид.
     
    Приведу подробный пример с описанием задачи:
     
    из файла accounts.dbf извлекаются следующие данные:
     
    TNUM           INOUT        ENDSUM
    Б00043        АВБ             1000.000
    Б00313        АВВ             1000.000
    Б00354        Б2                3335.220
     
     
    из файла rectranc.dbf:
     
    CODE        TNUM        NAME                                   NFACC
    127        Б00043        Иванов Иван Иванович         42307810312487525410
    046        Б00313        Петров Петр Петрович           42358796510477456321
    111        Б00354        Сидоров Сидор Сидорович   42325895448752223655
     
     
    из файла rectranh.dbf:
     
    CODE     HEAD2
    127        0163
    046        0105
    111        0049
     
     
    нужно связать данные из этих файлов и составить три txt файла с именами АВБ, АВВ и Б2 соответственно, в виде:
    АВБ.txt
    0163:42307810312487525410:1000.00:Иванов:Иван:Иванович:
     
    АВВ.txt
    0105:42358796510477456321:1000.00:Петров:Петр:Петрович:
     
    Б2.txt
    0049:42325895448752223655:3335.22:Сидоров:Сидор:Сидорович:
     
    P.S.В этой теме мне помогли решить данную задачу при помощи BAT, но данных очень много в файле, возникают тормоза при обработке.Посоветовали напрямую работать с dbf файлами через реляционные операции SQL, но я в программировании не силён.

    Всего записей: 3902 | Зарегистр. 16-10-2010 | Отправлено: 18:51 20-11-2010 | Исправлено: serg3001, 18:59 20-11-2010
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru