Darth Emil Posted February 14, 2006 Report Share Posted February 14, 2006 Есть пара вопросов по делфи. 1. Используя компонент ListBox, при щелчке на пунктах открывается в WebBrowser(точное название компонента не помню) разные html. Как сократить код? Т.е. чтобы постоянно не прописывать что если выбран пункт 1, то откроется 1, 2-2? Массив завести? 2. Как в Delphi 6 в программах сделать кнопки XP'шные? В стиле ХР, а не квадратны классические? Link to comment Share on other sites More sharing options...
nusya24 Posted February 14, 2006 Report Share Posted February 14, 2006 1. Используя компонент ListBox, при щелчке на пунктах открывается в WebBrowser(точное название компонента не помню) разные html. Как сократить код? Т.е. чтобы постоянно не прописывать что если выбран пункт 1, то откроется 1, 2-2? Массив завести? имя html файлов сделать одинаковыми в конце каждого имени ставить номер соответствующий номеру строки listbox комбинировать: имя файла + номер строки listbox (они начинаются с нуля) + расширение открывать полученный файл 2. Как в Delphi 6 в программах сделать кнопки XP'шные? В стиле ХР, а не квадратны классические? можно попробовать использовать манифест (если не ошибаюсь, манифест только для Win XP) а можно перерисовывать изображение кнопки Link to comment Share on other sites More sharing options...
Darth Emil Posted February 15, 2006 Author Report Share Posted February 15, 2006 (edited) 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'шника, а из файла ресурса? Edited February 15, 2006 by Darth Emil Link to comment Share on other sites More sharing options...
gvozd Posted February 16, 2006 Report Share Posted February 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> Link to comment Share on other sites More sharing options...
Shurr Posted February 16, 2006 Report Share Posted February 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-файлы со страницами и изменяя в текстовом редакторе файл со списком страниц, при этом перекомпиляция кода не нужна)... Все зависит от твоего желания и настроения. ;) Link to comment Share on other sites More sharing options...
nusya24 Posted February 16, 2006 Report Share Posted February 16, 2006 И ещё: как сделать так чтобы при создании формы в качстве фона грузилась картинка, но не из самого exe'шника, а из файла ресурса? загружаешь Image Editor, открываешь в нем файл ресурсов создаешь новый раздел "Bitmap" В этом разделе создаешь новые "Bitmap" (имя каждого битмапа запомни, он понадобится тебе в коде программы) Только учти что Image editor позволит тебе создать только максимум 256 цветовые изображения, так что лучше воспользоваться каким-нибудь ресторатором. В коде пишеш: var aaa:TPictures; aaa.Bitmap.Handle:=LoadBitmap(HInstance, 'ИМЯ БИТМАПА'); или Image1.Bitmap.Handle:=LoadBitmap(HInstance, 'ИМЯ БИТМАПА'); не забудь создать "aaa" Link to comment Share on other sites More sharing options...
Darth Emil Posted February 18, 2006 Author Report Share Posted February 18, 2006 По первому и второму вопросу всё решил своим путём. А насчёт ресурсов: как ещё туда html'ки впихнуть и звук? Link to comment Share on other sites More sharing options...
Darth Emil Posted March 2, 2006 Author Report Share Posted March 2, 2006 Я воткнул html и wav и картинки с помощью Restorator'а в файл ресурсов. Как теперь их оттуда вытаскивать? Ещё: как сделать так чтобы программа не отображалась на панели задач и в трее, т.е. типа как диалоговое окно? И как сделать так, чтобы можно было таскать прогу за форму, а не только за заголовок? Link to comment Share on other sites More sharing options...
Skif Posted February 12, 2007 Report Share Posted February 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. Кто-нибудь сталкивался с подобной проблемой? Как решали? Link to comment Share on other sites More sharing options...
Skif Posted February 14, 2007 Report Share Posted February 14, 2007 Вопрос снят. Проблему решил. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now