926

(10 replies, posted in Russian)

Зацикливание у него должно быть:

http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=8022&download=0

Ну, а про остальное - без комментариев ))))

Alexandr wrote:

Хотелось бы конечно по больше компонентов в программе, как в Эмбракадеро Делфи....а то маловато, очень ограничивает возможности по разнообразию программ...

Эмбаркодеро - это тоже космос, в плане стоимости:
http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=8021&download=0

http://pravmiass.ru/wp-content/uploads/2017/12/pravkarabash-1-1.jpg

928

(10 replies, posted in Russian)

Можно использовать стандартный плеер Windows.


PlaySoundEx()


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


Доступ к медиаплееру осуществляется через класс TWindowsMediaPlayer. Воспроизведение будет идти в фоновом режиме, поэтому вначале инициализируем глобальную переменную и создадим один экземпляр плеера.

var
   WMP: TWindowsMediaPlayer; // медиаплеер
 
begin
  // медиаплеер
  WMP:= TWindowsMediaPlayer.Create(frmMain); // создаём экземпляр плеера
  WMP.set_volume(100); // громкость - 100%
end.

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


Для воспроизведения файлов будем использовать следующую функцию:


procedure PlaySoundEx( AFileName:string );
// воспроизведение звука с помощью медиаплеера
begin
  if WMP <> nil then
  begin
    WMP.Stop; // останавливаем воспроизведение
    WMP.URL := AFileName; // настраиваем файл
    WMP.Play; // воспроизводим
  end;
end;

В качестве параметра передаётся полный путь к аудиофайлу, который вы хотите воспроизвести.


Про зацикливание. Так как в текущей версии MVD нельзя напрямую дать указание плееру зациклить запись, то нужно создать таймер и в нем проверять свойство PlayState и при необходимости перезапускать воспроизведение. Но полностью бесшовное зацикливание этим способом сделать нельзя.

vovka3003 wrote:

Да, возможно, если написать соответствующий код...

Ты предлагаешь написать дополнительную библиотеку для работы с PDF? ))))


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


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


Еще есть вариант с ОLE, если на компе стоит какая-нибудь добротная программа для обработки PDF, но это тоже космос ))))

http://bbeautyworld.ru/wp-content/uploads/2015/11/46.jpg

930

(12 replies, posted in General)

haciamirumbo wrote:

I respect every opinion or complaint about Dmitry. But before complain you should ask yourself some questions and think yourself the answers. For example, there are some of the questions I asked myself before buying the software:
1)Is My visual database a complete database solution? My answer was yes, it is.
2)Has MVD all the resources to do all the database software possible? Yes
3)How is the learning curve? Small for small applications, medium(SQL language) for medium applications, large (code scripting) for large or very complex applications
4)Could you do a complete and simple application without writing any single line of code? Yes
5)The same 4 questions but instead of a simple application a complex application? Yes you can do very complex applications but you should know SQL and if possible Object Pascal language(but the code required probably is going to be 98% less than doing the same in Delphi starting from scratch).
6)If I purchase the license do I have support? Yes, you have support, and 95% of the support comes from many experts in the forum but ask yourself  When you buy an excel or MS office what type of support do you have? I have not seen any email or answer from Bill Gates to anyone "EVER" so, why do you need Dmitry?
7)If the software has a bug Dmitry is going to fix it? I prefer to ask Drive soft if it is going to be fixed it? Yes, without any question, but I have not seen many many bugs uploaded what I see is people requesting to program something that they do not know how to do it...Ask again yourself: the Microsoft or Google technical support is going to program my software for me? The answer is NO......so why then Dmitry has to program your software? He could or could not help you programming your software.....but he does not have to.
8) Who qualified guy help in the forum when Dmitry is not available? If you check every request you will see a lot of active users helping others
with very high skills in MVD and Delphi...............besides Dmitry ask the users: k245, derek, ehwagner, brian.zaballa........and so on
9)Are there resources to learn? Yes, you have the book, the help file, or you could take a beginner's MVD course or SQL advanced course here is the link https://vk.com/createmyvisualdatabaseapp_en or https://sites.google.com/view/my-visual-database
10) I understand that we have been educated in a society that teaches you the word: Give me, Give me, give me instead look and research for yourself. So my advice is to download the book, read it, practice, practice, practice, download examples from the forum, keep studying, then do a project and if you are stuck upload your project to the forum with the questions you have, please do not pretend that derek or the other guys are going to guess your project or your questions for you, they are not wizards or a warlock. You will suddenly see that you are not going to need to ask for Dmitry.
11)Dmitry is a person and has a life like you.

Best regards, Jaime.


"Слышу речь не мальчика, но мужа" (с) А.С.Пушкин

931

(9 replies, posted in Russian)

Vickus wrote:

Спасибо за помощь!

А возможно ли вместо DataPicker все заводить в текстовом поле?
Например: в текстовом поле (Edit1) маска ввода 00\:00;_, во втором текстовом поле (Edit2) та же маска ввода 00\:00;_. При вводе в первое текстовое поле, допустим, 15:00, во втором текстовом поле прибавлялся 1 час и выходило 16:00?


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


А чем вам специальный компонент ввода не угодил? У него тоже есть ввод через маску )))

А где же видеоролики? )))

vovka3003 wrote:
k245 wrote:

нет такого в Pascal ))))

Ну, вообще-то есть... А нет - в MVDb.

Если ты про это: http://www.delphikingdom.com/asp/viewit … alogid=868, то потребуется полноценный ObjectPascal, интерфейсы и прочие прелести высшего пилотажа )))

И не получится - нет такого в Pascal ))))


Используй  TStringList (TStrings), у них есть встроенные механизмы поиска по строковому идентификатору:


TStrings.Values() - возвращает значение по имени


Данные должны храниться как строки вида:


<Имя>=<Значение>


А понадобится многомерность, создавай из них массивы:

var
  a: array [5] of TStrings;

...

a[i].Values('left') := '0';

Если бы вы уточнили задачу, то было бы больше вариантов )))


Например, если нужно отобразить только одну конкретную запись в таком виде, то можно использовать SQL-запрос:


SELECT 'Название поля 1'  as FieldName, CAST(field_1 as CHAR) as FieldValue FROM table WHERE id = 1
UNION
SELECT 'Название поля 2'  as FieldName, CAST(field_2 as CHAR) as FieldValue FROM table WHERE id = 1
UNION
SELECT 'Название поля 3'  as FieldName, CAST(field_3 as CHAR) as FieldValue FROM table WHERE id = 1
UNION
...
SELECT 'Название поля n'  as FieldName, CAST(field_n as CHAR) as FieldValue FROM table WHERE id = 1

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

936

(5 replies, posted in Russian)

Подсветку делают в обработчике события onChange у таблицы, поищите решение на форуме, например тут: http://myvisualdatabase.com/forum/viewtopic.php?id=7255

Такой возможности нет, но есть представление данных в виде карточки: вы можете расположить на карточке данные в два столбца, в первом столбце названия полей, а во втором - значения полей. Для реализации этого потребуется написать скрипт. Поищите на форуме - есть пример приложения с карточным отображением данных.

Не нужно прогресс после каждого пикселя обновлять ))))  делайте это для каждых 100 или 1000 пикселей (или для одной строки/колонки). То же самое относится и к вызову ProcessMessages.


prog.Max:=SettingPazzle.dbiColor.Width;

...

for i :=0 to SettingPazzle.dbiColor.Width-1 do
begin
  application.processmessages;
  prog.Position:=prog.Position+1;  
  for j :=0 to SettingPazzle.dbiColor.Height-1 do
  begin
    c :=SettingPazzle.dbiColor.Picture.Bitmap.Canvas.Pixels[i,j];
    d:=round((0.30*GetRValue(c))+(0.59*GetGValue(c))+(0.11*GetBValue(c)));
    buf.Canvas.Pixels[i,j] :=RGB(d,d,d);
  end;
end;

Вам нужны дочерние записи:


http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&amp;item=7965&amp;download=0

sibprogsistem wrote:

сделал и немного огорчился
процесс слишком долгий...

Насколько долгий? Приведите пример: размер изображения ( A x B, пикселей ) - время конвертации ( мСек ).
Судя по вашему видео, тейлы маленькие (100х50)....

ProcessMessages позволит избежать фризов курсора и продолжить игру, даже если расчёт изображения не закончен. Делайте расчет  следующего элемента заранее, пока игрок двигает предыдущую фигуру. Либо как вы выразились, используйте "комбайн" - преобразуйте изображения в момент загрузки в БД,

vovka3003 wrote:
sibprogsistem wrote:

короче с начало нужно Color преобразовать в  RGB
а в MVD нет ColorToRGB();

А выше я там бобров наверное пас...

https://cs9.pikabu.ru/post_img/2017/02/15/5/1487139432127369531.jpg

sibprogsistem wrote:

я вообще туда иду или как ?

Туда ))))

vovka3003 wrote:

Так же рекомендую заюзать для обработки изображения COM-объекты WIA.ImageFile, WIA.ImageProcess из библиотеки wiaaut.dll

Круть крутецкая: сканеры, веб-камеры и прочее, и прочее...
https://docs.microsoft.com/ru-ru/previo … -startpage

Осталось создать 5-6 примеров для MVD и памятник при жизни обеспечен ))). По крайней мере народная тропа пользователей MVD не зарастёт. 

https://sochinyshka.ru/wp-content/uploads/2020/02/programm2.jpg

944

(12 replies, posted in Russian)

sibprogsistem wrote:

в новом проекте перехватывает
буду искать причину

Видимо, на форме есть кнопка со свойством Cancel = True. Измени его на Cancel = False и все заработает ))))

vovka3003 wrote:

Можно и раньше:

procedure CloseQuery(Sender: TObject; var CanClose: Boolean);
begin
   ShowMessage('CloseQuery');
   CanClose := false;
end;

procedure Close(Sender: TObject; Action: TCloseAction);
begin
   ShowMessage('Close');
   Action := caNone;
end;

begin
 Form1.OnCloseQuery := @CloseQuery;
 Form1.OnClose := @Close;
end.

Чтобы предотвратить закрытие достаточно одного обработчика OnCloseQuery .  Событие OnClose срабатывает тогда, когда форма уже закрывается, менять Action смысла нет, оно в данном случае только для чтения.

А в чем именно затруднения?

Доступ к пикселям картинки можно осуществить через канву, вот пример:

procedure SetMaskColor(AImage: TdbImage; AColor: TColor);
// раскрасить картинку-маску в нужный цвет
// маска служит для создания круглой виньетки.
var
  x: integer;
  y: integer;
begin
  for y := 0 to AImage.Height - 1 do
    for x := 0 to AImage.Width - 1 do
    begin
      if AImage.Canvas.Pixels(x, y) <> clWhite then
        AImage.Canvas.Pixels(x, y) := AColor
    end;
end;

Преобразование цвета в компоненты тоже видел на форуме. Обратное преобразование - встроенная функция RGB();

Вот пример из проекта с форума:

procedure GenerYarkost(Color: TColor);  //Генерация шкалы яркости для выбранного оттенка
var
  j: Integer; //счётчики
  r, g, b: real;//RGB
begin
  b := Color div $10000;
  g := (Color mod $10000) div $100;
  r := Color mod $100;
  frmCol.Caption := 'RGB: R='+floattostr(r)+'  G='+floattostr(g)+'  B='+floattostr(b)+'  HEX: '+TColorToHex(Color);
  StepR:=(256-r)/256; //определение шага для красного
  StepG:=(256-g)/256; //определение шага для зелёного
  StepB:=(256-b)/256; //определение шага для синего
  for j:=255 downto 0 do
    begin
      r:=r+StepR;  //меняем оттенок красного
      g:=g+StepG;  //меняем оттенок зеленого
      b:=b+StepB;  //меняем оттенок синего
      if r>255 then r:=255;  //проверяем чтобы не превысил 255
      if g>255 then g:=255;
      if b>255 then b:=255;
      imCol3.Canvas.Pen.Color:=RGB(round(r), round(g), round(b));
      imCol3.Canvas.MoveTo(0,j);
      imCol3.Canvas.LineTo(40,j);
    end;
end;

Осталось выбрать формулу для перевода цвета в черно-белое изображение, например вот такую:

C = 0.2989 * R + 0.5870 * G + 0.1140 * B

Добавить для поля БД:


- заголовок по умолчанию
- описание


http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&amp;item=7902&amp;download=0


Заголовок подставлять в заголовки таблиц отображения при добавлении поля в таблицу.
Описание - часть системы документирования проекта.

senseyesenseye1983 wrote:

Всем привет. Подскажите пожалуйста в чем моя ошибка.

procedure frmStart_Button8_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmForm1.Parent:=frmStart.Panel2;
  frmForm1.Show;
  frmForm1.button7.Click;
end;

Проблема в точ что когда ты открываешь программу и переходишь на любую форму и при закрытии программы вылетает ошибка:

Access violation at adress 0054FF39 in module "Uchet.exe". Read of adress 00000000 Script position : 3:3


Может кто подскажет ?

Недостаточно указать у формы Parent, ещё нужно вызвать специальную функцию SetParent():

procedure frmStart_Button8_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmForm1.Parent:=frmStart.Panel2;
  SetParent(frmForm1.Handle, frmStart.Panel2.Handle);
  frmForm1.Show;
  frmForm1.button7.Click;
end;

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

есть нюанс с обработчиком, точнее, с набором передаваемых параметров в процедуру.


Либо использовать такой боекомплект параметров


onMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer). 

Либо привязывать иначе:
     

       ...
       pa.Visible:=True;
       AssignEvents(pa);
       pa.dbOnMouseDown := 'selectpa';
       ...