51 (edited by k245 2020-07-05 09:46:01)

Re: Вопросы от неразбирающегося

Vyvern wrote:

Здравствуйте! Как "одним махом" очистить несколько комбобоксов?
Вариант типа
Form1.ComboBox1.Clear;
Form1.ComboBox2.Clear;
Form1.ComboBox3.Clear;
Form1.ComboBox4.Clear;
Form1.ComboBox5.Clear;
как-то не комильфо.


Способ ниже не работает.
for i:=1 to 5 do begin
     cb:=TComboBox(Form1.FindComponent('ComboBox'+IntToStr(i)));
     cb.Clear; \\выделяет красным строку (при этом в var указано cb: TComboBox;)
end;
Где тут ошибка? Подобное вообще работает в MVD?

Ошибка в объявлении переменной cb: используйте класс  TdbComboBox:

Визуальное программирование: блог и телеграм-канал.

52 (edited by adiziktdy 2020-07-06 06:47:06)

Re: Вопросы от неразбирающегося

k245 wrote:

Ошибка в объявлении переменной cb: используйте класс  TdbComboBox:

Спасибо! Так работает smile

PS.
Если комбобоксы заполнены командой dbSQLExecute, то содержимое стирается полностью. Я думаю, чтобы сбросить значения, достаточно присвоить им -1

     cb.dbItemID:=-1

Проверено wink

Yana

Re: Вопросы от неразбирающегося

k245 wrote:

Ошибка в объявлении переменной cb: используйте класс  TdbComboBox:

Вот оно! Огромное спасибо!

54 (edited by Vyvern 2021-03-13 14:23:22)

Re: Вопросы от неразбирающегося

Всем здравия!
Не получается инактивировать кнопку, у которой прописана функция (на OnClick). Выдает ошибку "Array type required" в строке
Form1.Button1.Enabled:=false;
При этом с кнопками без функций такой проблемы нет. Версия программы 6.5. Таблиц в этой формуле нет.

Re: Вопросы от неразбирающегося

Подскажите есть ли возможность в TableGrid нажимая на стрелки вниз и вверх при выделении строки происходило нажатие на нее?
У меня есть Таблица  и рядом фото  хотелось бы чтоб стрелками при переходе на другую строку фото менялись в зависимости от выбраной яйчейки
Спасибо

Re: Вопросы от неразбирающегося

senseyesenseye1983 wrote:

Подскажите есть ли возможность в TableGrid нажимая на стрелки вниз и вверх при выделении строки происходило нажатие на нее?
У меня есть Таблица  и рядом фото  хотелось бы чтоб стрелками при переходе на другую строку фото менялись в зависимости от выбраной яйчейки
Спасибо

Post's attachments

Attachment icon test.rar 3.42 kb, 434 downloads since 2021-04-01 

Re: Вопросы от неразбирающегося

Добрый день подскажите новичку пожалуйста:
1. на Форме zayava есть ComboBox куда записываеться Ответственный за исполнение
   
 
   В итоге при поиске в TableGrid яйчейка которая показывает Ответственного в зависимости от какого именно ответственного окрашивалась в определенные цвета:
  Например если Иванова - красный, если Петрова то зеленый, Если Сидорова то в желтый!
   Я вот на одном месте не могу понять как реализовать даную схему:
   Помогите пожалуйста со скриптом
2. Запрет запуска второго окна
   const
  APP_NAME = 'My App Name';

procedure Form1_OnShow (Sender: string; Action: string);
begin
  if FindWindow(nil, APP_NAME) <> 0 then
  begin
      ShowMessage('Application is already launched.');
      Form1.Close;
  end;
  Form1.Caption := APP_NAME;
end;
Почему то при запуске приложение выдает сообщение Application is already launched. Хотя ни одного окна не открыто еще!!!

Re: Вопросы от неразбирающегося

senseyesenseye1983 wrote:

Запрет запуска второго окна

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

Re: Вопросы от неразбирающегося

sibprogsistem wrote:
senseyesenseye1983 wrote:

Запрет запуска второго окна

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

Прям 100% уже проверял на обычной букве W smile
Выдает мол уже окно запущенно хотя ни одного окна не открыто

Re: Вопросы от неразбирающегося

sibprogsistem wrote:
senseyesenseye1983 wrote:

Подскажите есть ли возможность в TableGrid нажимая на стрелки вниз и вверх при выделении строки происходило нажатие на нее?
У меня есть Таблица  и рядом фото  хотелось бы чтоб стрелками при переходе на другую строку фото менялись в зависимости от выбраной яйчейки
Спасибо

Спасибо оргомное помогло

Re: Вопросы от неразбирающегося

senseyesenseye1983 wrote:

Прям 100% уже проверял на обычной букве W smile
Выдает мол уже окно запущенно хотя ни одного окна не открыто

я лишь могу сказать. что у меня все работает
скрипт рабочий, что-то у Вас не так

Re: Вопросы от неразбирающегося

senseyesenseye1983 wrote:

Добрый день подскажите новичку пожалуйста:
1. на Форме zayava есть ComboBox куда записываеться Ответственный за исполнение
   
 
   В итоге при поиске в TableGrid яйчейка которая показывает Ответственного в зависимости от какого именно ответственного окрашивалась в определенные цвета:
  Например если Иванова - красный, если Петрова то зеленый, Если Сидорова то в желтый!
   Я вот на одном месте не могу понять как реализовать даную схему:
   Помогите пожалуйста со скриптом
2. Запрет запуска второго окна
   const
  APP_NAME = 'My App Name';

procedure Form1_OnShow (Sender: string; Action: string);
begin
  if FindWindow(nil, APP_NAME) <> 0 then
  begin
      ShowMessage('Application is already launched.');
      Form1.Close;
  end;
  Form1.Caption := APP_NAME;
end;
Почему то при запуске приложение выдает сообщение Application is already launched. Хотя ни одного окна не открыто еще!!!

Ну кроме как этого у меня ничего нет открыл в новом проете и то же самое

Re: Вопросы от неразбирающегося

senseyesenseye1983 wrote:
senseyesenseye1983 wrote:

Добрый день подскажите новичку пожалуйста:
1. на Форме zayava есть ComboBox куда записываеться Ответственный за исполнение
   
 
   В итоге при поиске в TableGrid яйчейка которая показывает Ответственного в зависимости от какого именно ответственного окрашивалась в определенные цвета:
  Например если Иванова - красный, если Петрова то зеленый, Если Сидорова то в желтый!
   Я вот на одном месте не могу понять как реализовать даную схему:
   Помогите пожалуйста со скриптом
2. Запрет запуска второго окна
   const
  APP_NAME = 'My App Name';

procedure Form1_OnShow (Sender: string; Action: string);
begin
  if FindWindow(nil, APP_NAME) <> 0 then
  begin
      ShowMessage('Application is already launched.');
      Form1.Close;
  end;
  Form1.Caption := APP_NAME;
end;
Почему то при запуске приложение выдает сообщение Application is already launched. Хотя ни одного окна не открыто еще!!!

Ну кроме как этого у меня ничего нет открыл в новом проете и то же самое

Нашел свою ошибку все работает !

Re: Вопросы от неразбирающегося

Всем привет. А подскажите есть ли возможность в программе сделать чтобы логи велись конкретно по изменениям:
например есть столбцы Имя Фамилия Дата рождения телефон в окне логов. Если изменить телефон то в логах у меня появляется запись изменена но непонятно что изменено... Есть ли возможность сделать так чтоб если изменили телефон то высвечивается изменен телефон может подкрашивается цветом ??? Помогите пожалуйста

Re: Вопросы от неразбирающегося

Здравствуйте!
Можно ли кратко задать переменную типа
сtext1:=Form1.ComboBox1.Text='text1'
сtext2:=Form1.ComboBox1.Text='text2'
и т.д., чтобы не прописывать подобные конструкции каждый раз при проверках?
Или хотя бы общую - сtext:=Form1.ComboBox1.Text?

Re: Вопросы от неразбирающегося

senseyesenseye1983 wrote:

Всем привет. А подскажите есть ли возможность в программе сделать чтобы логи велись конкретно по изменениям:
например есть столбцы Имя Фамилия Дата рождения телефон в окне логов. Если изменить телефон то в логах у меня появляется запись изменена но непонятно что изменено... Есть ли возможность сделать так чтоб если изменили телефон то высвечивается изменен телефон может подкрашивается цветом ??? Помогите пожалуйста

Если записи лога отражаются в хронологическом порядке, то можно сделать обработку для грида на событие onChange, в которой сравнивать текущую строку с предыдущей и, если есть отличия, то менять цвет фона у ячейки.

Визуальное программирование: блог и телеграм-канал.

Re: Вопросы от неразбирающегося

Здравствуйте! По предыдущему посту разобрался. Возник другой вопрос: как получить из двух переменных одну?
Например, для разных функций нужно получить переменные num1, num2, num3 из "num" и "a:=1", "a:=2" и "a:=3".
Функции однотипные, хочу сократить объем кода не используя переборы. Переменная не имеет привязки к компонентам.
К примеру, в языке луа есть оператор ".." для сцепления. В нем нужная мне переменная выглядела бы так - num..a, и в зависимости от функции она будет возвращать num1, num2 или num3. Но как подобное сделать в дельфи?
Перерыл кучу форумов, но ответ найти не смог.

Re: Вопросы от неразбирающегося

Как в LUA не получится.
Массив вам в помощь:

var
  num : array [1..3] of integer;
  ind: integer;
...

ind := 2;  
result := num[ind];
Визуальное программирование: блог и телеграм-канал.

Re: Вопросы от неразбирающегося

k245 wrote:

Массив вам в помощь

Благодарю за подсказку! Помогло.

Re: Вопросы от неразбирающегося

Здравствуйте!
Пытаюсь перебором на форме найти все комбобоксы с определенными Name типа 'MyName1', 'MyName2' и т.д., например, до 'MyName7' (диапазон будет динамический).
Код такого плана не работает (вернее, выдает 0, а нужно 7):

n:=Form1.ComponentCount-1;
if n>0 then begin
    a:=0;
    for i:=0 to n do begin
        if Form1.Components[i] is TdbComboBox then begin
            if (TdbComboBox(Form1.Components[i]).Name='MyName'+IntToStr(i)) then begin
                a:=a+1;
            end;
        end;
    end;
    ShowMessage(''+IntToStr(a)+'');
end;

Если сменить 6 строку на:

if (TdbComboBox(AddSpell.Components[i]).Name='MyName1') then begin

то выдает 1 (что логично).
Может кто-нибудь подсказать, как все-таки посчитать все нужные комбобоксы? Заранее благодарю.

Re: Вопросы от неразбирающегося

Привет Vyvern,
Я не уверен, правильно ли я понял ваш вопрос, но, возможно, вы можете попробовать сделать это следующим образом (см. Приложение).
Но будьте осторожны с прописными и строчными буквами!
С уважением,
Derek.

Post's attachments

Attachment icon count comboboxes.zip 443.13 kb, 184 downloads since 2024-10-07 

Re: Вопросы от неразбирающегося

Components[i] и 'MyName'+IntToStr(i) не совпадает

т.е. Components[1]- совсем не 'MyName1'
Проверяйте так, как советует Дерек. Только приводите все к одному регистру.


Hi Derek

Components[i] and 'MyName'+IntToStr(i) do not match.

i.e. Components[1] is not 'MyName1' at all.
Check as Derek advises. Just convert everything to the same case.

73 (edited by Vyvern 2024-10-08 07:15:42)

Re: Вопросы от неразбирающегося

Hi Derek. Thanks for the reply, but it doesn't work for me...
It looks like sparrow is right - Components[1] is not 'MyName1' at all. I have over 180 components on the form, and the combo boxes are out of order after i:=65))
Maybe in my case I need to iterate through the components by type, not by number. But I don't know how.
Best regards, Vyvern.


Привет,  Derek. Спасибо за ответ, но у меня это не работает как нужно...
Похоже, sparrow прав - Components[1] - совсем не 'MyName1'. У меня больше 180 компонентов на форме, и комбобоксы идут вразнобой после i=65))
Может, в моем случае нужно перебирать компоненты по типам, а не по номеру. Но я не знаю как.
С уважением, Vyvern.

Upd. By the way, if change 'myname' to anything else, the function does not work.

Re: Вопросы от неразбирающегося

Здравствуйте. По моему посту выше - получилось сварганить такое (сильно не пинайте;)):

    a:=0;
    n:=0;
    for i:=0 to Form1.ComponentCount-1 do begin
        if (Form1.Components[i] is TdbComboBox) then
            a:=a+1;
            for e:=1 to a do begin
                if (Form1.Components[i].Name='MyName'+IntToStr(e)) then
                    //нужны только значимые пункты
                    if ((TdbComboBox(Form1.Components[i]).ItemIndex<>0) and (TdbComboBox(Form1.Components[i]).ItemIndex<>-1)) then
                        n:=n+1;
            end;
    end;
    showmessage('Comboboxes names containing the string "MyName" = ' + IntToStr(n));
    n:=0;
    a:=0;

Может, кто-то подскажет еще кое-что.
1) Как сымитировать скриптом действие кнопки "Сохранить запись"? Т.е. указать компоненты, участвующие в сохранении, и таблицу БД для сохранения. Мне нужно сохранять значения комбобоксов и текстовых полей в саму БД, не в файл. И можно ли таким скриптом дополнить уже настроенную кнопку (не будет ли конфликта программной кнопки и скрипта)?
2) Как "закрепить" компоненты на форме (скроллбоксе), вставленные динамически (скриптом), чтобы при новом открытии программы они оставались на своих местах? Просто есть базовая форма с определенным набором компонентов, но иногда нужно вставлять новые прямо по ходу работы и затем сохранять их значения.

Re: Вопросы от неразбирающегося

Vyvern wrote:

Может кто-нибудь подсказать, как все-таки посчитать все нужные комбобоксы? Заранее благодарю.

var
  tmpNamePattern = 'MyName';
  tmpIndexMin = 0;
  tmpIndexMax = 7;
  tmpName: string;
  tmpIndex: string;

...
if  (AddSpell.Components[i] is TdbComboBox) then
begin
  tmpName := TdbComboBox(AddSpell.Components[i]).Name;
  tmpIndex := tmpName;
  delete(tmpIndex,1,Length(tmpNamePattern));
  tmpName := copy(tmpName,1,Length(tmpNamePattern));
  if ValidInt(tmpIndex) and 
     (StrToInt(tmpIndex) >= tmpIndexMin) and 
     (StrToInt(tmpIndex) <= tmpIndexMax) and 
     (LowerCase(tmpName) = LowerCase(tmpNamePattern)) then
...
Визуальное программирование: блог и телеграм-канал.