Mazzay

Пользователи
  • Публикации

    46
  • Зарегистрирован

  • Посещение

О Mazzay

  • Звание
    Продвинутый пользователь

Информация

  • Пол
    Мужчина
  • Город
    Саратов
  1. Собственно: for(int i = 0; i < ListView1->ControlsCount; ++i) if(dynamic_cast<TControl*>(ListView1->Controls->Items[i])->ClassNameIs("TSearchBox")) { dynamic_cast<TSearchBox*>(ListView1->Controls->Items[i])->Text = EmptyStr; break; }
  2. А ещё есть какие-нибудь варианты? C++Builder не поддерживает helper.
  3. TfgToast

    Я к тому, что FGX установлен. Но объявления класса TfgToast нет ни в одном hpp-файле.
  4. TfgToast

    Давно уже пользую TfgActivityDialog, но для TfgToast не нахожу объявления.
  5. TfgToast

    Cпасибо. Но что-то не нахожу header.
  6. TfgToast

    Жаль, что только для Delphi.
  7. Вот реальный пример, если кто не видел:
  8. Сделал выбор числа месяца скроллингом (как это реализовано на устройствах Apple). Для наглядности вот рабочий пример: https://youtu.be/F73fCMSlL7I. Но для красоты картины не хватает вывода заворачивающихся чисел в перспективе: Как сие реализовать?
  9. Многократное щёлканье получилось вот так. В объявлении класса: #ifdef __ANDROID__ _di_JAudioTrack audioTrack; TJavaArray__1<short>* samples; #endif В конструкторе: #ifdef __ANDROID__ samples = new TJavaArray__1<short>(1); samples->Items[0] = 0x0FFF; audioTrack = TJAudioTrack::JavaClass->init(TJAudioManager::JavaClass->STREAM_MUSIC, 11025, TJAudioFormat::JavaClass->CHANNEL_OUT_MONO, TJAudioFormat::JavaClass->ENCODING_PCM_16BIT, TJAudioTrack::JavaClass->getMinBufferSize(11025, TJAudioFormat::JavaClass->CHANNEL_OUT_MONO, TJAudioFormat::JavaClass->ENCODING_PCM_16BIT), TJAudioTrack::JavaClass->MODE_STREAM); #endif На событие: #ifdef __ANDROID__ audioTrack->write(samples, 0, 1); audioTrack->play(); audioTrack->stop(); #endif В деструкторе: #ifdef __ANDROID__ delete samples; #endif
  10. Спасибо большое! На Билдере получилось так: #include <AndroidApi.JNI.Media.hpp> void AndroidSound(double freqHz, int durationMs) { double Pi = 3.14159265358979323846; int count = (int)(44100.0 * 2.0 * (durationMs / 1000.0)) & ~1; TJavaArray__1<short>* samples = new TJavaArray__1<short>(count); for(int i = 0; i < count; i += 2) { short sample = (short)(Sin(2 * Pi * i / (44100.0 / freqHz)) * 0x7FFF); samples->Items[i + 0] = sample; samples->Items[i + 1] = sample; } _di_JAudioTrack audioTrack; audioTrack = TJAudioTrack::JavaClass->init(TJAudioManager::JavaClass->STREAM_MUSIC, 44100, TJAudioFormat::JavaClass->CHANNEL_CONFIGURATION_MONO, TJAudioFormat::JavaClass->ENCODING_PCM_16BIT, count * (sizeof(TJavaArray__1<short>) / 8), TJAudioTrack::JavaClass->MODE_STATIC); if(audioTrack->write((TJavaArray__1<short>*)samples, 0, count)) audioTrack->play(); delete samples; } Только при многократном вызове (у меня при прокрутке щёлкает звуком ScrollBox) получаю ошибку: Не пойму, почему. Сдаётся мне, переменную audioTrack надо как-то уничтожать. Хотя, это интерфейс…
  11. Приведённый здесь пример почему-то не обрезает выбираемые варианты звуков по длительности ADuration. uses AndroidApi.JNI.Media; procedure MakeSound(ADuration: Integer); var Volume: Integer; StreamType: Integer; ToneType: Integer; ToneGenerator: JToneGenerator; begin Volume := TJToneGenerator.JavaClass.MAX_VOLUME; // задаем громкость StreamType := TJAudioManager.JavaClass.STREAM_ALARM; ToneType := TJToneGenerator.JavaClass.TONE_DTMF_0; // тип звука ToneGenerator := TJToneGenerator.JavaClass.init(StreamType, Volume); ToneGenerator.startTone(ToneType, ADuration); end; Задаваемая длительность может только увеличить время воспроизведения, но не может уменьшить. Может есть какие-нибудь способы обрезать воспроизводимое?
  12. Не хочу добавлять компоненты и аудио-файлы в проект ради обычного воспроизведения коротенького щелчка. Никак не могу найти. Android API позволяет воспроизвести просто звук нужной длительности и частоты?
  13. Спасибо. Пригодилось.
  14. Сделал в результате два грида: левый — с одним столбцом, правый — с остальными. Прокрутку синхронизировал: void __fastcall TMainForm::Grid2ViewportPositionChange(TObject *Sender, const TPointF &OldViewportPosition, const TPointF &NewViewportPosition, const bool ContentSizeChanged) { Grid1->ViewportPosition = TPointF(Grid1->ViewportPosition.X, Grid2->ViewportPosition.Y); } void __fastcall TMainForm::Grid1ViewportPositionChange(TObject *Sender, const TPointF &OldViewportPosition, const TPointF &NewViewportPosition, const bool ContentSizeChanged) { Grid2->ViewportPosition = TPointF(Grid2->ViewportPosition.X, Grid1->ViewportPosition.Y); }
  15. Есть хоть какая-нибудь возможность зафиксировать первый столбец, чтобы он не прокручивался? То есть нужен аналог свойства FixedCols из VCL,