pavlenko.vladimir.v wrote:
vovka3003 wrote:

А что не получается-то..?

в каждом индексе должен быть свой цвет
https://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=9994&download=0

Похоже на меню настройки "зебры" для табличного представления. Полезная штука!

Да это я понял.... но не теряю надежды: вдруг кому-нибудь удастся обуздать прозрачность в PNG )))

Есть задача перекрашивать черно-белые PNG с прозрачностью в цветные. Но в MVDB для этого кое-чего не хватает у TPNGImage.  Если бы получилось, то стили автоматически бы получали картинки для кнопок в нужной цветовой тональности. А то сейчас приходится мудрить и делать копии разных цветов....

pavlenko.vladimir.v wrote:

...даже в png перевожу,..

Вопрос по коду:

var
ImageList:TImageList;
bmp:TBitmap;
png: TPngImage;
begin
  bmp := TBitmap.Create;
  bmp.Canvas.Brush.Color := clBlack;
  png := TPngImage.Create;
  png.Assign( bmp );

То есть в результате получается PNG с прозрачностью? Если да, то как ей управлять попиксельно?
Но что-то мне подсказывает, что получаются PNG в стиле программы Paint - без прозрачности.

Переключатель
https://k245.ru/wp-content/uploads/2023/10/Pereklyuchatel.jpg
Data Keeper. Визуальный компонент для отображения логических данных своими руками.
https://k245.ru/mvdb/pereklyuchatel.html

Значительное множество
https://k245.ru/wp-content/uploads/2023/10/tsvety.jpg
Редактирование множественных значений для свойства объекта: компоненты и структуры данных.

https://k245.ru/mvdb/znachitelnoe-mnozhestvo.html

...а ещё иконку приложения сменить на такую:
https://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=9982&download=0

Пока только мысли слепить из TdbEdit (1), TdbButton (2) и TdbStringGridEx (3) конструкцию с аналогичными функциями:
https://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=9981&download=0

2. Как заставить корректно отображаться выпадающий список при увеличении размера шрифта?
https://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=9980&download=0

Увеличил шрифт до 15. Высота компонента не изменилась, надписи наползают друг на друга.
Верхний компонент с MultiSelect = False, работает корректно: высота компонента соответствует высоте шрифта, список отображается нормально.

1. Как убрать панель, закрывающую часть выпадающего списка?

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

vovka3003 wrote:

Программа "нездорова" трохи...

Вот так  ̶ч̶е̶р̶е̶з̶ ̶ж̶о̶п̶у̶ фурычит вроде:

var
...
  Control:TControl;
...
  for i := tmpParent.ControlCount - 1 downto 0 do
  begin
    Control :=  tmpParent.Controls[i];
    Control.Parent := Form1;
    Control.Free;
  end;

или такая дичь:

    SendMessage(TWinControl(tmpParent.Controls[i]).Handle, WM_CLOSE ,0,0);
    tmpParent.Controls[i].Free;

Да ты волшебник! Тогда тебе ещё одна загадка. Точнее, две:

Режим MultiSelect := True;

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


Win10

Родители и дети
https://k245.ru/wp-content/uploads/2023/10/rodovoe-derevo.jpg
Наследование свойств класса; отображение дочерних объектов вместе с родительскими; добавление типа "Дата".
https://k245.ru/mvdb/roditeli-i-deti.html

188

(11 replies, posted in General)

Destiny wrote:

And how to rotate a button

You can implement the label on the button as a picture on which the text is rotated in the desired direction.

189

(8 replies, posted in Russian)

sparrow wrote:

Обратите внимание, что pragma_index_info это информация о столбцах индексов в таблице
А информация о столбцах таблицы это pragma_table_info.
Ну это все равно не для MVD.

Работает в MVDB, но немного иначе:

SQLQuery('PRAGMA table_info(' + ATableName + ') ', tmpDataSet);

190

(8 replies, posted in Russian)

Это какой-то глюк MVDB. Столкнулся с похожей проблемой при написании функции проверки существования поля таблицы:

function DB_FieldExists(ATableName: string; AFieldName: string): boolean;
// проверяет существование таблицы
var
  tmpDataSet: TDataSet;
begin
  case dbType of
    DBT_UNKNOW:
      RaiseException('DB_TableExists - не поддерживается для типа базы DBT_UNKNOW');
    DBT_SQLITE:
      begin
        // Result := SQLExecute('SELECT COUNT(*) AS CNTREC FROM ( pragma_table_info('+ATableName+') WHERE name="'+AFieldName+'" )' ) = 1; // SQLite - не работает в MVDB, но работает в SQLiteStudio
        Result := False;
        SQLQuery('PRAGMA table_info(' + ATableName + ') ', tmpDataSet);
        while not tmpDataSet.EOF do
        begin
          if UpperCase(tmpDataSet.FieldByName('name').asString) = UpperCase(AFieldName) then
          begin
            Result := True;
            break;
          end;
          tmpDataSet.Next;
        end;
        tmpDataSet.Free;
      end;
    DBT_MYSQL:
      RaiseException('DB_TableExists - не поддерживается для типа базы DBT_MYSQL');
  end;
end;

Столкнулся с проблемой: если создать скриптом комбобокс, а затем кликнуть по нему, чтобы показался выпадающий список, то при попытке удалить такой комбобокс выскакивает AV. Если же выпадающий список не вызывать, то комбобокс спокойно удаляется методом Free.

Пример во вложении.


1. Нажимаем кнопку Button1.  При каждом нажатии сначала удаляются все контролы на панели, потом добавляется комбобокс.
2. Нажимаем ещё раз. Ошибки нет. Комбобокс удаляется, потом создается по новой.
3. Открываем выпадающий список комбобокса.
4. Нажимаем кнопку Button1 и получаем AV.


Вопрос: как удалить  комбобокс, если им успели воспользоваться? )))))


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

192

(11 replies, posted in General)

try Form1.ComboBoxХ.dbUpdate for reload data in combo

193

(11 replies, posted in General)

v_pozidis wrote:

See please the picture. Is there a way to do that by script ?

  frmMain.ComboBox2.dbParentCombo := 'ComboBox1';

194

(11 replies, posted in General)

The question is not clear. Expand the topic wider))

195

(4 replies, posted in General)

jrga wrote:
vovka3003 wrote:

Может под wine.

I run MVD applications with PlayOnlinux on Linux and on Macbook through PlayOnMac. It is necessary to install the plugin through playonlinux or playonmac: msxml. Below is an example of an application I developed to run on a Macbook (OSX).

https://www.youtube.com/watch?v=gUu7wrpQZKY&t=12s

Cool!

Хранилище всего
https://k245.ru/wp-content/uploads/2023/10/sklad.jpg
Экспериментальный проект объектно-ориентированного хранения данных в реляционных СУБД
https://k245.ru/mvdb/hranilishhe-vsego.html

197

(3 replies, posted in Russian)

Это очень сложный пример получится ))))


Я делал так:


1. На web-сервере в текстовом файле хранил номер последней доступной версии + установочный файл, созданный InnoSetup
2. При запуске программы скачивал файл с номером версии и сравнивал с текущим. Если номер отличался, то
3. Скачиваем установочный файл, запускаем его и закрываем приложение.


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

1. Экспорт данных
2. Импорт данных.


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

vovka3003 wrote:

А разве в проге нет преобразования utf8<>win1251?

Как отдельной функции - нет.

pavlenko.vladimir.v wrote:

я помню при чтении ini возникала ошибка из-за строки? Вроде как первую строку не читает

TIniFile - не читает, потому как он работает с кодировкой ANSI
TMemIniFile - читает, потому как он работает с кодировкой UTF-8

pavlenko.vladimir.v wrote:
k245 wrote:

1. Метод TIniFile.ReadSectionValues не работает

должен работать, тут я применял его
https://myvisualdatabase.com/forum/view … hp?id=7125

Проверил ещё раз, действительно работает!  Значит, это у меня в коде какой-то баг был, и остаётся только одна новость -  хорошая, про TMemIniFile )))