Массив вам в помощь
Благодарю за подсказку! Помогло.
My Visual Database → Posts by Vyvern
Массив вам в помощь
Благодарю за подсказку! Помогло.
Здравствуйте! По предыдущему посту разобрался. Возник другой вопрос: как получить из двух переменных одну?
Например, для разных функций нужно получить переменные num1, num2, num3 из "num" и "a:=1", "a:=2" и "a:=3".
Функции однотипные, хочу сократить объем кода не используя переборы. Переменная не имеет привязки к компонентам.
К примеру, в языке луа есть оператор ".." для сцепления. В нем нужная мне переменная выглядела бы так - num..a, и в зависимости от функции она будет возвращать num1, num2 или num3. Но как подобное сделать в дельфи?
Перерыл кучу форумов, но ответ найти не смог.
Здравствуйте!
Можно ли кратко задать переменную типа
сtext1:=Form1.ComboBox1.Text='text1'
сtext2:=Form1.ComboBox1.Text='text2'
и т.д., чтобы не прописывать подобные конструкции каждый раз при проверках?
Или хотя бы общую - сtext:=Form1.ComboBox1.Text?
Здравствуйте! Наверное, замечание не совсем в тему...
Программа версии 6.5 закрывается при малейшей ошибке, что нередко очень мешает. С предыдущими версиями, не имевшими такового новшества, было удобнее работать. Проблемная строка в конструкторе выделяется - это круто, но часто перезапускать БД то еще "удовольствие"...
Всем здравия!
Не получается инактивировать кнопку, у которой прописана функция (на OnClick). Выдает ошибку "Array type required" в строке
Form1.Button1.Enabled:=false;
При этом с кнопками без функций такой проблемы нет. Версия программы 6.5. Таблиц в этой формуле нет.
Ошибка в объявлении переменной cb: используйте класс TdbComboBox:
Вот оно! Огромное спасибо!
Hello, JB! Thanks you very much for your example! However, I am looking for a way to not only clean comboboxes, but also to loop them. Label and Edit looping methods (which I know) do not work for Combobox in MVD. That's the problem...
Здравствуйте. Работает.
procedure talon2_Button3_OnClick (Sender: TObject; var Cancel: boolean);
var
nameCombo, j: string;
begin
nameCombo:='Form1.ComboBox.'; //в переменную общее имя комбобоксов
for i:=1 to 5 do
begin
j:=nameCombo+IntToStr(i)+'.Clear'; //цикл очистки по счетчику i
end;
end;
Увы, Ваш вариант не работает. Как я только не пробовал. Даже с 1 не работает. Кроме того, наверное, в nameCombo не нужна точка после ComboBox, ведь тогда, по логике, получится 'Form1.ComboBox.1.Clear' вместо 'Form1.ComboBox1.Clear'.
Upd: С Label и Edit подобные схемы работают. Может, для ComboBox нужно нечто другое?
Здравствуйте! Как "одним махом" очистить несколько комбобоксов?
Вариант типа
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?
Но это и не обязательно - храните их в отдельной папке или базе данных (если хотите их "прятать" от пользователя ).
Можно с этого места подробнее? Хранить-то шрифт не проблема, а как его задействовать?
P.S. ИМХО, копировать файлы шрифтов при каждом запуске программы - это моветон )))
Видимо, для кого-то это меньшее из зол
Вы можете центрировать текст внутри метки (Alignment = taCenter), а саму метку привязать якорями (Anchors = [Left,Right,Top]) к правому и левому краю формы. Перенос работает по словам, но вы можете программно добавить код перевода строки для принудительного переноса
MainForm.Label1.Caption := 'Первая строка'+chr(10)+'Вторая строка'
Спасибо за ответ!
Мне нужно, чтобы текст в Label работал именно как в Ворде при центрировании, т.е. слова выравнивались и симметрично переносились на новые строки автоматически. Возможно, в MVD это просто пока не реализовано (если такое вообще реализуемо применительно к Label).
Просто я в качестве фона использую картинку, и хотелось бы, чтобы на ней был виден только текст (Edit и Memo этого, увы, не позволяют из-за невозможности сделать их фон 100% прозрачным).
Изначальная концепция неверная. Для обычных windows-приложений необходимые шрифты включаются в дистрибутив и устанавливаются вместе с приложением. Свои собственные шрифты, не регистрируемые в системе, могут себе позволить игры и другие программы, использующие DirectX и/или свои собственные технологии для рендера шрифтов (векторные, текстурные, пиксельные и т.д.).
Вы про какую концепцию? Я искал решение этого вопроса на форумах по Дельфи, и что-то даже нашел, но, увы, не понял, как это все работает. Предлагалось создать некий RC файл, как-то его то ли проверять, то ли регистрировать. А затем уже при открытии формы устанавливать файл шрифта (в ОС, как я понял), а при закрытии формы - удалять (просто чтобы не мусорить на другом компе). Если б такое можно было бы сделать в MVD, было бы хорошо.
Здравствуйте!
Как интегрировать в проект свой шрифт, чтобы он работал только во время использования базы данных?
Здравствуйте!
Как закрепить компонент Label в определенном месте на форме для получения эффекта центрирования (как в Word, например)? Чтобы Label вне зависимости от количества символов все время был "по центру".
И можно ли в Label переносить не по одному слову, а в определенных рамках, как в Memo?
Здравствуйте!
Как задать значениям выпадающего списка соответствующие порядковые значения ID (т.е. верхнее значение =1 и далее вниз 2, 3, 4 и т.д.)? Чтобы не были вразнобой. И есть ли способ сделать это в свойствах компонента, а не в скрипте?
Upd: Наверное, проще будет работать с ComboBox.ItemIndex.
var key: array[1..10] of string; value: array[1..10] of string;
Спасибо!
Сделал так:
var
key: array[1..10] of string;
value: array[1..10] of string;
//Ваши функции...
begin
key[1]:'k1';key[2]:'k2';.....key[10]:='k10';
value[1]:'v1';value[2]:'v2';.....value[10]:='v10';
end.
Пока все работает.
А что насчет альтернативных способов прописывания путей?
Здравствуйте!
Есть парочка вопросов.
1) Как сделать так, чтобы несколько функций обращались к одному и тому же массиву, но прописать его всего 1 раз, а не в каждой функции? Т.е. вынести его как глобальную, что ли. Пример: есть такое
procedure Form1_Combobox1_OnChange (Sender: TObject);
var
i: integer;
key: array[1..10] of string;
value: array[1..10] of string;
begin
key[1]:'k1';key[2]:'k2';.....key[10]:='k10';
value[1]:'v1';value[2]:'v2';.....value[10]:='v10';
for i:=1 to 10 do begin
if Form1.Combobox1.Text=key[i] then begin
Form1.Edit1.Text:=value[i];
end;
end;
procedure Form1_Combobox2_OnChange (Sender: TObject);
var
i: integer;
key: array[1..10] of string;
value: array[1..10] of string;
begin
key[1]:'k1';key[2]:'k2';.....key[10]:='k10';
value[1]:'v1';value[2]:'v2';.....value[10]:='v10';
for i:=1 to 10 do begin
if Form1.Combobox2.Text=key[i] then begin
Form1.Edit1.Text:=value[i];
end;
end;
procedure Form1_Combobox3_OnChange (Sender: TObject);
var
i: integer;
key: array[1..10] of string;
value: array[1..10] of string;
begin
key[1]:'k1';key[2]:'k2';.....key[10]:='k10';
value[1]:'v1';value[2]:'v2';.....value[10]:='v10';
for i:=1 to 10 do begin
if Form1.Combobox3.Text=key[i] then begin
Form1.Edit1.Text:=value[i];
end;
end;
Нужно как-то так:
key: array[1..10] of string;
value: array[1..10] of string;
key[1]:'k1';key[2]:'k2';.....key[10]:='k10';
value[1]:'v1';value[2]:'v2';.....value[10]:='v10';
procedure Form1_Combobox1_OnChange (Sender: TObject);
var
i: integer;
begin
for i:=1 to 10 do begin
if Form1.Combobox1.Text=key[i] then begin
Form1.Edit1.Text:=value[i];
end;
end;
procedure Form1_Combobox2_OnChange (Sender: TObject);
var
i: integer;
begin
for i:=1 to 10 do begin
if Form1.Combobox2.Text=key[i] then begin
Form1.Edit1.Text:=value[i];
end;
end;
procedure Form1_Combobox3_OnChange (Sender: TObject);
var
i: integer;
begin
for i:=1 to 10 do begin
if Form1.Combobox3.Text=key[i] then begin
Form1.Edit1.Text:=value[i];
end;
end;
2) Есть ли другие способы указать путь к файлу (в данном случае картинке), кроме как такой:
Form2.Image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'\Images\'+ Form2.Edit1.Text +'\'+ Form2.Combobox1.Text +'.png');
\'+ Form2.Edit1.Text +'\ - это название папки в зависимости от значения Edit1.
Здравствуйте!
В скрипте, при вводе текста, а именно любых слов, заканчивающихся на букву "я" (например, так: Form1.Edit1.Text:='Земля'), меняется цвет некоторой части следующего за этим словом кода (синеет), из-за чего становится проблематично работать с ним. Приходится ставить пробел после слова (или_), и все подобные значения сохранять так же.
Данное явление заметил еще в версиях 5.х, но не придал этому значения, потому как не было критично. Сейчас ситуация изменилась...
можете просто использовать название процедуры без скобок
procedure Hide_Components;
тогда она будет вызываться так
Hide_Components;
Прошу прощения, не сразу заметил, что тема на 2 страницу перешла... Чуть позже сам допер, что так надо сделать.
Здравствуйте!
Возникла необходимость в повторении однотипного кода. Чтобы не нагружать скрипт, планирую выделить необходимый код в отдельную функцию, чтобы потом просто вызвать ее. Однако не могу понять, как правильно осуществить вызов.
procedure Hide_Components (Sender: TObject);
var
i: integer;
lr,lrd,lrpc: TLabel;
er: TEdit;
begin
for i:= 1 to 10 do
begin
lr:=TLabel(Form2.FindComponent('LRes'+IntToStr(i)));
lrd:=TLabel(Form2.FindComponent('LResDelta'+IntToStr(i)));
lrpc:=TLabel(Form2.FindComponent('LRespc'+IntToStr(i)));
er:=TEdit(Form2.FindComponent('ERes'+IntToStr(i)));
lr.Enabled:=false;
lrd.Enabled:=false;
lrpc.Enabled:=false;
er.Enabled:=false;
er.Text:='';
end;
end;
Должно получиться нечто вроде
procedure Form2_Button1_OnClick(Sender: TObject);
begin
if .... rhen
.......
Hide_Components ();
end;
Я не прошу писать за меня готовое решение - понимаю, что работы и помимо этого навалом. Но, возможно, Вы точно знаете, где можно подсмотреть пример для моего случая? Возможно, решение есть в известных Вам проектах. На сторонних форумах, которые я изучал, по подобным вопросам в основном приводятся примеры с простейшими математическими вычислениями (типа а+в), что мне не подходит.
Заранее благодарю за любую помощь.
Hi, Derek!
Thanks for the advice, this method is really useful. Unfortunately, I have just the “very special” case, when it will not be possible so simply to “subordinate all the necessary components to one rule”. Well, you know how it happens
Здравствуйте!
Реализуемо ли "групповое" изменение свойств компонентов? Что имеется ввиду: когда компонентов много (штук 20), и все их нужно, к примеру, отключить (через Enabled), то приходится отключать каждый в отдельности. Было бы гораздо удобнее выделив все компоненты в Свойствах компонентов получить общие настройки, и всего 1 нажатием перевести все 20 штук в тот же Enabled false.
Конечно, можно это, наверное, и скриптами сделать, но не охота раздувать многострадальный скрипт:)
Здравствуйте!
Есть код такого вида:
for i:= 1 to 7 do begin
cbe:=TComboBox(Form2.FindComponent('CBEffector'+IntToStr(i)));
eev:=TEdit(Form2.FindComponent('EfValue'+IntToStr(i)));
if (cbe.Text='текст') then begin
Form2.SDamage.Text:=FloatToStr(0.2*StrToFloat(Form2.TProperty.Text));
Form2.SDamageDur.Text:=eev.Text;
В общем, получаем значение в одном поле, умножая значение в другом на 0,2. Как в данном случае округлить полученное значение (0.2*StrToFloat(Form2.TProperty.Text)) до целого? Например, 9,4 до 9, а 9,5 и выше уже до 10? Можно ли сделать это прямо в строке
Form2.SDamage.Text:=FloatToStr(0.2*StrToFloat(Form2.TProperty.Text));
?
Заранее спасибо.
P.S. Планируется ли сделать автовыделение круглых кавычек разными цветами (как в формулах Excel), или выделение "активных" кавычек, как реализовано в Notepad++ (что даже лучше)?
Спасибо большое за помощь!
Здравствуйте.
Может ли кто-нибудь подсказать аналог нижеуказанной хэш-таблицы (Lua) для Delphi, а также как к ней правильно обратиться (перебор)?
local tbl_spec = {
["item1"] = "info1",
["item2"] = "info2",
["item3"] = "info3",
["item4"] = "info4",
["item5"] = "info5"
}
for k,v in pairs(tbl) do --перебираем таблицу
My Visual Database → Posts by Vyvern
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi