Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Применение стиля только для некоторых кнопок

что надо сделать чтобы применить стиль только к некоторым кнопкам?
или же, что еще лучше, как мне ставить бекграунды на кнопки? то есть мне на разные кнопки нужны разные бекграунды, но с этим стилем, я так понимаю, можно иметь бекграунд, только который там прописанный?

Кликните здесь для просмотра всего текста

Код XML
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
<Style TargetType="{x:Type Button}">
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="MinHeight" Value="23"/>
            <Setter Property="MinWidth" Value="75"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border Name="Border" CornerRadius="2" BorderThickness="1"
                    Background="#C0C0C0"
                    BorderBrush="#404040">
                            <ContentPresenter Margin="2" 
                                 HorizontalAlignment="Center"
                                 VerticalAlignment="Center" 
                                 RecognizesAccessKey="True"/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsKeyboardFocused" Value="true">
                                <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#202020" />
                            </Trigger>
                            <Trigger Property="IsDefaulted" Value="true">
                                <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#202020" />
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter TargetName="Border" 
                          Property="Background" Value="#808080" />
                            </Trigger>
                            <Trigger Property="IsPressed" Value="true">
                                <Setter TargetName="Border" 
                          Property="Background" Value="#E0E0E0" />
                                <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#606060" />
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter TargetName="Border" 
                          Property="Background" Value="#EEEEEE" />
                                <Setter TargetName="Border" 
                          Property="BorderBrush" Value="#AAAAAA" />
                                <Setter Property="Foreground" Value="#888888"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
Ответ: спасибо!
Вопрос: Как сделать так чтобы пароль отображался только при нажатии кнопки?

Добрый вечер подскажите пожалуйста.Создал форму в php При нажатии на кнопку генерируется пароль

PHPHTML
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
61
62
63
64
65
66
<html>
<body>
 
 
<form>
<input type=submit value="Генерировать">
 
 
<?php
 
 // Параметр $number - сообщает число 
 
 // символов в пароле
 
 echo generate_password($_POST['$a']);
 
 
 function generate_password($a)
 
 {
 
 $arr = array('a','b','c','d','e','f',
 
 'g','h','i','j','k','l',
 
 'm','n','o','p','r','s',
 
 't','u','v','x','y','z',
 
 'A','B','C','D','E','F',
 
 'G','H','I','J','K','L',
 
 'M','N','O','P','R','S',
 
 'T','U','V','X','Y','Z',
 
 '1','2','3','4','5','6',
 
 '7','8','9','0');
 
 // Генерируем пароль
$a="5";
 $pass = "";
 
 for($i = 0; $i < $a; $i++)
 
 {
 
 // Вычисляем случайный индекс массива
 
 $index = rand(0, count($arr) - 1);
 
 $pass .= $arr[$index];
 
 }
 
 return $pass;
 
 }
 
?>
 
</body>
 
</html>
Проблема в том что генерируемый пароль отображается при любом обновлении страницы или ее загрузке. А как сделать так чтобы пароль отображался только при нажатии кнопки??????
Ответ: спасибо!!!!
Вопрос: Delphi 2010 + IBDataSet + хранимые процедуры

Добрый вечер! Использую компоненты доступа IB к базе данных FireBird 2.5. Логика программы построена на хранимых процедурах. Одна из которых выводит результатирующий запрос.

begin
  FOR SELECT trensostav.id, trensostav.klvp, trensostav.klvf, trensostav.vesp, trensostav.vesf, trensostav.st,
    trensostav.sec, sprupr.gruppa, sprupr.upr
  FROM sprupr
  INNER JOIN trensostav ON (sprupr.id = trensostav.sprupr_id)

  INTO :id, :upr, :gruppa, :klvp, :klvf, :vesp, :vesf, :sec, :st
  do
  begin
    suspend;
  end
end


Вторая делает модификацию:

begin
  UPDATE trensostav set klvp = :klvp, klvf = :klvf, vesp = :vesp, vesf = :vesf, st = :st, sec = :sec
  WHERE (id = :id);
end


Данные выводятся в DBGridEh. Необходимо, чтобы редактирование было доступно прям в сетке, как выяснилось, для этого необходимо использовать IBDataSet. В Delphi я передаю в IBDataSet.SelectSQL := select * from trensostav_sel (:tren_id), запускаю, всё работает. Но как быть с обновлением данных? В IBDataSet.ModifSQL сейчас прописано := execute procedure TRENSOSTAV_UPD (:ID,:KLVP,:KLVF,:VESP,:VESF,:SEC). На какое событие желательно повесить? И каким образом передать параметры?
Подобный код не отрабатывает, ругается на то, что не найден параметр. Комментируя одну строку за другой, выяснилось, что он не видит ни один параметр.

  IBDataSet1.Close;
  IBDataSet1.ParamByName('ID').Value := dsTrenSostav.DataSet.FieldByName('ID').AsInteger;
  IBDataSet1.ParamByName('KLVP').AsInteger := dsTrenSostav.DataSet.FieldByName('KLVP').AsInteger;
  IBDataSet1.ParamByName('KLVF').AsInteger := dsTrenSostav.DataSet.FieldByName('KLVF').AsInteger;
  IBDataSet1.ParamByName('VESP').AsInteger := dsTrenSostav.DataSet.FieldByName('VESP').AsInteger;
  IBDataSet1.ParamByName('VESF').AsInteger := dsTrenSostav.DataSet.FieldByName('VESF').AsInteger;
  IBDataSet1.ParamByName('SEC').AsInteger := dsTrenSostav.DataSet.FieldByName('SEC').AsInteger;
  IBDataSet1.ExecSQL;


Подскажите пожалуйста, как правильнее всего поступить и сделать в данной ситуации?
Ответ:
Dimitry Sibiryakov
Какое выделенное слово тебе непонятно?
Ключевое слово "автоматически"... Оказывается достаточно было просто оставить процу с входными параметрами в ModifSQL, после чего она успешно отрабатывает, после ручного редактирования записи в grid. Ещё предстояло создать новую, но теперь для Refresh. Спасибо Дмитрий, за наставления на путь истинный!)
Вопрос: При открытии PopUp происходит Refresh главного окна!

Добрый день, друзья!
Столкнулся с такой проблемой. Есть у меня Master Page, на котором кроме пункта Меню, Хедер и Футер, есть еще PopUp, который открывается по нажатию кнопки! Все работает нормально, нажимаю на кнопку PopUp появляется, единственное, при открытии PopUp-а, происходит, что то вроде Refresh-а страницы! Как например, если вручную обновить страницу!
Был бы признателен за любую помощь/совет!
Спасибо!
Ответ: adimmat, кстати, я спрашивал про маркап кнопки, а не попапа...
Вопрос: Как применить потоки для игры "Гонки кнопок"

Написал нижеприведённый код. Компилятор не ругается. Программа тоже (хотя тормозит при закрытии).
Суть программы: 3 движущихся кнопки в потоках. Кликаем на Start для запуска.
В результате движется только 1ая кнопка.
В пошаговом режиме видно что цикл while выполняется только для 2ой кнопки (странно - почему тогда движется только первая?)

C#
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
61
62
63
64
65
66
67
68
69
70
71
public delegate void Helper(); // делегат для доступа к функции 
    public partial class Form1 : Form
    {
        Thread t1;
        Thread t2;
        Thread t3;
        Helper help1;
        Helper help2;
        Helper help3;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void btnStart_Click(object sender, EventArgs e)
        {
            help1 = new Helper(Movement1);  // делегат на функцию Movement1
            help2 = new Helper(Movement2);
            help3 = new Helper(Movement3);
            t1 = new Thread(Move1); // занесение в поток ссылки (делегата) на метод Movement
            t2 = new Thread(Move2);
            t3 = new Thread(Move3);
 
            t1.IsBackground = t2.IsBackground = t3.IsBackground = true;
       
            t1.Start();  //  старт потока
            t2.Start();
            t3.Start();
 
        }
        void Move1()   // метод использования делегата
        {
            Invoke(help1);
        }
        void Move2()
        {
            Invoke(help2);
        }
        void Move3()
        {
            Invoke(help3);
        }
        void Movement1()
        {
            while (true)
            {
                Thread.Sleep(100);  // задержка потока повремени
                btn1.Location = new Point(btn1.Location.X + 1, btn1.Location.Y);
            }
          
        }
        void Movement2()
 
        {
            while (true)
            {
                Thread.Sleep(100);
                btn2.Location = new Point(btn2.Location.X + 1, btn2.Location.Y);
            }
 
        }
        void Movement3()
        {
            while (true)
            {
               Thread.Sleep(100);
                btn3.Location = new Point(btn3.Location.X + 1, btn3.Location.Y);
            }
 
        }
Ответ: агерон, Добрый день. А подскажите, как завершить потоки при окончании пути одной из кнопок?

C#
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
        public void StartRace(Button button, Form frm, int finishLoc)
        {
            /*
             * StartRaceAlt - альтернативный подход к потокам
             * finishLoc - передаётся конечная координата но Х
            */
            int i;
            int nowLoc = 0;
            
            ThreadPool.QueueUserWorkItem((object sender) =>
            {
                while (nowLoc < finishLoc)
                {
                    
                    Button btn = (Button)sender;
                    btn.Invoke((Action)(() =>
                    {
                        i = rand.Next(5);
                        btn.Location = new Point(btn.Location.X + i, btn.Location.Y);
                    }));
                    Thread.CurrentThread.Join(50);
                    if (btn.Location.X >= finishLoc)
                    {
                        btn.BackColor = Color.FromName("red");
                        nowLoc = finishLoc + 1;
                    }
                    else
                    {
                        nowLoc = btn.Location.X;
                    }       
                }
            }, button);
            
        }
Вопрос: Исчезновение кнопки!

Привет!
Есть програмка, которая имеет UserForm1 с Label с 1 по 4. При нажатии на label выводит форму UserForm3 с 3 кнопками.
При нажатии на любую из них значение, написанное на кнопке возвращает Label на UserForm1 который был нажат.
Это реализовано благодоря гуру форумчанам.
Пытаюсь теперь сделать так, чтобы при выскакивании формы UserForm3 шла проверка. А есть ли уже где-нибудь подобная надпись, как на кнопках на label формы UserForm1. Если так, то кнопку надо спрятать.

Сейчас У меня есть вот такой код:

Module1
Visual Basic
1
2
3
4
Public IG As Integer
Sub ShowDialog()
    UserForm1.Show
End Sub


UserForm1
Visual Basic
1
2
3
4
5
6
7
Option Explicit
Private LabDat(1 To 4) As New ClassCln
Dim i As Integer
Private Sub UserForm_Initialize()
 
  For i = 1 To 4
    Set Lab
Dat(i).Lab = Controls("Label" & i)
Next

End Sub
Private Sub OKButton_Click()
Unload Me
End Sub


ClassCln
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public WithEvents Lab As MSForms.Label
Private Sub Lab_Click()
IG = Mid$(Lab.Name, 6)
Load UserForm3
Dim i As Integer
i = 1
       For i = 1 To 4
        If UserForm1.Controls("Label" & i) = UserForm3.CommandButton2.Caption Then
            UserForm3.Controls("CommandButton2").Visible = False
            UserForm3.Controls("CommandButton2").Locked = True
        Else
            UserForm3.Controls("CommandButton2").Visible = True
            UserForm3.Controls("CommandButton2").Locked = False
        End If
    Next i
UserForm3.Show
End Sub


UserForm3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub CommandButton1_Click()
UserForm1.Controls("label" & IG) = CommandButton1.Caption
Me.Hide
End Sub
Private Sub CommandButton2_Click()
UserForm1.Controls("label" & IG) = CommandButton2.Caption
Me.Hide
End Sub
Private Sub CommandButton3_Click()
UserForm1.Controls("label" & IG) = CommandButton3.Caption
Me.Hide
End Sub


Прописал только для одной кнопки CommandButton2 и к сожалению срабатывает только если в Label4 совпадает значение.
Подскажите, где ошибка, как оформить правильно?
Ответ:
Сообщение от han73r
For k = 1 To 3
* * * Controls("CommandButton" & k).Visible = True
* * * Controls("CommandButton" & k).Locked = False
* * * '''''!!!!???????????????Exit For - ну хоть чуть-чуть почитайте теорию!
* * * Next
Если хотите отобразить все кнопки - зачем выход на первой же без всяких условий?
Вопрос: Не удаляются кнопки

C++
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
void __fastcall TAdministratorForm::AddRouteTrainButtonClick(TObject* Sender)
{
     int p;
     AnsiString  ButtonName = ((TButton*) Sender)->Name;
     ButtonName.Delete(1, 6);
     p = ButtonName.ToInt();
 
     if(stationStartEdit)
        delete stationStartEdit;
     if(stationEndEdit)
        delete stationEndEdit;
     for(int i = 0; i < 12; i++)
     {
         if(stationEdit[i])
            delete stationEdit[i];
         if(addStationButton[i])
            delete addStationButton[i];
     }
 
     Route route(trains_add.at(p).GetId());
     stationEditcount = 0;
     stationStartEdit = new TEdit(AdministratorForm);
     stationStartEdit->Parent = AddStationScrollBox;
     stationStartEdit->Width = 207;
     stationStartEdit->Height = 24;
     stationStartEdit->Left = 0;
     stationStartEdit->Top = 24*stationEditcount;
     stationStartEdit->Text = trains_add.at(p).GetStartPoint().c_str();
     stationStartEdit->Enabled = false;
 
     stationEditcount++;
 
     stationEdit[0] = new TEdit(AdministratorForm);
     stationEdit[0]->Parent = AddStationScrollBox;
     stationEdit[0]->Width = 207;
     stationEdit[0]->Height = 24;
     stationEdit[0]->Left = 0;
     stationEdit[0]->Top = 24*stationEditcount;
     stationEdit[0]->Text = "";
     addStationButton[0] = new TButton(AdministratorForm);
     addStationButton[0]->Parent = AddStationScrollBox;
     addStationButton[0]->Width = 37;
     addStationButton[0]->Height = 24;
     addStationButton[0]->Left = 212;
     addStationButton[0]->Top = stationEditcount * 24;
     addStationButton[0]->Caption = ">>";
     addStationButton[0]->Name = "add_st_btn" + IntToStr(stationEditcount - 1);
     addStationButton[0]->OnClick = AddRouteStationButtonClick;
 
     stationEndEdit = new TEdit(AdministratorForm);
     stationEndEdit->Parent = AddStationScrollBox;
     stationEndEdit->Width = 207;
     stationEndEdit->Height = 24;
     stationEndEdit->Left = 0;
     stationEndEdit->Top = 24*(stationEditcount+1);
     stationEndEdit->Text = trains_add.at(p).GetEndPoint().c_str();
     stationEndEdit->Enabled = false;
}
Это обработчик нажатия на кнопку. AddRouteStationButtonClick - функция обработки нажатий для созданных кнопок. В коде выше создается только одна кнопка addStationButton[0]. Далее в AddRouteStationButtonClick происходит создание addStationButton[i] после клика на addStationButton[i-1];
C++
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
void __fastcall TAdministratorForm::AddRouteStationButtonClick(TObject* Sender)
{
    int p;
    ((TButton*) Sender)->Enabled = false;
    AnsiString  ButtonName = ((TButton*) Sender)->Name;
    ButtonName.Delete(1, 10);
    p = ButtonName.ToInt();
    stationEditcount++;
    if(!p)
        stationEdit[0]->Enabled = false;
    stationEdit[p-1]->Enabled = false;
    if(p == 12)
        return;
    stationEndEdit->Top = 24*(stationEditcount+1);
    stationEdit[p] = new TEdit(AdministratorForm);
    stationEdit[p]->Parent = AddStationScrollBox;
    stationEdit[p]->Width = 207;
    stationEdit[p]->Height = 24;
    stationEdit[p]->Left = 0;
    stationEdit[p]->Top = 24*(stationEditcount);
    stationEdit[p]->Text = "";
    addStationButton[p] = new TButton(AdministratorForm);
    addStationButton[p]->Parent = AddStationScrollBox;
    addStationButton[p]->Width = 37;
    addStationButton[p]->Height = 24;
    addStationButton[p]->Left = 212;
    addStationButton[p]->Top = 24*(stationEditcount);
    addStationButton[p]->Caption = ">>";
    addStationButton[p]->Name = "add_st_btn" + IntToStr(stationEditcount - 1);
    addStationButton[p]->OnClick = AddRouteStationButtonClick;
    ShowMessage(stationEditcount-1);
}
В этой функции происходит дальнейшее создание кнопок из массива addStationButton и эдитов. В коде который я скинул первым, вначале удаляются все динамически созданные компоненты и потом они создаются заново. Так вот если не создавать кнопки через AddRouteStationButtonClick, то удаление проходит нормально. Если же создать кнопку функцией AddRouteStationButtonClick, то она уже почему-то не удаляется и вылетает ошибка типа компонент с таким именем уже существует. Массив кнопок глобальный, не понимаю почему так происходит.

Добавлено через 6 часов 7 минут
Проверил, что не удаляется только самая первая кнопка addStationButton[0], если создавались кнопки из второй функции, если там их не создавать, то удаляется все корректно. Хотя все созданные во второй функции кнопки, в цикле нормально удаляются.
Ответ: AddRouteTrainButtonClick совсем другие кнопки вызывают. В общем я так и не понял, почему эта кнопка не удаляется, переделал немного (т.к после клика на addStationButton[i-1] она создает addStationButton[i] и addStationButton[i-1]-> Endbled становится false, я решил ее сразу и удалять в AddRouteStationButtonClick: delete ((TButton*) Sender); и все хорошо начало работать). Так что можно не думать уже над этим
Вопрос: Обработка клика только после отпускания кнопки мыши

Как сделать, что бы когда нажал на кнопку, действие работало только после отпускания мыши?
Ответ: При отпускании клавиши мыши приложению шлется сообщение WM_LBUTTONUP. Выполняй действия в его обработчике.
Вопрос: чайниковский вопрос про нажатие кнопки в вордпрессе

Доброго.

Коллеги, я пытаюсь сделать некий аналог "афоризма дня" через плагин в вордпрессе. У меня есть текстовое сообщение и две кнопки "обновить" и "новое". Если обновить - то новый афоризм этого же автора, если "новый" - то произвольный автор и его афоризм.

Есть функции - одна получает айди, вторая по нему текст. В случае "обновить" нужно вызвать функцию l_mrand_get() с уже имеющимся id, в случае "новое" - l_id_get() и . l_mrand_get()
Третья функция отвечает за вывод всего этого в пост. При открытии/обновлении поста все работает, только вот нажатие кнопок не выходит.
То, что сейчас в коде - это попытка использовать аджакс, но... Что-то очень много всего там надо регистрировать, проверять и так далее. Ну и непонятно, что делать, если у зашедшего отключен JavaScript. А может и не аджакс надо? Ничего не понимаю. :(

Еще очень хочется узнать, где тусуются чайники типа меня, явно не тут.


function l_id_get() # назначается глобальный айди. Его потом можно либо еще раз получить новый, вызвав эту функцию, либо просто пользоваться уже полученным после одного вызова. 
{		 
   	global $m_wpdb; 
 	global $m_id;
 	$m_id = $m_wpdb->get_var($m_wpdb->prepare("call p_val_get;")); 
}
#
function l_mrand_get()  # получаю текст по id 
{		 
       global $m_wpdb;  
       global $m_id;
       global $m_text;
       $m_text = $m_wpdb->get_var($m_wpdb->prepare("call p_mrand_get ($m_id);"));
}

function l_show_result($content=null)
{		
	global $m_wpdb; 
	global $m_id;
	global $m_text;
	l_id_get();    # получу id 
	l_mrand_get(); # получу текст по данному id 
	$content .= "<div class='montage'><p>номер: $m_id, значение: $m_text</p></div>" ;
	$content .=  "<button type='button' onclick='l_refresh()'>Обновить</button>";
	$content .=  "<button type='button' onclick='l_new_get()'>Новый</button>";
	return $content;
	
}
Ответ: Граждане!

Неужели никто из спецов не знает, как нажать кнопку? 8-О Я реально что-то сложное спросил или слишком простое?
Вопрос: Отправка запроса в SQL по нажатию кнопки, а не по загрузке страницы.

Добрый день!

После загрузки страницы в базу делается запрос и добавляется пустая строка.
А надо чтобы информация добавлялась только по нажатию кнопки <input type="submit" value="Добавить"/>
Подскажите пожалуйста как это сделать?


<body>
    <H1></H1>
 <form method="POST" action="">
  <input name="name" type="text" placeholder="Имя"/>
  <input name="text" type="text" placeholder="Текст"/>
  <input type="submit" value="Добавить"/>
 </form>
</body>
</html>

<?php
// Переменные с формы
$name = $_POST['name'];
$text = $_POST['text'];

// Параметры для подключения
$db_host = '****************'; 
$db_user = '****************'; 
$db_password = '****************'; 
$db_base = '****************'; 
$db_table_to_show = '****************';  

//Соединяемся с базой данных используя наши доступы:
$mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);

//Далее напишем наш запрос для записи в базу данных и запишем его в переменную.
$mysqli->query("INSERT INTO `mytable`(`name`, `text`) VALUES ('$name','$text')");
Ответ: Вот же ж, не врубился сразу.
schastye, не путайте теплое с мягким. "Холостой" запрос выполняется ещё во время формирования HTML-кода страницы на сервере, задолго до загрузки страницы в браузере.
Ваше "нажатие кнопки" есть суть отправки формы методом POST.
Вероятно, есть смысл добавить проверку присутствия входных переменных.
if(isset($_POST['name']) && isset($_POST['text'])) {
    // здесь код проверки входных данных и записи в базу
}



schastye
и добавляется пустая строка
Строго говоря, даже если сделаете указанную выше проверку, но не будете проверять значения переменных, можете запросто нахватать пустых строк. Например, если пользователь "нажмет кнопку" при пустых полях формы. При таком раскладе во входных переменных будет пустая строка.

И ещё, включите вывод/отображение сообщений об ошибках. Сейчас он выключен, вероятно. Иначе Вы увидели бы, что в строке $name = $_POST['name']; используется несуществующий индекс 'name' при обращении к массиву $_POST и тогда Ваш вопрос был бы совсем другим.