Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Веб-разработка: пособие начинающим" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
X-Program ПО, новости сайта и программирование в Delphi7
Информационный Канал Subscribe.Ru |
![]() |
ICQ - 322284039 SMS - 89086491535 Email - Задать вопрос | Сделать предложение | Критика и пожелания |
![]() |
| Форум по Delphi | Исходники и компоненты | Наши программы | Архив рассылки | |
![]() |
·
Вопросы подписчиков
· · Опции проекта · Работа с чужими окнами · Алгоритим быстрой сортировки массива · Автоматическое получение следующего имени файла в каталоге · |
Вопросы подписчиков | |||
Зравствуйте уважаемые Эксперты Вопрост довольный интересный... Технология клиент-сервер(есть SQL база и удаленный клиент) В базе данных заведен один пользователь для подключения Клиент подключается через ODBC под этим пользователем. Клиентов много - пользователь один :((больше нельзя) Как мне идентифицировате пользователей подключающихся к базе? Допустим я создам табличку с пользователями в базе, но как мне программно заставить их логиниться и идентифицироваться в этой табличке. Заранее спасибо Если можно, кусочек исходника, но можно и статьи по этому поводу.
Beta.h #ifndef __BETA_H__ class Beta { public: Beta(double u, double w); double value(double x); double inv(double p); private: double a,b, logBeta; double fraction(double a, double b, double x); }; #define __BETA_H__ #endif Beta.c #include "beta.h" Beta::Beta(double u, double w): a(u), b(w), logBeta(logGamma(a) + logGamma(b) - logGamma(a + b)) { assert(a > 0 && b > 0); } double Beta::fraction(double a, double b, double x) { ……….. ………… }/*incBeta_fraction*/ double Beta::value(double x) { … … }/*value*/ double Beta::inv(double p) { … … }/*inv*/ Подскажите, как перевести определение и реализацию класса, в приведенных выше программах на PASCAL (Delphi7)
Как в Memo вывести имена директорий на указанном диске? Имя диска хранится в переменной типа String. |
Опции проекта |
Существует огромное количество опции, которые можно изменять при разработке проекта. Они представлены на вкладках диалогового окна Project Options (см. рис. 1.14). Вы всегда можете установить опции по умолчанию, отключив переключатель Default в нижнем левом углу диалогового окна Project Options. заметку Forms Раскрывающийся список Main form определяет главную форму вашего приложения, которую Delphi выводит первой и закрывает, когда приложение завершает работу. Два списка. Auto-create forms и Available forms, позволяют определить автоматически создаваемые формы. Application Поле Title определяет название вашего приложения, выводимого в панели задач (например, Delphi устанавливает его по имени текущего проекта). Если вы не введете названия, будет использоваться название, установленное по умолчанию (DELPHI32). Поле Help file определяет файл справки, подключаемый к вашему приложению, что позволяет использовать систему контекстной справки. Кнопка Load Icon позволяет установить пиктограмму приложения, используемую как пиктограмму по умолчанию в ярлыках и панели задач. С помощью последней опции. Target file extension, можно переопределить стандартное расширение создаваемого файла (DLL — для динамически линкуемых библиотек, ОСХ — для элементов ActiveX и т.п.). Однако это расширение можно не устанавливать, так как Delphi весьма корректно работает по умолчанию. Compiler Вкладка компилятора содержит огромное количество переключателей, позволяющих устанавливать опции компилятора. Две особенно полезные опции. Show hints и Show warnings, помогут вам при отладке (при этом компилятор будет выдавать множество предупреждений, например об использовании неинициализированной переменной). Linker Опция Map file полезна для тех программистов, которые интересуются технической информацией, например адресами сегментов, стартовым адресом программы и т.п. Linker output определяет, что именно будет выдавать компилятор — Delphi Compiled Unit (DCU) или объектные файлы (OBJ). Последние могут применяться, например, при разработке программ с использованием двух языков. Опции ЕХЕ и DLL позволяют создавать консольные приложения, описанные в разделе "Создание консольного приложения", и включать отладочную информацию, о которой подробно рассказывается в главе 2, "Тестирование и отладка". Memory sizes определяет минимальный и максимальный размеры стека приложения и устанавливает предпочтительный базовый адрес для вашей DLL. Если ваша программа часто использует глубокую рекурсию или большие локальные переменные, увеличьте размер стека. Базовый адрес лучше не изменять, если вы не совсем уверены в том, что собираетесь делать. ЕХЕ Description представляет возможность внести в ЕХЕ или DLL строку описания приложения (что-то вроде "MixFix (С) 1993-1997 KIV without Co"). Directories/Conditionals Установки Output и Unit output определяют, где компилятор размещает ЕХЕ или DLL, а также скомпилированные модули. Если оставить опции незаполненными, создаваемые модули будут располагаться там же, где и исходные тексты, а выходные выполняемые файлы или DLL — в папке проекта. Conditional defines определяют флаги, проверяемые в процессе компиляции и используемые, как правило, для включения или исключения блоков кода из проекта при компиляции. Unit Aliases существует для совместимости со старыми версиями Delphi (в свое время модуль Windows был разбит на два файла и для сборки одного модуля следовало присвоить один и тот же псевдоним Windows обоим файлам). VersionInfo Вкладка Versionlnfo дает возможность добавить к выполняемому модулю или DLL информацию о версии— Major Version, Minor Version и File Description. Действительно полезную возможность предоставляет Auto-increment build number, заставляя Delphi всякий раз увеличивать номер выпуска при компиляции программы. Раздел Module Attributes позволяет включать флаги, такие как Debug Build, в приложение. Выбор опций не влияет на процесс компиляции — они используются только в информативных целях. Packages Вкладка Packages позволяет определить, какие пакеты доступны для использования при разработке приложения, и прилинковать их при создании результирующего файла. Группа Design packages предоставляет список зарегистрированных пакетов, которые можно выбрать для использования в приложении. Группа Runtime packages дает возможность определить, какие пакеты компоновщик будет использовать при построении выходного файла. По умолчанию опция Build with runtime packages отключена, а это означает, что все объекты из VCL будут скомпонованы с вашим приложением. Включение опции означает, что ваше приложение будет разделять с другими приложениями Delphi одну копию пакетов. |
Работа с чужими окнами |
SWP_NOSIZE - если указан этот параметр, то 5й и 6й параметры учитываться не будут, т.е. окно менять размер не будет (этот параметр указан в нашем примере ) SWP_NOMOVE - если указан этот параметр, то 3й и 4й параметры учитываться не будут, т.е. окно не будет перемещаться. SWP_SHOWWINDOW - после проделаных действий над окном ( перемещением и изменением размера ) окно будет показано ( работает только если окно было спрятано) Теперь можно и текст изменить... Вот, например, есть у вас какое-нибудь окно, допустим заголовок у него все тот же - 1.txt - Блокнот. Как же из своей программы поменять заголовок у этого окна? А очень просто: //Поместите этот код в процедуру обработки события нажатия на кнопку setwindowtext (findwindow(nil,'1.txt - Блокнот'),'Окно By Vasya Pupkin') //--------------------------------------------------------------------------------- Запустите программу, нажмите на кнопку и...о чудо - окно названо вашим именем :-) Функция setwindowtext имеет 2 параметра : Первый - заголовок окна, у которого будем менять заголовок. (Простите за каламбур). Он определяется через функцию "ловли" окна: findwindow(nil,'1.txt - Блокнот') , где 1.txt - Блокнот и есть тот самый (начальный) заголовок окна Второй - новый заголовок (типа String) Есть еще одна интересная функция, которая может вам пригодиться. Это - Showwindow. Используя ее вы сможете прятать ( и, естественно, показавать обратно) окна. Использование этой функции еще легче, чем использование предыдущих: Showwindow(findwindow(nil,'1.txt - Блокнот'),sw_hide); После выполнения программы окно "1.txt - Блокнот" будет спрятано (но не закрыто!). У этой функции тоже 2 параметра: Первый - заголовок окна. Он определяется через функцию "ловли" окна: findwindow(nil,'1.txt - Блокнот') , где 1.txt - Блокнот заголовок окна Второй - указания, что делать: SW_HIDE -Прятать окно SW_MAXIMIZE -Максимизировать окно SW_MINIMIZE -Минимизировать окно SW_SHOW -показать окно (Его надо вызывать если вы хотите показать уже спрятанное окно) Еще один способ передачи комманд окнам - это использование функции Postmessage. Например, чтобы закрыть окно с заголовком "1.txt - Блокнот" вставьте этот код в процедуру обработки события нажатия на кнопку: postmessage(findwindow(nil,'1.txt - Блокнот'), wm_quit,0,0); Если у вас было запущено окно с заголовком 1.txt - Блокнот, то оно закроется. Postmessage имеет несколько параметров, и в различных случаях они разные. Вот некий шаблон использования Postmessage: postmessage( findwindow(nil,'заголовок окна'), wm_команда, парам3, парам4); В первом параметре - findwindow(nil,'заголовок окна') вы передаете заголовок окна. Второй пареметр - комманда, указывающая какое действие должно совершиться над окном ( в данном примере эта комманда - WM_QUIT, она закрывает окно). Все эти комманды начинаются на WM_ (wm_size, wm_quit, и т.д.) Третий и четвертый параметры(парам3 и парам4) - это параметры wm_комманды. Чтобы получить сведения о этих параметрах( да и о самих wm_коммандах) откройте справку Delphi (ПУСК=>Программы=> Borland Delphi => HELP=> MS SDK Help Files=> Win32 Programmer's Reference) откройте вкладку "Указатель" и наберите WM_ и вы увидете целый список этих комманд. Если вы хотите узнать параметры для данной wm_комманды, откройте справку по этой wm_комманде и там вы увидете, какие должны быть параметры. |
Алгоритим быстрой сортировки массива |
Функция, показывающая пример реализации алгоритма быстрой сортировки целочисленного массива. Легко может быть переработан для массивов другого типа или объектов типа TList, TStringList и т. д. Используемые параметры IntArray - указатель на первый элемент массива. ВАЖНО! Индекс первого элемента массива обязательно должен быть нулевым. Low - минимальный индекс элемента массива High - максимальный индекс элемента массива Зависимости: нет Автор: Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург Copyright: http://www.rsdn.ru/article/?alg/bintree/sort.xml Дата: 21 мая 2002 г. ***************************************************** } type PIntArray = ^TIntArray; TIntArray = array[0..0] of Integer; procedure QuickSort(IntArray: PIntArray; Low, High: Integer); procedure Swap(Index1, Index2: Integer); var N: Integer; begin N:=IntArray[Index1]; IntArray[Index1]:=IntArray[Index2]; IntArray[Index2]:=N; end; var Mid: Integer; Item: Integer; ScanUp, ScanDown: Integer; begin if High - Low <= 0 then exit; if High - Low = 1 then begin if IntArray[High] > IntArray[Low] then Swap(Low, High); Exit; end; Mid:=(High + Low) shr 1; Item:=IntArray[Mid]; Swap(Mid, Low); ScanUp:=Low+1; ScanDown:=High; repeat // Здесь реализована сортировка по убыванию // Для реализации по возрастанию замените операции // сравнения на приведённые в комментариях while (ScanUp <= ScanDown) and (IntArray[ScanUp] {<=} >= Item) do Inc(ScanUp); while (IntArray[ScanDown] {>} < Item) do Dec(ScanDown); if (ScanUp < ScanDown) then Swap(ScanUp, ScanDown); until (ScanUp >= ScanDown); IntArray[Low] := IntArray[ScanDown]; IntArray[ScanDown] := Item; if (Low < ScanDown - 1) then QuickSort(IntArray, Low, ScanDown - 1); if (ScanDown + 1 < High) then QuickSort(IntArray, ScanDown+1, High); end; Пример использования: procedure TForm1.Button1Click(Sender: TObject); var A: array [0..10] of Integer; i: Integer; begin Randomize; for i:=0 to 10 do A[i]:=Random(1000); QuickSort(@A, 0, 10); for i:=0 to 10 do Memo1.Lines.Add(IntToStr(A[i])); end; |
Автоматическое получение следующего имени файла в каталоге |
Функция предоставляет Вам каждый раз новое имя файла, а если список файлов исчерпан, начинает перебор снова. Может пригодиться при написании Вашего собственного слайдшоу с фотографиями или в похожих задачах, где важно не повторить до конца списка уже воспроизведённый файл. Зависимости: Windows, Messages, SysUtils, Classes, DIALOGS; Автор: Igor Kovalevsky, pc-ambulance@mail.ru, Владикавказ Copyright: Igor Kovalevsky Дата: 1 июня 2002 г. ***************************************************** } function GetNextFileName( Path : String ) : String; const ListFileName = 'ListFile.lst'; FileMask = '*.*' var SearchRec : TSearchRec; begin with TStringList.Create do begin if FileExists(ListFileName) then begin LoadFromFile(ListFileName); end; if FindFirst(IncludeTrailingBackslash(Path) + FileMask, faAnyFile and not faDirectory, SearchRec) = 0 then begin // Редкий случай, когда цикл repeat..until // на что-то годится repeat Result := SearchRec.Name; if (FindNext( SearchRec ) <> 0) then begin Clear; end; until (IndexOf(Result) = -1); Add( Result ); FindClose( SearchRec ); end else begin Result := ''; end; SaveToFile(ListFileName); Free; end; end; Пример использования: ShowMessage(GetNextFileName( 'C:\Windows\' )); |
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.program |
Отписаться |
В избранное | ||