Лидеры
Популярный контент
Показан контент с высокой репутацией 14.02.2017 в Сообщения
-
Даже не знаю или в правильный раздел форума пишу. Я, например, хочу поблагодарить в своей теме - krapotkin и Равиль Зарипов за очень полезные ответы. Реально помогают решить вопросы. Спасибо. Хотя все они паскалисты, все же удается иногда получить код на С++ со стороны. Очень в этом помогает автор Indy rlebeau, например эту статью: Статья он переводит в С++ тут: C++ и никто бы другой не помог. В этом плане тяжело, без него и никак вопрос не решить. А этот форум это симбиоз ума и решений! Спасибо Ярославу за реализацию и хоты бы одного спеца по С++ как по Дельфи и - вот оно счастье. Спасибо!4 балла
-
в том, что на билдере выполнение процедуры останавливается в ShowMessage код void __fastcall TForm1::Button1Click(TObject *Sender) { Label1->Text = L"До"; ShowMessage(L"Привет"); Label1->Text = L"После"; }2 балла
-
2 балла
-
TTask опасен (Android)
Равиль Зарипов (ZuBy) и ещё один отреагировал krapotkin за вопрос
а сейчас тут в точности написано следующее My_Procedure; Button1.Enabled := True;2 балла -
вообще имхо плохой вариант делать анимацию через поток и sleep в данном случае я бы лучше наверное разделил анимацию на нужное кол-во ступеней и просто в таймере запускал их смысл абсолютно тот же ибо доп. поток будет работать только на Sleep, все остальное все равно происходит в главном2 балла
-
Вот пример как у меня идет добавление в архив используя zip в MacOS: function ZipAdd(AArchName, AFileName: String): boolean; {$IFDEF MACOS} var s, sRoot, sFileName, sArchName: String; {$ENDIF} begin Result := False; {$IFDEF MACOS} try if DirectoryExists(AFileName) then begin if AFileName[AFileName.Length] = PathDelim then System.Delete(AFileName, AFileName.Length, 1); sRoot := ExtractFilePath(AFileName); AFileName := AFileName.Remove(0, sRoot.Length); s := Format('pushd "%s"; zip -r "%s" "%s"; popd', [sRoot, AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end else begin s := Format('zip -j "%s" "%s"', [AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end; Result := FileExists(AArchName); except Result := False; end; {$ENDIF} end; Замените зиповские команды архивирования на раровские разархивирования, добавьте необходимую Вам логику и наслаждайтесь2 балла
-
[Статья][Android] AlarmManager - Автозапуск приложения в назначенное время
Dev отреагировал Andrey Efimov за тема
Ссылка: http://delphifmandroid.blogspot.ru/2016/02/alarmmanager-rad-studio.html Автор: Ефимов Андрей Описание: [AlarmManager] Автозапуск приложения в назначенное время1 балл -
В определенное время отправлять SMS - как лучше реализовать?
ENERGY отреагировал Andrey Efimov за вопрос
[Статья][Android] AlarmManager - Автозапуск приложения в назначенное время1 балл -
И еще курсы Ярославы были очень полезными. Даже С++ сишникам все было понятно...:) Ну это я про себя.1 балл
-
1 балл
-
Два вопроса по модальным окнам
Равиль Зарипов (ZuBy) отреагировал krapotkin за вопрос
по поводу алгоритма закрытия формы через N секунд нужно вызвать из таймера диалог с сообщением. (лучше взять у ZuBy уже предложенную библиотеку MyDialogs. я начинал ее делать именно из-за того, что стандартные диалоги не вывозят) а на закрытие диалога повесить form.Release тогда все будет как вы хотите сначала выйдет сообщение. Потом закроется форма1 балл -
Обработка клавиатуры
Rusland отреагировал RoschinSpb за вопрос
См. документацию источник знаний: KeyDown или TKeyEvent. Key это скан код клавиши приведенный к виртуальным кодам клавиш windows. Это значение получается когда нажато некоторое сочетание клавиш к примеру Ctrl+<пробел>, такие нажатия последовательно передаются всем контролам, пока один из них не обработает его и не сбросит в 0. За некоторыми исключениями эти значения определяются физическим расположением клавиш, т. е. английская клавиша <A> будет всегда располагаться приблизительно в одном и том же месте и на Mac и на Win и в России и в Гондурасе. Keychar это введенная буква. Т.е. обычная буква которая вводится при наборе текста зависит от платформы, языка, выбранной раскладки способа ввода и прочих параметров. Такие нажатия передаются только фокусному контролу. Так что для Ctrl+<пробел> надо использовать проверку if (Key = vkSpace) and (ssCtrl in shift). Для проверки нажатия Ctrl+Ф надо использовать проверку if (Key = vkA) and (ssCtrl in shift) и ни каких Key = Ord('Ф') потому, что неизвестно какая на этом месте будет буква на каком-нибудь Mac из Японии. И более того Key = Ord('Ф') = $D4 - это зарезервированный код клавиши Key = Ord('ф') = $F4 - это VK_OEM_ENLW (Only used by Nokia) Key = Ord('a') = $61 - это vkNumpad1 (1 key numeric keypad) Но проще было бы создать действие (см. TActionList и TAction), назначить на него ShortCut выбрав одно из рекомендованных значений.1 балл -
Обработка клавиатуры
Andrey Efimov отреагировал krapotkin за вопрос
нет в данном случае ОРД это отец русской демократии ))) я же написал код, что еще? if (keychar = ' ') then1 балл -
1 балл
-
Обработка клавиатуры
Andrey Efimov отреагировал krapotkin за вопрос
блин, для цифробуквенных символов, тех, что отображаются в Edit, ответ в ord(keychar) = 32 для всех остальных - в Key а чтобы узнать нажат ли ctrl, есть shift таким образом if (keychar = ' ') and (ssCtrl in shift) then спасет ОРД.1 балл -
TTask опасен (Android)
Major отреагировал Andrey Efimov за вопрос
Правило: Обращение к любому визуальному компоненту в потоке только через TThread.Synchronize1 балл -
А там что? Обращение к визуальным компонентам?1 балл
-
Самое простое решение ("на коленке"): uses ... {$IFDEF MSWINDOWS} System.Win.ComObj, Winapi.ShlObj, {$ENDIF} ... //------------------------------------------------- type TTaskBarState = record name : string; value : byte; end; TFMXTaskBar = class(TPersistent) private fTaskBarList : ITaskBarList3; fTaskBarState : integer; fTaskBarProgress : integer; fAlertState : Boolean; procedure setTaskBarState(newState:integer); procedure setTaskBarProgress(newValue : integer); procedure setAlertState(const Value: Boolean); protected public property AlertState: Boolean read fAlertState write setAlertState; property TaskBarState : integer read fTaskBarState write setTaskBarState; property TaskBarProgress : integer read fTaskBarProgress write setTaskBarProgress; constructor Create; destructor Destroy; override; end; //------------------------------------------------- const taskStates : array [0..4] of TTaskBarState = ( (name: 'TBPF_NOPROGRESS'; value: TBPF_NOPROGRESS), (name: 'TBPF_INDETERMINATE'; value: TBPF_INDETERMINATE), (name: 'TBPF_NORMAL'; value: TBPF_NORMAL), (name: 'TBPF_ERROR'; value: TBPF_ERROR), (name: 'TBPF_PAUSED'; value: TBPF_PAUSED)); //------------------------------------------------- var MainTaskBar: TFMXTaskBar; //------------------------------------------------- { TFMXTaskBar } constructor TFMXTaskBar.Create; var tbList : ITaskBarList; hr : HRESULT; begin tbList := CreateComObject(CLSID_TaskBarList) as ITaskBarList; hr := tbList.QueryInterface(IID_ITaskBarList3, fTaskBarList); if hr <> S_OK then begin fTaskBarList := nil; tbList._Release; end; end; destructor TFMXTaskBar.Destroy; begin inherited; end; procedure TFMXTaskBar.setAlertState(const Value: Boolean); begin if assigned(fTaskBarList) then if fAlertState <> Value then begin fAlertState := Value; if Value then begin setTaskBarState(3); // TBPF_ERROR setTaskBarProgress(100); end else begin setTaskBarState(0); setTaskBarProgress(0); end; end; end; procedure TFMXTaskBar.setTaskBarProgress(newValue: integer); begin if assigned(fTaskBarList) then fTaskBarList.SetProgressValue(ApplicationHWND, newValue, 100); end; procedure TFMXTaskBar.setTaskBarState(newState: integer); begin if assigned(fTaskBarList) then fTaskBarList.SetProgressState(ApplicationHWND, taskStates[newState].value); end; //------------------------------------------------- initialization MainTaskBar := TFMXTaskBar.Create; finalization if Assigned(MainTaskBar) then FreeAndNil(MainTaskBar);1 балл
-
PopupMenu в TListView на мобильных системах?
Евгений Корепов отреагировал Равиль Зарипов (ZuBy) за вопрос
Для мобильных есть (не)визуальные нативные компоненты TCustomPopover - http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.MultiView.Types.TCustomPopover TCustomListPicker - http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Pickers.TCustomListPicker TMultiView с режимом Popover TfgActionSheet - http://fire-monkey.ru/topic/3173-rx-fgx-описание-версии-071118/1 балл -
Отображение в виде плиток
afors отреагировал Равиль Зарипов (ZuBy) за вопрос
Предыстория была такая: Изначально такие плитки были сделаны на Button'ах (стиль) и TPresentedScrollBox. Но как только пошло дело в тест основательный идею тут же выбросил. 120+ элементов выключили телефон (samsung ace2 duos) при отрисовке, точней при динамической загрузке картинок. да и в целом вся эта беда работает медленней чем реализация на TListView Я не художник, но смысл вроде передал Пример: У нас есть 12 элементов,и 4 колонки Можно в LV отрисовывать дополнительные "контролы" и поместить в один реальный айтем, 4 виртуальные панельки (в нашем случае) Для того чтобы такое получилось: 1) ListView должна при ресайзе рассчитать сколько колонок она может иметь (ширина LV / на ширину одной панельки) 2) дальше Вам нужно будет разбить отрисовку Itema на 4 панельки 2.1) тоже самое проделать и при выделении 3) При таком подходе не будет стандартных элементов отображения (Text, Detail, Image и прочее нужно выключить) Добавление Itema будет проходить в два цикла: первый добавляет реальный Item (0-2), а второй заполняет данными наши поля в панельках (title1, price1, bitmap1, title2, price2, bitmap2 и тд...) 4) Ну и самое важное в OnUpdateObjects все это отрисовать Надеюсь вам это поможет!1 балл