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

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

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

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

ShIvADeSt



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

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

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

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kursist
    у тебя Str: -- внутренняя переменная, поэтому и возвращается значение последнего вызова обработчика, сделай её, например, хотя бы членом TFrmMain36
    и
    Str:=Str[loop]+Key; -- тоже неверно
    внутри обработчика вместо цикла просто поставь
          Str := Str + Key;

    Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 14:28 12-11-2009 | Исправлено: akaGM, 14:32 12-11-2009
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kursist
    В дополнение к akaGM
    Перед заданием ввода имени еще не забудь Str := '';

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    //------------------INSERT GAMER NAME----------------------------------------------
    procedure TFrmMain36.FormKeyPress(Sender: TObject; var Key: Char);
    var
     S:Char;
     loop:Integer;
    begin
      Str:='';
      if EditNameMode then
        begin
        if (Key>='A') and (Key<='z') then
         Str:=Str+Key;
        end;
       if Str<>'' then
        begin
        GamerNameString.Clear;
        GamerNameString.Add(Str);
        GamerNameString.SaveToFile('resorces/gamerName.txt');
        apStrings.Strings.Strings[13]:='Name: '+GamerNameString.Strings[0];
        end;
    end;
     
    Не работает. (слово по-умолчанию "Gamer" не меняется)
     
        for loop := 0 to 8 do
         Str[loop]:=Key;
    Выводит 8 одинаковых символов
     
    Добавлено:

    Цитата:
        GamerNameString.Clear;
        GamerNameString.Add(Str);
        GamerNameString.SaveToFile('resorces/gamerName.txt');
        apStrings.Strings.Strings[13]:='Name: '+GamerNameString.Strings[0];  

     
     
    GamerNameString - TStringList
    apStrings.Strings - TStringList (часть собственного класса выводящего символы методом ОпенГЛ)
     
    Добавлено:

    Цитата:
    Str:=Str[loop]+Key; -- тоже неверно
    внутри обработчика вместо цикла просто поставь
          Str := Str + Key;  

     
    Мне надо оградить объем вводимых символов восемью знаками. Думал через цикл, попробовал через рекурсию - в цикле вызывать метод FormKeyPress(self, Key) - заругалась Дельфи
     
    Добавлено:
    Str:string[8]; - сделал глобальной
     
     Str:='';
      if EditNameMode then
        begin
        if Ord(Key)>64 then
        Str:=Str+Key;
        end;
     
    Всё-равно выводит только один символ.
     
    Добавлено:
    Разобрался ))
     

    Цитата:
    Перед заданием ввода имени еще не забудь Str := '';  

     
    Это была шутка? Из-за этого у меня один символ и показывался

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



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

    Цитата:
    Не работает. (слово по-умолчанию "Gamer" не меняется)  

    И не будет. Объясняю на пальцах:
    Gamer жмет "G"
    Вызывается FormKeyPress(..., а в ней Str:=''; Str:=Str+Key; тоесть в итоге  Str="G"
    Gamer жмет "a"
    Вызывается FormKeyPress(..., а в ней Str:=''; Str:=Str+Key; тоесть в итоге  Str="a"
    Gamer жмет "m"
    Вызывается FormKeyPress(..., а в ней Str:=''; Str:=Str+Key; тоесть в итоге  Str="m"
    .
    .
    Ясно что в общем итоге имя будет равно последнему символу.
    А Вы попробуйте Str:='' вынести из процедуры FormKeyPress

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

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

    Цитата:
    Это была шутка?

    это есть основы программирования
     
    V1s1ter
    я тоже сначала не врубился, он там в своём письме нам отвечает...
    зациклился
    гы

    Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 15:29 12-11-2009
    V1s1ter



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

    Цитата:
        GamerNameString.Clear;
        GamerNameString.Add(Str);
        GamerNameString.SaveToFile('resorces/gamerName.txt');
        apStrings.Strings.Strings[13]:='Name: '+GamerNameString.Strings[0];  

    тоже надо бы вынести за рамки  FormKeyPress
    Я бы делал так
    1) GamerName := '';  
    2) Рисуем окно
    3) while EditNameMode do ;
    4) Схраняем GamerName в файле и прочее
    В самой FormKeyPress

    Код:
     
    procedure TFrmMain36.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      EditNameMode := (Key <> VK_TAB) and (Key <> VK_ENTER);  
      if EditNameMode then begin
        if (Key>='A') and (Key<='z') then GamerName:=GamerName+Key;
        EditNameMode := Length(GamerName) < 8;
        Здесь только рисуем имя GLTextOut(X, Y, GamerName);
      end;  
    end;  
     

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 15:40 12-11-2009 | Исправлено: V1s1ter, 15:41 12-11-2009
    Kursist



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

    Цитата:
    это есть основы программирования
     
    V1s1ter
    я тоже сначала не врубился, он там в своём письме нам отвечает...
    зациклился
    гы

     
     
    Извините, автоматически мои сообщения добавлялись к предыдущему сообщению.
    V1s1ter
    Str:=''; - ввёл в другой более ранней процедуре (в момент вызова режима ввода)
     

    Цитата:
    Ясно что в общем итоге имя будет равно последнему символу.
    А Вы попробуйте Str:='' вынести из процедуры FormKeyPress  

     
    Спасибо, извиняюсь ещё раз! Уже всё сделал. Всё заработало.
     
    Добавлено:
    Да, не хорошо, что каждый раз по нажатию клавиши будет в файл сохраняться.
    Сделал так:
     
    //----------------SCENE 00 CLICK-----------------------------------------------------
    procedure Click_00(aX,aY:Integer);
    begin
     
     {userName}
     if GUIList.Items(0).MouseClick(13,aX,aY) then
      begin
       EditNameMode:=NOT EditNameMode;
       apStrings.Items(13).Info.Color:=clRed;
       apStrings.Strings.Strings[13]:='Name: '+GamerNameString.Strings[0];
     
       if EditNameMode then  StrGamerName:='';
       if EditNameMode=FALSE then
        if StrGamerName<>'' then
          GamerNameString.SaveToFile('resorces/gn');
        end;
      end;
     
    //------------------INSERT GAMER NAME----------------------------------------------
    procedure TFrmMain36.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if EditNameMode then
        begin
        if (Ord(Key)>45) then
        StrGamerName:=StrGamerName+Key;
        end;
       if StrGamerName<>'' then
        begin
        GamerNameString.Clear;
        GamerNameString.Add(StrGamerName);
        apStrings.Strings.Strings[13]:='Name: '+GamerNameString.Strings[0];
        end;
    end;

    Всего записей: 137 | Зарегистр. 12-07-2004 | Отправлено: 15:41 12-11-2009
    emo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа.  
    У меня возникла проблема при использовании удаленной отладки (remote debugging) с Д2007 и Windows 7. Когда удаленый процесс запускается на Windows 7, то дельфи виснет и помогает только убийство процесса.
    Есть тут кто, кто использовал удаленную отладку на Windows 7 с Д2007?
     

    Всего записей: 373 | Зарегистр. 19-11-2003 | Отправлено: 09:59 13-11-2009
    mdid

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

    Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 16:14 19-11-2009
    data man



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

    Код:
    For I := 0 to Screen.FormCount - 1 do
      if Screen.Forms[I].Visible then ...

     
    Или так, если есть формы-наследники TCustomForm

    Код:
    For I := 0 to Screen.CustomFormCount - 1 do
      if Screen.CustomForms[I].Visible then ...

     
    И на всякий случай

    Код:
    For I := 0 to Screen.DataModuleCount - 1 do
      Screen.DataModules[I].блаблабла


    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 16:39 19-11-2009
    mdid

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

    Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 16:48 19-11-2009
    maix



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот подскажите плиз такой вопросец есть. Когда компилируешь встроенным компилером exe-шник, то если его потом открыть например блокнотом то в конце файла видно:
    name="CodeGear ..."
        version="1.0.0.0"
    или
    name="DelphiApplication"
        version="1.0.0.0"
    Можно это как то убрать или изменить?
    Может надо бругой упаковщик использовать? я только начинаю с этим всем разбираться и вот очень интересен такой вопрос.
    ЗЫ: гугл ответа не дал

    Всего записей: 194 | Зарегистр. 14-06-2006 | Отправлено: 08:46 20-11-2009 | Исправлено: maix, 08:47 20-11-2009
    Eyrikh

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

    Цитата:
    Можно это как то убрать или изменить?

     
    Посмотри меню  
    Project->Options...->Version Info

    Всего записей: 4 | Зарегистр. 11-07-2006 | Отправлено: 08:54 20-11-2009
    maix



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

    Цитата:
    Посмотри меню  
    Project->Options...->Version Info

    Это я так понял дает показ версии в свойствах exe. а не при просмотре его блокнотом

    Всего записей: 194 | Зарегистр. 14-06-2006 | Отправлено: 09:48 20-11-2009
    data man



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

    Цитата:
    name="CodeGear ..."  
        version="1.0.0.0"

    Ты привел кусочек из manifest'а.

    Цитата:
    Можно это как то убрать или изменить?

    А это чем-то мешает ?
    И советую почитать что такое windows manifest и для чего он нужен, прежде чем менять exe блокнотом.

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 10:13 20-11-2009
    maix



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо за наводку. А вот можете подсказать какой-нибудь нормальный компилер для delphi чтобы размер приложений был меньше чем со встроенным. Желательно со ссылками и как их туда установить

    Всего записей: 194 | Зарегистр. 14-06-2006 | Отправлено: 11:23 20-11-2009
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    maix
    дело не в компиляторе, а в простоте написания программы (uses by def.)
    хочешь уменьшить размер пиши через апи или как вариант посмотри на KOL

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 11:41 20-11-2009 | Исправлено: greenpc, 11:47 20-11-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    maix
    Что значит "встроенный" и "нормальный" компилер ? "Внешнего" для Delphi нет и не будет.
    Компиляция производится либо из среды, либо в командной строке вызовом dcc32.exe, но по сути используется один и тот компилятор.
    Спрошу так:
    1. Какая версия Delphi ?
    2. Какой размер приложения получается и чем он не устраивает ?

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 11:43 20-11-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    maix
    Размер зависит в большей степени от используемых библиотек чем от версии компилятора. Если в Дельфи писать без использования VCL на чистом API - размер будет до безобразия копеечным. А если использовать еще и сторонние библиотеки компонентов, скажем DevExpress со скинами, размер железно разбухает на 5-10 мегабайт, как минимум.
     
    Добавлено:
    И совершенно верно говорит data man, что альтернативы дельфийскому компилятору для компиляции в Дельфи нет. Есть только альтернатива в используемой версии самой Дельфи - скажем, в Дельфи 7 результат компиляции будет меньше по объему, чем в Дельфи 2010...

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 11:45 20-11-2009 | Исправлено: psa1974, 11:53 20-11-2009
    maix



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1. 2010
    2. если совсем простое пишешь то размер 800к, Если после этого ее сжать сторонней сжималкой то размер падает до 200-300к. (Может я чтото в определениях попутал, Сжать и откомппилить. Ламер я пока еще в этом всем)
    Что есть KOL ?

    Всего записей: 194 | Зарегистр. 14-06-2006 | Отправлено: 14:13 20-11-2009 | Исправлено: maix, 14:14 20-11-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 (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru