26

(7 replies, posted in Script)

sonixax wrote:

Many thanks,
But I want to have it before save anything!

I want to use it in scripts to show something on the form, no matter if save button pressed or not.


is it still stored in save button properties even before click on save button?

узнать максимальный id вашей таблицы

SQLExecute('SELECT seq FROM SQLITE_SEQUENCE WHERE name="a"');

добавьте 1 и Вы получите номер будущей записи

27

(7 replies, posted in Script)

всем привет
попробуйте этот вариант

28

(5 replies, posted in Russian)

сделал так

Repeat

  if ( TdbPanel(TdbPanel(panelGeneral).Parent) is TdbPanel ) then
  begin
    XY := XY-TdbPanel(panelGeneral).Left-frm.Left - TdbPanel(TdbPanel(panelGeneral).Parent).Left-5;
    YY := YY-TdbPanel(panelGeneral).Top-frm.Top-TY - TdbPanel(TdbPanel(panelGeneral).Parent).Top;
    panelGeneral := TdbPanel(panelGeneral).Parent;
    CPName := TdbPanel(panelGeneral).Parent.Name;
  end;
  if ( TdbGroupBox(TdbGroupBox(panelGeneral).Parent) is TdbGroupBox ) then
  begin
    XY := XY-TdbGroupBox(panelGeneral).Left-frm.Left - TdbGroupBox(TdbGroupBox(panelGeneral).Parent).Left-5;
    YY := YY-TdbGroupBox(panelGeneral).Top-frm.Top-TY - TdbGroupBox(TdbGroupBox(panelGeneral).Parent).Top;
    panelGeneral := TdbPanel(panelGeneral).Parent;
    CPName := TdbGroupBox(panelGeneral).Parent.Name;
  end;
  if ( TdbTabSheet(TdbTabSheet(panelGeneral).Parent) is TdbTabSheet ) then
  begin
    XY := XY-TdbTabSheet(panelGeneral).Left-frm.Left - TdbTabSheet(TdbTabSheet(panelGeneral).Parent).Left-5;
    YY := YY-TdbTabSheet(panelGeneral).Top-frm.Top-TY - TdbTabSheet(TdbTabSheet(panelGeneral).Parent).Top;
    panelGeneral := TdbPanel(panelGeneral).Parent;
    CPName := TdbTabSheet(panelGeneral).Parent.Name;
  end;

  until frm.FindComponent(CPName) = nil;

29

(4 replies, posted in Russian)

k245 wrote:

Это позволяет создавать универсальные обработчики, не привязанные к конкретной форме или компоненту:

Спасибо

30

(5 replies, posted in Russian)

k245 wrote:

Для этого нужна рекурсивная процедура, которая будет складывать top и left с родительскими. В Дельфи это метод встроен в компоненты, в MVDB придется писать скрипт ))).

да я так и делаю, но я хотел написать универсальный скрипт, ведь компонент может находиться не только на самой форме..
к примеру на панели_1 которая находиться на панели_2  которая вообще расположена в еще каком ни будь боксе..
..

31

(5 replies, posted in Russian)

возможно-ли определить координаты компоненты относительно экрана а не формы..

32

(4 replies, posted in Russian)

derek wrote:

Возможно, попробуйте так..

Супер, спасибо!!!

33

(4 replies, posted in Russian)

помогите !!

мне нужно получить имя формы на которой произошло действие (любое действие)

34

(7 replies, posted in Russian)

k245 wrote:

Тут несколько принципов нужно применить.


Во-первых, чтобы обработчики этих компонент не содержали в своем коде жесткой привязки к этим компонентам, а работали через FindComponent.


Во-вторых нужно отказаться от хранения этих как я их называю "виртуальных классов"  на форме. Их лучше создавать программно, а на форме для удобства можно размещать "плейсхолдер" - обычный компонент, на месте которого будет "строиться" экземпляр "виртуального класса".


Как раз на эту тему пишу статью )))  Точнее, в статье описываются такие "виртуальные классы". Если интересно, могу эту тему копнуть глубже, дать больше теории и практических примеров.

Да, мне это очень интересно, было бы здорово...

35

(7 replies, posted in Russian)

vovka3003 wrote:

А, ну тогда понятно...

Дублирование компонентов и их потомков во время выполнения приложения

36

(7 replies, posted in Russian)

vovka3003 wrote:

Ctrl+A, Ctrl+С, Ctrl+V...
Не?

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

37

(7 replies, posted in Russian)

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

38

(2 replies, posted in Talks about all)

Form1.Caption := Now ;

39

(4 replies, posted in FAQ)

Alfil wrote:

Между делом возник еще такой вопрос: Возможно ли сделать что б при открытии формы все записи в таблице по умолчанию  были выбраны?

   

procedure Form1_OnShow (Sender: TObject; Action: string);
var
i: integer;
begin
  for i:=0 to Form1.TableGrid1.RowCount-1 do
    Form1.TableGrid1.Row[i].Selected := True ;

end;
Alfil wrote:

Новый вопрос: Как сделать что б в случае пустого combobox на нем всплывало сообщение о том что он обязателен для заполнение, такое же как всплывает над пустым TextBox, обязательным для заполнения. Сейчас при пустом просто вылетает ошибка

ShowHint(component,'message');

41

(4 replies, posted in FAQ)

procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
i: integer;
begin
  for i:=0 to Form1.TableGrid1.RowCount-1 do
    if Form1.TableGrid1.Row[i].Selected then
      SQLExecute('INSERT INTO b(bb)VALUES("'+ IntToStr(Form1.TableGrid1.Row[i].ID) +'")');

  UpdateDataBase('b');
end;

42

(2 replies, posted in General)

Form1.Memo1.Text := HTTPGet('http://sibprogsistem0.myjino.ru/README.md/',False);
pwildman wrote:

I have a table of sellers/creators that I use to track whether I have reviewed the current monthly product offerings for each seller/creator. I have a boolean column named 'reviewed' in the table that tracks whether I reviewed the seller/creator.

The problem I have is that at the beginning of the next month I would like to have all the 'reviewed' values cleared so that I can track whether I have reviewed the sellers/creators for the new month. I am thinking that there could be use case issues and extra complexity for an automated process to clear the 'reviewed' values. I think a button to activate the process would be a better way to do this.

Прикрепите Ваш проект

Alfil wrote:

запись проискодит только если в этот момент активна таблица, то есть если фокус при нажатии клавиши "добавить" находится на SearchPrihTab.


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

var - объявляется только один раз
Вы пытаетесь получить id из таблицы в которую потом же пытаетесь записать поля Prih
 
а нужно брать id таблиц Book и Docs , и потом записывать их в ключ

var
    IDdocs:string = SQLExecute('SELECT id FROM Book WHERE id='+PrihForm.CombDocs.sqlValue); // id записи таблицы Docs
    IDbook:string = SQLExecute('SELECT id FROM Docs WHERE id='+PrihForm.SearchPrihTab.sqlValue); // id записи таблицы Book

 
а вообще получать id таким способом не обязательно так как sqlValue содержит этот самый id
можно записать так

SQLExecute('INSERT INTO Prih(KolPr, id_Docs, id_Book) VALUES ("'+PrihForm.KolPr.Text+'","'+PrihForm.CombDocs.sqlValue+'","'+PrihForm.SearchPrihTab.sqlValue+'")'); //Запись в Prih
k245 wrote:

Кулинарная книга


https://lh6.googleusercontent.com/1glM6qK7Xc3b5NdICvFCnS4oWEgQxgx59cGR9DG-mm6r0fZgCbVOfgP4bIZiESY1b2HxCHte_N9InAJePr1s53SgbTiWifUS8ihKgyZAsOoPTWbrXhPUqwhxiPI4qrEhCw9EbTmmUB1b6ed88uw=w640-h426


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


Читать: https://createmyvisualdatabaseapp.blogs … -post.html

smile
Вы меня опередили, я тоже хотел создать такую программу )))
 
а вообще идея хорошая

47

(12 replies, posted in Script)

procedure checkBoxTest (Sender: TObject);
var
i:integer;
begin
  for i:=0 to Form2.ComponentCount-1 do
    if TdbCheckBox(Form2.Components[i] is TdbCheckBox) then
       if (TdbCheckBox(Form2.Components[i]).Name <> TdbCheckBox(Sender).Name) then TdbCheckBox(Form2.Components[i]).Checked := False;
  TdbCheckBox(Sender).Checked := True;
end;

48

(2 replies, posted in Russian)

k245 wrote:

1. В обработчике onShow пробежать по всем компонентам формы (свойство TForm.components[])   и в свойство TagStr записать текущее значение, при необходимости сконвертировав его в строку. Тут придется использовать проверку на класс (оператор is) и приведение к нужному типу. Это позволит создать один универсальный обработчик и подключить его ко всем формам редактирования.


2. В функции Form_isDataChange опять пробежать по всем компонентам и сравниmь текущее значение и свойство TagStr. Если есть различия, значит были изменения.


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

тогда наверное лучше json
при загрузке пробежать по компонентам и записать их в json
   
trigger (массив)[
  объект(компонент){
     " ключ ":" значение",
     " ключ ":" значение"
  }
  объект(компонент){
     " ключ ":" значение",
     " ключ ":" значение"
  }
]

49

(2 replies, posted in Russian)

derek wrote:

Привет Sibprogsistem,
Возможно, попробуйте так.
С уважением,
Derek.

just what I needed, thank you so much!!

50

(2 replies, posted in Russian)

гуглил и не нагуглил ))
как можно sql запросом получить имена полей в таблице?