Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 12.08.2014
Сообщений: 30

Нажатием кнопки запустить рамдомно 3 сайта из списка

03.09.2014, 03:46. Показов 1416. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста. Нужно нажатием одной кнопки запустить случайным образом заданное количество интернет ссылок из определённого списка. Допустим в списке 10 разных ссылок, и нажатием кнопки 3 из них случайным образом открываются браузером по умолчанию. Открытые не должны повторяться т.е. при нажатии кнопки не должны открыться 2 ссылки № 5 или другие одинаковые.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2014, 03:46
Ответы с готовыми решениями:

Запустить файл нажатием кнопки
Всем привет!Как в Microsoft Visual Studio 2010 сделать так чтобы при нажатии на Button запускался файл C:\file.exe или какой не буть...

Одним нажатием кнопки запустить mp3 и соответствующий вордовский файл
Вопрос важный,ибо мучаюсь уже года 2. Как можно одним нажатием кнопки на иконку запустить имеющийся на HD mp3 файл (можно даже конкретный...

Как нажатием кнопки формы запустить новый проект текущего решения?
Подскажите пожалуйста, как нажатием кнопки формы запустить новый проект текущего решения?

14
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
03.09.2014, 09:09
если ссылок не очень много (меньше тысячи), то не морочьтесь, загоняйте ссылки в TStringList, генерите случайное значение
Delphi
1
RndIndex := MyList.Strings[  Random(MyList.Count) ]
,
найденную ссылку запускайте и удаляйте из стринглиста.
Повторяйте цикл нужное число раз.
готово!
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.09.2014, 09:24
Если номера ссылок от 0 до 255, то можно генерировать еще и так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var m:set of byte;
     i,n,k:byte;
begin
randomize;
n:=MyList.Count;
m:=[];
for i:=1 to 3 do
 begin
  repeat
   k:=random(n);
  until not(k in m) ;
  //открываем ссылку номер MyList[k]
 end;
1
1 / 1 / 0
Регистрация: 12.08.2014
Сообщений: 30
03.09.2014, 15:10  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
var m:set of byte;
* * *i,n,k:byte;
begin
randomize;
n:=MyList.Count;
m:=[];
for i:=1 to 3 do
*begin
* repeat
* *k:=random(n);
* until not(k in m) ;
* //открываем ссылку номер MyList[k]
*end;
А какой модуль нужно задействовать в uses, а то у меня на пятую строку ругается, говорит "Undeclared identifier: 'MyList'"
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.09.2014, 15:15
Так переменную объявит нужно.
Delphi
1
2
3
4
var MyList:TStringlist;
begin
MyList:=TStringlist.Create;
..........................
Добавлено через 1 минуту
Вы пишете
Цитата Сообщение от victorius-82 Посмотреть сообщение
из определённого списка.
Я думаю Вы должны знать о классе TStringlist
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
03.09.2014, 15:20
victorius-82, где у Вас ссылки находятся? уж не в текстовом ли файлике?
0
1 / 1 / 0
Регистрация: 12.08.2014
Сообщений: 30
03.09.2014, 15:22  [ТС]
Мыслите вы логично - должнен знать, но не знаю, я с делфи и с паскалем 3 день как разбираюсь, поэтому, знания общие, а практира почти ноль. Но возникла задача и я пытаюсь её решить. Если не сложно напишите пожалуйста полный текст программы хотя бы для списка из трёх сайтов скажем mail.ru, vk.com, ok.ru и что бы 2 из них запускались рамдомно по нажатию клавиши. Буду очень признателен если сопроводите комментариями то, что происходит в программе, хочу разобраться как всё работает.

Добавлено через 54 секунды
нет ссылки не в текстовом файле, это вообще не важно, мне нужно понять как это работает, т.е. ссылки я могу и через делфи забить
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
03.09.2014, 16:10
код на кнопку:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
procedure TForm1.Button1Click(Sender: TObject);
var MyList:TStringlist;
    m:set of byte;
    i,n,k:byte;
    sUrl : string;
begin
  randomize;
 
  MyList:=TStringlist.Create;
  try
 
    // можно прочитать ссылки из текстового файла
    //   MyList.LoadFromFile('ВашФайл_с_ссылками.txt');
   // или вручную заполним
   MyList.Append('http://mail.ru');
   MyList.Append('http://vk.com');
   MyList.Append('http://ok.ru');
   MyList.Append('http://google.ru');
   MyList.Append('http://ya.ru');
   MyList.Append('http://yandex.ru');
   MyList.Append('https://www.cyberforum.ru/');
 
 
   n := MyList.Count;
   if n>255 then n := 255; {если ссылок больше 255 - то остальные игнорим!}
 
   m:=[];
   for i:=1 to 3 do {сколько случайных надо выбрать. в данном случае - три ссылки}
   begin
      repeat
        k:=random(n);
      until not(k in m);
 
      sUrl := MyList.Strings[k];
      //открываем ссылку
      ShellExecute(0,'open',PChar(sUrl),'','',SW_SHOWNORMAL);
    end;
  finally
    MyList.Free;
  end;
end;
p.s. обратите внимание, что данный алгоритм работает только с числом ссылок до 255.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
03.09.2014, 16:21
Цитата Сообщение от Sergio Leone Посмотреть сообщение
данный алгоритм работает только с числом ссылок до 255.
А если сделать вот так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
procedure TForm1.Button1Click(Sender: TObject);
var
  MyList: TStringList;
  i, Rnd: Integer;
begin
  randomize;
  MyList := TStringList.Create;
  try
    // можно прочитать ссылки из текстового файла
    // MyList.LoadFromFile('ВашФайл_с_ссылками.txt');
    // или вручную заполним
    MyList.Append('http://mail.ru');
    MyList.Append('http://vk.com');
    MyList.Append('http://ok.ru');
    MyList.Append('http://google.ru');
    MyList.Append('http://ya.ru');
    MyList.Append('http://yandex.ru');
    MyList.Append('https://www.cyberforum.ru/');
 
    for i := 0 to 2 do
    begin
      Rnd := Random(MyList.Count - i);
      ShellExecute(0, 'open', PChar(MyList[Rnd]), '', '', SW_SHOWNORMAL);
      MyList.Move(Rnd, MyList.Count - 1);
    end;
  finally
    MyList.Free;
  end;
end;
, то данное ограничение будет неактуально... Работает с любым количеством ссылок...
1
1 / 1 / 0
Регистрация: 12.08.2014
Сообщений: 30
03.09.2014, 16:25  [ТС]
А что вверху программы в uses? А копирую в делфи, выдаёт ошибку "Errou in module Unit1: Declfration of class TForm1 is missing or incorect."
0
174 / 160 / 71
Регистрация: 22.02.2013
Сообщений: 1,769
Записей в блоге: 2
03.09.2014, 16:32
Цитата Сообщение от Sergio Leone Посмотреть сообщение
n := MyList.Count;
почему бы n не сделать int? тогда ограничений не будет
Цитата Сообщение от Sergio Leone Посмотреть сообщение
if n>255 then n := 255; {если ссылок больше 255 - то остальные игнорим!}
вообще никогда не отработает, переменная типа byte априори не может быть больше 255.
1
1 / 1 / 0
Регистрация: 12.08.2014
Сообщений: 30
03.09.2014, 16:38  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
procedure TForm1.Button1Click(Sender: TObject);
var
* MyList: TStringList;
* i, Rnd: Integer;
begin
* randomize;
* MyList := TStringList.Create;
* try
* * // можно прочитать ссылки из текстового файла
* * // MyList.LoadFromFile('ВашФайл_с_ссылками. txt');
* * // или вручную заполним
* * MyList.Append('http://mail.ru');
* * MyList.Append('http://vk.com');
* * MyList.Append('http://ok.ru');
* * MyList.Append('http://google.ru');
* * MyList.Append('http://ya.ru');
* * MyList.Append('http://yandex.ru');
* * MyList.Append('https://www.cyberforum.ru/');
for i := 0 to 2 do
* * begin
* * * Rnd := Random(MyList.Count - i);
* * * ShellExecute(0, 'open', PChar(MyList[Rnd]), '', '', SW_SHOWNORMAL);
* * * MyList.Move(Rnd, MyList.Count - 1);
* * end;
* finally
* * MyList.Free;
* end;
end;
Вы не могли бы написать полный текст программы? начиная с модулей uses, а то в шаблон по умолчанию вставляю не работает, ругается
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
03.09.2014, 16:41
Цитата Сообщение от NotBeginner Посмотреть сообщение
тогда ограничений не будет
ограничения из-за ограничений Pascal/Delphi на мощность множества (set of .. )

Цитата Сообщение от NotBeginner Посмотреть сообщение
вообще никогда не отработает, переменная типа byte априори не может быть больше 255.
согласен. Но для автора темы это будет, надеюсь, наглядно.

Впрочем, это всё уже неважно. Ибо UI привёл улучшенный вариант!

Цитата Сообщение от victorius-82 Посмотреть сообщение
А что вверху программы в uses? А копирую в делфи,
а Вы форму создали? Кнопку на форме разместили? По ней в дизайнере клачнули мышкой?
Код открылся? Вот туда и вставляйте.

в uses надо добавить
Delphi
1
uses ShellApi;
целиком форма может выглядеть так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
uses ShellApi;
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var MyList:TStringlist;
    i, Rnd : integer;
begin
  randomize;
 
  MyList:=TStringlist.Create;
  try
 
    // можно прочитать ссылки из текстового файла
    //   MyList.LoadFromFile('ВашФайл_с_ссылками.txt');
   // или вручную заполним
   MyList.Append('http://mail.ru');
   MyList.Append('http://vk.com');
   MyList.Append('http://ok.ru');
   MyList.Append('http://google.ru');
   MyList.Append('http://ya.ru');
   MyList.Append('http://yandex.ru');
   MyList.Append('https://www.cyberforum.ru/');
 
    for i := 0 to 2 do
    begin
      Rnd := Random(MyList.Count - i);
      ShellExecute(0, 'open', PChar(MyList[Rnd]), '', '', SW_SHOWNORMAL);
      MyList.Move(Rnd, MyList.Count - 1);
    end;
 
  finally
    MyList.Free;
  end;
end;
 
end.
1
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
03.09.2014, 16:46
Лучший ответ Сообщение было отмечено victorius-82 как решение

Решение

исходники этого проекта в архиве: Project1.rar
1
1 / 1 / 0
Регистрация: 12.08.2014
Сообщений: 30
03.09.2014, 16:58  [ТС]
Ура! Из архива всё заработало!!!! Огроменное вам спасибо! С рабочим вариантом изучаться будет быстрее!!

Добавлено через 8 минут
Цитата Сообщение от Sergio Leone Посмотреть сообщение
а Вы форму создали? Кнопку на форме разместили? По ней в дизайнере клачнули мышкой?
Код открылся? Вот туда и вставляйте.
конечно я это делал

Цитата Сообщение от Sergio Leone Посмотреть сообщение
в uses надо добавить
Код Delphi
1
uses ShellApi;
похоже у меня именно поэтому и не работало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.09.2014, 16:58
Помогаю со студенческими работами здесь

Открыть страницу сайта нажатием кнопки на форме
Как в VB.NET 2010 открыть страницу сайта нажатием кнопки на форме?

Работа с мышью: вывести квадрат нажатием левой кнопки мыши и спрятать его нажатием правой кнопки мыши
Ребят обьясните как вывести квадрат левым нажатием кнопки мыши и спрятав его правым нажатием кнопки мыши. Вот набросок кода ...

Как нажатием кнопки "Начать отладку (F5)" запустить IE ?
Доброго времени суток уважаемые форумчане ! Как сделать так, чтобы при нажатии кнопки "Начать отладку (F5)" запустился...

Нажатием кнопки сделать текст жирным, повторным нажатием - обычным
здравствуйте. такой вопрос , как сделать, чтобы при нажатии кнопки текст печатался жирным, при нажатии второго раза на эту кнопку- опять...

Нужно изменить доступность кнопки в одной форме нажатием кнопки в другой
Есть две формы. В первой есть кнопка "which" с enabled = false, во второй есть кнопка, нажатие которой должно делать which активной. Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru