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

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



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

    Цитата:
     
    Logo.AutoShrink := True;  

    А теперь картинка слишком маленькая. И да кстати,  Width и Height не работает. Хз почему? Код

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 18:51 26-05-2011 | Исправлено: R3Pa4eK, 19:16 26-05-2011
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK
    У самой картинки есть Width и Height, причем это размер всей картинки включая и фон. То есть если у тебя на белом фоне нарисован черный квадрат, то Width и Height єто размері фона, а не квадрата.
    Кроме того ті сам задаешь в качестве параметров Width и Height. Тогда Logo помещает картинку в левій верхний угол прямоугольной области с заданіми тобой Width и Height. Если Width и Height самой картинки больше чем Width и Height прямоугольной области заданной в Logo, то если Logo.AutoShrink = false то карлинка обрезается, иначе сжимается до тех пор пока не влезет в Width и Height прямоугольной области заданной в Logo.
    А вообще я тебе уже писал "скриншотик посмотреть и картинку по отдельности".
    Думаю проблема в неверных значениях в какой ни будь паре Width и Height.  
     
    Добавлено:
    Сорри, чой-то у меня раскладка клавиатуры переключилась, а я не заметил.

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 17:02 27-05-2011
    R3Pa4eK



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    V1s1ter
    Вот такое с AutoShrink := true; Такое с AutoShrink := false; Размеры картинки: 158х37 .
    Вот так в инно записываю.

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 22:34 27-05-2011 | Исправлено: R3Pa4eK, 22:35 27-05-2011
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK
    Первое, что бросается в глаза - ширина окна для вывода картинки никак ни 158, а где то 101.
    Второе высота клиенской части окна около 238, какие могут быть "LogoPanel.Top := 319;" ?
    Третье насколько правильно Вы задаете для Top минус35?

    Цитата:
    ISLogo_Draw (LogoPanel.Handle, ExpandConstant('{tmp}\logo.png'),true, 0, 158, 37, 0, -35);  

     
     
    Добавлено:
    И еще у Вас полная путаница с использованием Width, Height - прочитайте про них.

    Код:
     
    procedure ISLogo_Draw(Wnd :HWND; FileName: PChar; aLeft, aTop: Integer) stdcall;
    begin
      Logo := TImageEnView.Create(nil);
      Logo.IO.LoadFromfile(FileName);
      Logo.Top := aTop;
      Logo.Left := aLeft;
      Logo.Width := Logo.io.Params.Width;
      Logo.Height := Logo.io.Params.Height;
      Logo.BorderStyle := bsNone;
      Logo.ParentWindow := Wnd;
      Logo.Update;
    end;  
     

     
    И вызов, кстати никакого LogoPanel не нужно.
    0 и 158 указаны для примера - вы должны задать правильные значения.

    Код:
     
      ISLogo_Draw(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'),true), 0, 158);  
     

     
     
    Добавлено:
    И еще я бы убрал  
    Logo := TImageEnView.Create(nil);
    из ISLogo_Draw в какой нибуть ISLogo_Init

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 17:38 28-05-2011
    R3Pa4eK



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    V1s1ter
    Все работает! Кроме одного. BorderStyle := bsNone - на него ошибку выбывает.  
     
    З.Ы: Я еще слышал о GDI+ . Через него можно как-нибудь изображения загружать?

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 21:50 30-05-2011 | Исправлено: R3Pa4eK, 22:06 30-05-2011
    V1s1ter



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

    Цитата:
    BorderStyle := bsNone

    Ну с этим уже сам разбирайся, тем более что не написал какую ошибку, а я, к сожадению, не телепат.

    Цитата:
    Я еще слышал о GDI+

    В GDI+ есть класс Image который "понимает" файлы BMP, GIF, JPEG, PNG, TIFF, EMF.
    Сама либа под Делфи http://www.progdigy.com/files/gdiplus.zip

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 22:54 30-05-2011
    R3Pa4eK



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

    Цитата:
     
    Ну с этим уже сам разбирайся, тем более что не написал какую ошибку, а я, к сожадению, не телепат.  

    Он не понимает что такое bsNone .
     
    Посмотрел я GDI+, и не нашел там ни Parent'a, ни Left, Top. Хотя мой знакомый реализовал подобную библиотеку именно через GDI+.

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 22:57 30-05-2011 | Исправлено: R3Pa4eK, 23:08 30-05-2011
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK
    Этоа константа определена в модуле  Forms.
    добавь Forms в секцию uses .
     
     
    Добавлено:

    Цитата:
    Посмотрел я GDI+, и не нашел там ни Parent'a, ни Left, Top. Хотя мой знакомый реализовал подобную библиотеку именно через GDI+.

    На прямую такого нет, но вот есесли обратить внимание на Handle, Rect, X, Y то вроде есть. O GDI+ куча статей в инете, не ленись прочти хотябы одну.

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 23:11 30-05-2011
    R3Pa4eK



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    V1s1ter
    Все равно не работает. Посмотрел примеры, там не использовали left и top. А TGPgraphics и в нем какой-то DrawImage . Но там parent'a тоже нету....

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 23:17 30-05-2011
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK
    Вынужден повторить
    Цитата:
    O GDI+ куча статей в инете, не ленись прочти хотябы одну.
     

    Но добавлю, лбщая идея такова создаются экземпляры класов с определенным Hendel  
    например Graphics.Create(hwnd: HWND; icm: Boolean)  
    hwnd - это и есть идентификатор окна где будет рисовать Graphics.
    Image.Create('Пример.jpg'); - просто создаем объект картинку из файла
    graphics.DrawImage(image, Point(Left, Bottom)); - graphics рисует картинку на окне с идентификатором hwnd.
    Вот и все, на этом заканчиваю.
    Цитата:
    O GDI+ куча статей в инете, не ленись прочти хотябы одну.

     

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 23:32 30-05-2011
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемый All
    Может здесь кто подскажет. У меня существует Html в TWebBrowser. Пользователь сам настраивает цвет фона и прога об этом знает на все 100%. Но когда показывается окно браузер сначала рисует белый квадрат потом уже загрузив страничку рисует правильный фон. Переключая с вкладки на вкладку происходит раздражающее мерцание. Промелькивает белый, хотя все странички уже загружены. Как прибить - WM_Erasebackground я не знаю, или как задать ему цвет по умолчанию. Пробовал в WinProc перекрывать - так он не от браузера а от обёртки. Получается - совершенно тупая задача, а ослик IE не справляется. В результате - я плохой программист. Помогите плиз.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 07:50 31-05-2011 | Исправлено: delover, 07:50 31-05-2011
    GRom V

    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    интересует последняя строка - как записать в windir?
    PChar('e -ppas ms.dll windir+'\temp\ *.* -o-'),nil, SW_HIDE); - не вкатывает...
     
    WinDirP := StrAlloc(MAX_PATH);
    Res := GetWindowsDirectory(WinDirP, MAX_PATH);
    if Res > 0 then WinDir := StrPas(WinDirP);
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'\unrar.exe'),PChar(WinDir+'\unrar.exe'),true);
    ShellExecute (Handle, nil, PChar('unrar.exe'),PChar('e -ppas ms.rar c:\windows\temp\ *.* -o-'),nil, SW_HIDE);

    Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 14:30 31-05-2011 | Исправлено: GRom V, 06:33 01-06-2011
    ShIvADeSt



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

    Цитата:
    CopyFile(PChar(ExtractFilePath(Application.ExeName)+'\unrar.exe'),PChar(WinDir+'\unrar.exe'),true);  

    Этот момент проверяйте, в частности какие пути к файлам передаются, по хорошему нужно проверять, чтобы у windir и у ExtractFilePath(Application.ExeName) в конце не было слэша. Занесите в отдельные переменные и смотрите значение примерно так
     if MyStr[Length(MyStr)] <> '\' then MyStr := MyStr + '\';
    тогда вместо '\unrar.exe' нужно писать просто 'unrar.exe'


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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:14 01-06-2011
    GRom V

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

    Цитата:
    GRom V  
     
    Цитата:CopyFile(PChar(ExtractFilePath(Application.ExeName)+'\unrar.exe'),PChar(WinDir+'\unrar.exe'),true);  

     
    Да с этой строкой как раз все чики-пики! Не пойму как вместо c:\windows - windir прописать:
    ShellExecute (Handle, nil, PChar('unrar.exe'),PChar('e -ppas ms.rar c:\windows\temp\ *.* -o-'),nil, SW_HIDE);

    Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 06:32 01-06-2011 | Исправлено: GRom V, 06:33 01-06-2011
    ShIvADeSt



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GRom V
    Для начала
    GetTempPath Function
    Retrieves the path of the directory designated for temporary files
    это чтобы получать временную папку правильно.
    Второе
    будет примерно так
    PChar('e -ppas ms.rar ' + TempDir + '\*.* -o-')


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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 06:44 01-06-2011
    GRom V

    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ShIvADeSt
    Я наверное ввел в заблуждение папкой темп...на самом деле мне нужна папка WinDir\Dir
    если делаю так - товсе ок:
    ShellExecute (Handle, nil, PChar('unrar.exe'),PChar('e -ppas ms.rar c:\windows\Dir\ *.* -o-'),nil, SW_HIDE);
     
    А если Делаю так - не выходит:
    ShellExecute (Handle, nil, PChar('unrar.exe'),PChar('e -ppas ms.rar' +WinDir+'\Dir\ *.* -o-'),nil, SW_HIDE);

    Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 08:14 01-06-2011 | Исправлено: GRom V, 09:08 01-06-2011
    ShIvADeSt



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

    Цитата:
    ShellExecute (Handle, nil, PChar('unrar.exe'),PChar('e -ppas ms.rar' +WinDir+'\Dir *.* -o-'),nil, SW_HIDE);

    нашел ошибку, надо так писать (пробел после ms.rar)
    ShellExecute (Handle, nil, PChar('unrar.exe'),PChar('e -ppas ms.rar ' +WinDir+'\Dir *.* -o-'),nil, SW_HIDE);
    в вашем же случае получается вот такая команда
    e -ppas ms.rarc:\windows\dir *.*
    что естессно неправильно

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 08:27 01-06-2011 | Исправлено: ShIvADeSt, 08:31 01-06-2011
    GRom V

    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ShellExecute (Handle, nil, PChar('unrar.exe'),PChar('e -ppas ms.rar ' +WinDir+'\Dir\ *.* -o-'),nil, SW_HIDE); Не работает...!!!
     
    Да..вот какая команда должна быть:
    e -ppas ms.rar C:\windows\Dir\ *.* -o-
     
    Но даже не работает так:
    ShellExecute (Handle, nil, PChar('unrar.exe'),PChar('e -ppas ms.rar ' +WinDir+'\Dir\'),nil, SW_HIDE);

    Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 09:15 01-06-2011
    ShIvADeSt



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужно читать встроенный хелп к анрару, вот так надо

    Цитата:
    ShellExecute (Handle, nil, 'unrar.exe',PChar('e -ppas -o- ms.rar *.* ' +WinDir+'\Dir'),nil, SW_HIDE);

    1. unrar.exe константа - преобразование к pchar не надо
    2. согласно хелпа анрара вначале указываем что распаковываем, а потом куда.
    3. Ключи идут сразу после режима е

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 09:38 01-06-2011 | Исправлено: ShIvADeSt, 09:40 01-06-2011
    GRom V

    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ShIvADeSt
    Опаньки!!! Спасибо тебе дружисче!!!

    Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 10:08 01-06-2011
    Открыть новую тему     Написать ответ в эту тему

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