Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Програмируем в Delphi...

Ответить
Настройки темы
Delphi - Програмируем в Delphi...

Аватара для MeXXXanik

Новый участник


Сообщения: 44
Благодарности: 1


Конфигурация

Профиль | Отправить PM | Цитировать


Всем привет! Ладно начинающим програмистам и ламерам посвящяется:
Програмирование в среде Delphi
Ладно сегодня мы поговорим о TICQClient
Своя Ася... (Часть 1)
Первым дело мы возьмем вот этот TICQClient(Нажми сюда )
В нем:
1.FAQ на русике
2.Два примера(Один из них полноценный ICQ клиент)
P.S. Киньте все(Копируйте) в папку lib которая B Delphi
Кидаем на форму 7 Labelов, 4 Edita, 2 ComboBoxa, Кнопку, Memo и TICQClient
Editы:
1.LoginEdit
2.PasswordEdit
3.CountEdit
4.MessageEdit
Labelы
1.UIN
2.Пароль
3.Поисковый параметр
4.Возраст
5.Страна
6.Сколько раз ищем
7.Сообщение
Кнопку Рассылка
Memo очищаем
В TICQClient в поле ICQServer login.icq.com и в ICQPort 5190
Исправим var перед кодом
var
Form1: TForm1;
UinS,NickS: TStringList;

Но на этом я закончу...(не могу дальше...дела)...Так что ждите 2 части...

Отправлено: 12:10, 02-08-2009

 

Аватара для MeXXXanik

Новый участник


Сообщения: 44
Благодарности: 1

Профиль | Отправить PM | Цитировать


Своя Ася... (Часть 2)
Осталось дошкодить наш ICQ клиент(А у меня в стадии разработки полноценный ICQ клиент под названием ICQ Client.P.S. Он в стадии разработки, а я сам его еще делаю, так что дать вам его скачать НЕМОГУ)
Для поиска:
Код: Выделить весь код
function SearchList(SUin:string; SNick:string):string;
var j:integer;
flag: boolean;
begin
flag:=true;
for j:=0 to UinS.Count-1 do
begin
if SUin=UinS.Strings[j] then
begin
flag:=false;
end;
end;
if flag then
UinS.Add(SUin);
NickS.Add(SNick);
end;
Для изменения сообщения:
function Replace(ZNick:string; Repl:string):string;
var Poz:integer;
s:string;
begin
s:=Form1.MessageEdit.Text;
Poz:=Pos(Repl, s);
while Poz>0 do 
begin
if Repl='*' then 
begin
Delete(s, Poz, Length(Repl)); 
Insert(' ', s, Poz);
end
else
begin
Delete(s, Poz, Length(Repl));
Insert(ZNick, s, Poz);
end;
Form1.MessageEdit.Text:=s;
Poz:=Pos(Repl, s);
end;
end;
Для возрастной категории
(Допишите в uses ICQWorks)
function TForm1.GetAgeMin: Word;
begin
case ComboBox1.ItemIndex of
1: Result := 18;
2: Result := 23;
3: Result := 30;
4: Result := 40;
5: Result := 50;
6: Result := 60;
else
Result := 0;
end;
end;
function TForm1.GetAgeMax: Word;
begin
case ComboBox1.ItemIndex of
1: Result := 22;
2: Result := 29;
3: Result := 39;
4: Result := 49;
5: Result := 59;
6: Result := $2710;
else
Result := 0;
end;
end;
OnCreate для Form'ы
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
UinS:=TStringList.Create;
NickS:=TStringList.Create;
ComboBox1.Items.Add('');
ComboBox1.ItemIndex := 0;
ComboBox1.Items.Add('18-22');
ComboBox1.Items.Add('23-29');
ComboBox1.Items.Add('30-39');
ComboBox1.Items.Add('40-49');
ComboBox1.Items.Add('50-59');
ComboBox1.Items.Add('60 and above');
ComboBox2.Items.Add('');
ComboBox2.ItemIndex := 0;
for i := Low(Countries) to High(Countries) do 
ComboBox2.Items.Add(Countries[i].Value);
end;
ONClick для кнопки
if LoginEdit.Text='' then
ShowMessage('Error! Enter UIN!')
else
Memo1.Clear;
ICQClient1.UIN:=StrToInt(LoginEdit.Text);
ICQClient1.Password:=PasswordEdit.Text;
ICQClient1.Login(0); 
OnLogin для ICQClient
procedure TForm1.ICQClient1Login(Sender: TObject);
var
i:integer;
begin
for i:=0 to StrToInt(CountEdit.TExt) do
begin
ICQClient1.SearchWhitePages('','','','',GetAgeMin,GetAgeMax,0,'','',ComboBox2.Items.Strings[ComboBox2.ItemIndex],'','','','','','','','','',true);
end;
for i:=0 to UinS.Count-1 do
begin
if i=0 then
Replace(NickS.Strings[i],'$Nick')
else
begin
Replace(NickS.Strings[i],NickS.Strings[i-1]); 
end;
ICQClient1.SendMessage(StrToInt(UinS.Strings[i]),MessageEdit.Text);
Memo1.Lines.Add('Послано сообщение на '+UinS.Strings[i]+': '+MessageEdit.Text);
end;
ICQClient1.Disconnect;
UinS.Free;
NickS.Free;
end
А вот и все осталось добавить в OnUserFound компонента ICQClient вот этот код
if Nick='' then
SearchList(Uin, '*')
else
SearchList(Uin, Nick);

Вот и все! На следующий раз я может еще че нибудь приделаю и раскажу вам
Но так как это всего лишь пример, я небуду говорить более этого примера...
Ладно ждите продолжение темы "Програмирование в среде Delphi"

Последний раз редактировалось Drongo, 03-08-2009 в 10:40. Причина: Используйте теги [code]...[/code] для оформления кода


Отправлено: 09:38, 03-08-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


MeXXXanik, Если не трудно, оформляйте код тегами [code], а так же делайте отступы в самом коде для удобочитаемости.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 10:42, 03-08-2009 | #3


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


MeXXXanik, то, что вы предлагаете здесь - это моветон.Не надо воспитывать псевдо-программистов,которые умеют только размещать кнопочки на форме и использовать чужие компоненты.
И насчёт компонента.Если это тот самый от coban2k, то он скорее всего устарел,ибо давно не обновлялся,а протокол ICQ не так давно был сменён.
Так что выкиньте свой Дельфи вместе с его VCL.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 12:57, 03-08-2009 | #4


Аватара для MeXXXanik

Новый участник


Сообщения: 44
Благодарности: 1

Профиль | Отправить PM | Цитировать


Ойй После Новой Винды(И нетолько!)Пришло время рассказать снова о Delphi. А почему? С помощью Дельфи может создать прогу с кодом ____(Сюда Компонент(Имя)).Visible:=True что позволит тебе спрятать ,например тайное послание. Но сегодня не об этом... Сегодня будем писать себе проигрыватель музыки
Сам Себе Музыкант (О компоненте BASS_._)
И так начнем с нужного:
1.BASS _._(Любой версии, а лучше последний)Вот он
2.Знание
3.Прямые руки

Код: Выделить весь код
1) function BASS_Init(device: Integer; freq, flags: DWORD; win: HWND): BOOL;
Инициализирует BASS. Здесь:
device: 0 - первое устройство, -1 - по умолчанию, -2 - без звука.
freq - частота. Обычно - 44100.
flags - флаги. Например, BASS_DEVICE_MONO даст моно, а BASS_DEVICE_VOL1000 позволит тебе измерять громкость по шкале от 0 до 1000, по умолчанию - до 100. Если такие настройки тебе не нужны, ставь 0.

2) function BASS_CDInit(drive: PChar; flags: DWORD): BOOL;
Инициализирует CD функции.
drive - ставь 0.
flags - флаги - опции для громкости. Один ты уже видел выше (который 1000), а второй выглядит так: BASS_DEVICE_LEAVEVOL. Это громкость по умолчанию.

3) function BASS_Start: BOOL;
Открытие звукового выхода или resume после паузы.

Функции для работы с CD(Так как в новых версия я  не нашел)

1) function BASS_CDDoor(open:BOOL): BOOL; Выдвигает лоток сидюка, если ты передал ей TRUE. Если false, то лоток втягивается обратно.

2) function BASS_CDInDrive: BOOL;
Выясняет, есть ли аудио-CD в сидюке. Если есть, то возвращает TRUE.

3) function BASS_CDGetTracks:DWORD;
Получает количество треков на диске. Его, соответственно, и возвращает.

4) function BASS_CDGetTrackLength(track:DWORD):DWORD;
Возвращает длину трека в миллисекундах.
track - номер трека.

5) function BASS_CDPlay(track: DWORD; loop: BOOL; wait: BOOL): BOOL;
Играет заданный трек.
track - номер трека.
loop - если true, то играем циклически, наоборот - один раз.
wait - ждать или нет перед проигрышем.

6) procedure BASS_CDFree;
Освобождает ресурсы, занятые CD-аудио.

Функции для работы со звуковыми файлами

1) function BASS_StreamCreateFile(mem: BOOL; f: Pointer; offset, length, flags: DWORD): HSTREAM;
Создает звуковой поток из локального файла, к каковым относятся mp3, mp2, mp1, OGG и WAV. Файл может быть как на диске, так и в оперативке.
mem - если TRUE, то файл в оперативке. Если FALSE - то на диске. f - имя файла (если он на диске).
offset - смещение, с которого надо начинать. Обычно я начинаю с начала, но если у тебя другое мнение - сообщи его этому аргументу.
length - необходимое количество данных. Если ты хочешь использовать все до конца файла, то просто ставь 0.
flags - ставь 0.
Функция возвращает переменную типа HSTREAM, которая и есть хэндл новорожденного потока.

2) function BASS_StreamCreateURL(URL: PChar; offset: DWORD; flags: DWORD; save: PChar):HSTREAM;
То же, что и предыдущая функция, но поток создается не из локального, а из удаленного файла. Откуда и следуют новые аргументы:
URL - урл к файлу. Может начинаться либо с http://, либо с ftp://.
save - путь, куда класть закачанный файл. Если здесь null, значит не надо никуда сохранять.

3) function BASS_StreamGetLength(handle: HSTREAM): QWORD;
Получает приблизительную длину потока в байтах. 
handle - получаем с помощью двух предыдущих функций.
Если размер в байтах тебя не удовлетворяет, воспользуйся функцией BASS_ChannelSeconds2Bytes. В ней нет ничего сложного, но она возвратит тебе уже секунды.

4) function BASS_StreamPlay(handle: HSTREAM; flush: BOOL; flags: DWORD): BOOL;
Играет заданный поток.
handle - хэндл потока.
flush - если false, поток можно приостанавливать, затем играть с места остановки. Если true, то остановка грозит возвращением к началу.
flags - если здесь будет стоять BASS_SAMPLE_LOOP, то поток будет играть ВЕЧНО.

5) function BASS_ChannelPause(handle: DWORD): BOOL;
Ставит паузу в воспроизведении чего угодно - CD, потока, сэмпла. Главное - скормить ей хэндл, который и является единственным аргументом. 

6) function BASS_ChannelResume(handle: DWORD): BOOL;
Функция, обратная предыдущей.

7) function BASS_ChannelSetAttributes(handle: DWORD; freq, volume, pan: Integer): BOOL;
Функция, устанавливающая атрибуты воспроизведения заданного канала. Под термином "канал" разработчики понимают все воспроизводимое и записываемое: HCHANNEL/HMUSIC/HSTREAM или CDCHANNEL/RECORDCHAN. Короче, годится для всего, поскольку свойства эти общие:
handle - хэндл канала (см. 2 строчки выше).
freq - частота в герцах. Если здесь -1, останется текущая.
volume - громкость - от 0 до 100. -1 оставляет дефолтовую.
pan - баланс - (-101) - текущий, (-100) - влево, 0 - центр, 100 - вправо.

8) function BASS_ChannelGetAttributes(handle: DWORD; var freq, volume: DWORD; var pan: Integer): BOOL;
Получает атрибуты канала. Переменные такие же, как и в предыдущей функции. Если не хочешь получать какое-нибудь свойство, ставь null.

9) function BASS_ChannelSetPosition(handle: DWORD; pos: QWORD): BOOL;
Сдвигает позицию проигрывания на pos вперед. А это самое pos имеет разные значения в зависимости от хэндла; например, для CDCHANNEL - это количество в миллисекундах, считая от начала трека, а для HSTREAM - позиция в байтах. Получить позицию можно, соответственно, с помощью функции BASS_ChannelGetPosition.

Вот на этом я пожалуй закончу... А в продолжение сделаем форму и дошкодим

-------
I'l be back


Последний раз редактировалось MeXXXanik, 05-08-2009 в 14:32. Причина: Ко е че подправил


Отправлено: 14:27, 05-08-2009 | #5


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


MeXXXanik, источник лучше указывать сразу Delphi: Свой WinAMP в подарочной упаковке - Лозовский Александр, журнал Xakep, номер 57 (сентябрь 2003го года), стр 86.
Но не будем на этом останавливаться, у меня практический вопрос: как ловится конец песни и переход на следующую если нужно организовать проигрывание по плей листу? В Хакере на этом моменте не остановились.
Спасибо.
P.S. Сам-то я эту библиотеку давно как не использую и по части использования "готовых кирпичей" согласен с DillerInc, но вот нерешенный в прошлом вопрос остался.

Отправлено: 14:48, 05-08-2009 | #6


Аватара для MeXXXanik

Новый участник


Сообщения: 44
Благодарности: 1

Профиль | Отправить PM | Цитировать


1,Я Небрал с журнала Хакер! я брал из своей книги (Подарили на днюху)
2.Некоторые компоненты уменя были на диске в месте с местом их скачивания

-------
I'l be back


Отправлено: 15:47, 05-08-2009 | #7


Аватара для MeXXXanik

Новый участник


Сообщения: 44
Благодарности: 1

Профиль | Отправить PM | Цитировать


Сам Себе Музыкант( Торжественная доделка )
С BASS'ом разобрались. Приступим к выресовки формы.
На форму Edit/TImage(Может добавите картинку?)/TrackBar/6 Buttons/ListBox/Label/OpenDialog/2 RadioButton
Называем(Caption):
2 RadioButton-В CD
1 RadioBUtton-В Файле
1 Button-Воспр.
2 Button-Стоп
3 Button-Пауза
4 Button-Добавить
5 Button-Показать инфу
6 Button-Удалить из списка
Label-Громкость
Придется мне завершить на этом. Остался кодинг.Ждите!

-------
I'l be back


Отправлено: 19:47, 05-08-2009 | #8


Аватара для un1qum

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Извините, честно я не знаю как принято у вас на форуме, но имхо это полный бред.
во первых - запах плагиата ужасающий
во вторых - смысл статьи теряется..научить людей использовать чужие компоненты заточенные под Tmyplayer.play?
Если так то лучше напишите статью о правильной установке этих компонентов на русском + ссылки на официальную документацию.
Было бы полезно выложить реализации функции для работы с этими компонентами.

Отправлено: 07:25, 05-07-2012 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


un1qum, Вас не смутило, что:

читать дальше »
1) к форуму автор имеет ровно то же отношение — «участник», что и я, и Вы, не более;
2) в незаконченной теме никто ничего не писал почти три года;
3) сам автор и вовсе не появлялся на форуме уже больше года;

?!

P.S. Если посмотрите внимательно в его профиль — поймёте, что требовать от него какие-либо «статьи» что в том возрасте, что сейчас — пока бессмысленно.

Отправлено: 08:42, 05-07-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Програмируем в Delphi...

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - Delphi | UpperCase на Delphi 7 Cognolio Программирование и базы данных 3 26-01-2006 15:42
Delphi - Delphi Surround Программирование и базы данных 11 10-01-2004 22:13
Delphi - Delphi Zx Программирование и базы данных 3 27-08-2003 10:19
Delphi - Delphi Surround Программирование и базы данных 10 27-06-2003 17:58
Delphi - Delphi Roman Go Программирование и базы данных 11 11-12-2002 14:43




 
Переход