|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Програмируем в Delphi... |
|
Delphi - Програмируем в Delphi...
|
Новый участник Сообщения: 44 |
Профиль | Отправить 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 |
Новый участник Сообщения: 44
|
Профиль | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать MeXXXanik, Если не трудно, оформляйте код тегами [code], а так же делайте отступы в самом коде для удобочитаемости.
|
------- Отправлено: 10:42, 03-08-2009 | #3 |
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать MeXXXanik, то, что вы предлагаете здесь - это моветон.Не надо воспитывать псевдо-программистов,которые умеют только размещать кнопочки на форме и использовать чужие компоненты.
И насчёт компонента.Если это тот самый от coban2k, то он скорее всего устарел,ибо давно не обновлялся,а протокол ICQ не так давно был сменён. Так что выкиньте свой Дельфи вместе с его VCL. |
------- Отправлено: 12:57, 03-08-2009 | #4 |
Новый участник Сообщения: 44
|
Профиль | Отправить 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. Вот на этом я пожалуй закончу... А в продолжение сделаем форму и дошкодим |
|
------- Последний раз редактировалось MeXXXanik, 05-08-2009 в 14:32. Причина: Ко е че подправил Отправлено: 14:27, 05-08-2009 | #5 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать MeXXXanik, источник лучше указывать сразу Delphi: Свой WinAMP в подарочной упаковке - Лозовский Александр, журнал Xakep, номер 57 (сентябрь 2003го года), стр 86.
Но не будем на этом останавливаться, у меня практический вопрос: как ловится конец песни и переход на следующую если нужно организовать проигрывание по плей листу? В Хакере на этом моменте не остановились. Спасибо. P.S. Сам-то я эту библиотеку давно как не использую и по части использования "готовых кирпичей" согласен с DillerInc, но вот нерешенный в прошлом вопрос остался. |
Отправлено: 14:48, 05-08-2009 | #6 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать 1,Я Небрал с журнала Хакер! я брал из своей книги (Подарили на днюху)
2.Некоторые компоненты уменя были на диске в месте с местом их скачивания |
------- Отправлено: 15:47, 05-08-2009 | #7 |
Новый участник Сообщения: 44
|
Профиль | Отправить 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-Громкость Придется мне завершить на этом. Остался кодинг.Ждите! |
------- Отправлено: 19:47, 05-08-2009 | #8 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Извините, честно я не знаю как принято у вас на форуме, но имхо это полный бред.
во первых - запах плагиата ужасающий во вторых - смысл статьи теряется..научить людей использовать чужие компоненты заточенные под Tmyplayer.play? Если так то лучше напишите статью о правильной установке этих компонентов на русском + ссылки на официальную документацию. Было бы полезно выложить реализации функции для работы с этими компонентами. |
Отправлено: 07:25, 05-07-2012 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 08:42, 05-07-2012 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|