Darth Emil Опубликовано 14 февраля, 2006 Жалоба Поделиться Опубликовано 14 февраля, 2006 Есть пара вопросов по делфи. 1. Используя компонент ListBox, при щелчке на пунктах открывается в WebBrowser(точное название компонента не помню) разные html. Как сократить код? Т.е. чтобы постоянно не прописывать что если выбран пункт 1, то откроется 1, 2-2? Массив завести? 2. Как в Delphi 6 в программах сделать кнопки XP'шные? В стиле ХР, а не квадратны классические? Ссылка на комментарий Поделиться на другие сайты Поделиться
nusya24 Опубликовано 14 февраля, 2006 Жалоба Поделиться Опубликовано 14 февраля, 2006 1. Используя компонент ListBox, при щелчке на пунктах открывается в WebBrowser(точное название компонента не помню) разные html. Как сократить код? Т.е. чтобы постоянно не прописывать что если выбран пункт 1, то откроется 1, 2-2? Массив завести? имя html файлов сделать одинаковыми в конце каждого имени ставить номер соответствующий номеру строки listbox комбинировать: имя файла + номер строки listbox (они начинаются с нуля) + расширение открывать полученный файл 2. Как в Delphi 6 в программах сделать кнопки XP'шные? В стиле ХР, а не квадратны классические? можно попробовать использовать манифест (если не ошибаюсь, манифест только для Win XP) а можно перерисовывать изображение кнопки Ссылка на комментарий Поделиться на другие сайты Поделиться
Darth Emil Опубликовано 15 февраля, 2006 Автор Жалоба Поделиться Опубликовано 15 февраля, 2006 (изменено) nusya24: Первое я сделал так: procedure TForm1.ListBox1Click(Sender: TObject);begina:=getcurrentdir;Case Listbox1.ItemIndex of0:WebBrowser1.Navigate(a+'\html\Predislovie.htm');1:WebBrowser1.Navigate(a+'\html\Glava 1.htm');2:WebBrowser1.Navigate(a+'\html\Glava 2.htm');3:WebBrowser1.Navigate(a+'\html\Glava 3.htm');4:WebBrowser1.Navigate(a+'\html\Glava 4.htm');5:WebBrowser1.Navigate(a+'\html\Glava 5.htm');6:WebBrowser1.Navigate(a+'\html\Glava 6.htm');7:WebBrowser1.Navigate(a+'\html\Glava 7.htm');8:WebBrowser1.Navigate(a+'\html\Glava 8.htm');9:WebBrowser1.Navigate(a+'\html\Glava 9.htm');10:WebBrowser1.Navigate(a+'\html\Bib.htm');end; Но это не то. А как сделать манифест? И ещё: как сделать так чтобы при создании формы в качстве фона грузилась картинка, но не из самого exe'шника, а из файла ресурса? Изменено 15 февраля, 2006 пользователем Darth Emil Ссылка на комментарий Поделиться на другие сайты Поделиться
gvozd Опубликовано 16 февраля, 2006 Жалоба Поделиться Опубликовано 16 февраля, 2006 На VB я бы сделал так: If Listbox1.ListIndex = 0 ThenWebbrowser.Navigate "Info.htm"ElseIf Listbox1.ListIndex = 9 ThenWebbrowser.Navigate "Bib.htm"ElseWebbrowser.Navigate "Glava " & Listbox1.ListIndex & ".htm"End If Писал по памяти, за работу кода один в один не ручаюсь, но идея понятна, на Delphi переписать это труда не составит. А на счет манифеста, попробуй создать файл в папке с прогой с названием твоей проги + .manifest, например "Proga.exe.manifest" такого содержания: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="exe.exe" processorArchitecture="x86" version="5.1.0.0" type="win32"/> <description> Description </description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency> </assembly> Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 16 февраля, 2006 Жалоба Поделиться Опубликовано 16 февраля, 2006 На VB я бы сделал так:If Listbox1.ListIndex = 0 ThenWebbrowser.Navigate "Info.htm"ElseIf Listbox1.ListIndex = 9 ThenWebbrowser.Navigate "Bib.htm"ElseWebbrowser.Navigate "Glava " & Listbox1.ListIndex & ".htm"End If Cерия последовательных if'ов будет работать медленнее чем case, и является менее наглядной. Так что если выбирать между последовательными if'ами и case - выбор однозначно в пользу case. А вообще, ИМХО самая удачная идея - это все-таки массив. Инициализация его происходит один раз, а дальше - просто обращения к элементам. Простейший вариант будет выглядеть примерно так: ...// В глобальных переменныхPagesLinks : array [0..10] of string;... // В конструкторе формы:PagesLinks[0] := '\html\Predislovie.htm';PagesLinks[1] := '\html\Glava 1.htm';...PagesLinks[10] := '\html\Bib.htm';...procedure TForm1.ListBox1Click(Sender: TObject);begin a:=getcurrentdir; WebBrowser1.Navigate(a+PagesLinks[Listbox1.ItemIndex]);end; Код нагляднеее, да и работать должен быстренько. Но можно пойти и еще дальше. Представь что тебе нужно вставить еще одну страницу между Предисловием и первой главой, например содержание, или отзывы, неважно. Тебе придется руками менять номера элементов всего массива. А еще надо будет проследить, чтобы в ListBbox'е правильно были проставлены названия страниц. А если надо вставить пять - десять страниц? Вот пример еще одного подхода (для краткости кода я сократил количество страниц до четырех): ...// В глобальных переменныхTPages = (pPredislovie, pGlava1, pGlava2, pBib);TPCategory = (pcName, pcLink);Pages : array [TPLCategory][TPages] of string;... // В конструкторе формы:Pages[plcName, pPredislovie] := 'Предисловие';Pages[plcName, pGlava1] := 'Глава 1';Pages[plcName, pGlava2] := 'Глава 2';Pages[plcName, pBib] := 'Литература';Pages[plcLink, pPredislovie] := '\html\Predislovie.htm';Pages[plcLink, pGlava1] := '\html\Glava 1.htm';Pages[plcLink, pGlava2] := '\html\Glava 2.htm';Pages[plcLink, pBib] := '\html\Bib.htm';// ListBox1 изначально должен быть без полей, теперь заполняем:for i:=pPredislovie to pBibbegin Form1.ListBox1.Items.Add(Pages[pcName][i])end...procedure TForm1.ListBox1Click(Sender: TObject);begin WebBrowser1.Navigate(getcurrentdir+Pages[pcLink][Listbox1.ItemIndex]);end; Теперь при добавлении новых страниц смена номеров произойдет сама (кроме добавления перед первой и после последней, там есть небольшие тонкости). К тому же стало проще следить за соответствием названия страницы в ListBox'e и соответствующей ссылки - помогают "говорящие" значения индексов массива, которые однозначно лучше безликих цифр: Pages[plcName, pPredislovie] := 'Предисловие';Pages[plcLink, pPredislovie] := '\html\Predislovie.htm'; Можно работать еще дальше, читать список страниц из файла (это позволит изменять содержание справочника просто добавляя html-файлы со страницами и изменяя в текстовом редакторе файл со списком страниц, при этом перекомпиляция кода не нужна)... Все зависит от твоего желания и настроения. ;) Ссылка на комментарий Поделиться на другие сайты Поделиться
nusya24 Опубликовано 16 февраля, 2006 Жалоба Поделиться Опубликовано 16 февраля, 2006 И ещё: как сделать так чтобы при создании формы в качстве фона грузилась картинка, но не из самого exe'шника, а из файла ресурса? загружаешь Image Editor, открываешь в нем файл ресурсов создаешь новый раздел "Bitmap" В этом разделе создаешь новые "Bitmap" (имя каждого битмапа запомни, он понадобится тебе в коде программы) Только учти что Image editor позволит тебе создать только максимум 256 цветовые изображения, так что лучше воспользоваться каким-нибудь ресторатором. В коде пишеш: var aaa:TPictures; aaa.Bitmap.Handle:=LoadBitmap(HInstance, 'ИМЯ БИТМАПА'); или Image1.Bitmap.Handle:=LoadBitmap(HInstance, 'ИМЯ БИТМАПА'); не забудь создать "aaa" Ссылка на комментарий Поделиться на другие сайты Поделиться
Darth Emil Опубликовано 18 февраля, 2006 Автор Жалоба Поделиться Опубликовано 18 февраля, 2006 По первому и второму вопросу всё решил своим путём. А насчёт ресурсов: как ещё туда html'ки впихнуть и звук? Ссылка на комментарий Поделиться на другие сайты Поделиться
Darth Emil Опубликовано 2 марта, 2006 Автор Жалоба Поделиться Опубликовано 2 марта, 2006 Я воткнул html и wav и картинки с помощью Restorator'а в файл ресурсов. Как теперь их оттуда вытаскивать? Ещё: как сделать так чтобы программа не отображалась на панели задач и в трее, т.е. типа как диалоговое окно? И как сделать так, чтобы можно было таскать прогу за форму, а не только за заголовок? Ссылка на комментарий Поделиться на другие сайты Поделиться
Skif Опубликовано 12 февраля, 2007 Жалоба Поделиться Опубликовано 12 февраля, 2007 Запарился с получением серийника и ключа. Давно уже скачал Делфи 6. Жму на "Join Now!" и попадаю на страницу регистрации. Но эта тварь не хочет меня регить и выдаёт: Server Error in '/' Application An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Кто-нибудь сталкивался с подобной проблемой? Как решали? Ссылка на комментарий Поделиться на другие сайты Поделиться
Skif Опубликовано 14 февраля, 2007 Жалоба Поделиться Опубликовано 14 февраля, 2007 Вопрос снят. Проблему решил. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти