Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

X-Program ПО, новости сайта и программирование в Delphi7


Информационный Канал Subscribe.Ru

KorAl ::: Программирование в Delphi ICQ - 322284039
SMS - 89086491535
Email - Задать вопрос | Сделать предложение | Критика и пожелания
| Форум по Delphi | Исходники и компоненты | Наши программы | Архив рассылки |
· Вопросы подписчиков ·
· Опции проекта · Работа с чужими окнами · Алгоритим быстрой сортировки массива · Автоматическое получение следующего имени файла в каталоге ·
Вопросы подписчиков
Dima
Здравствуйте, x-program.
Зравствуйте уважаемые Эксперты
Вопрост довольный интересный...
Технология клиент-сервер(есть SQL база и удаленный клиент)
В базе данных заведен один пользователь для подключения
Клиент подключается через ODBC под этим пользователем.
Клиентов много - пользователь один :((больше нельзя)
Как мне идентифицировате пользователей подключающихся к базе?
Допустим я создам табличку с пользователями в базе, но как мне программно
заставить их логиниться и идентифицироваться в этой табличке.
Заранее спасибо
Если можно, кусочек исходника, но можно и статьи по этому поводу.
Timur
Имеется программа на «С»:



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)
SOURCE
Здравствуйте, x-program.

Как в 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
Отписаться

В избранное