-
Постов
847 -
Зарегистрирован
-
Посещение
-
Победитель дней
28
Активность репутации
-
Vitaldj получил реакцию от kami в Обновление до Seattle (будут ли проблемы)
Мне кажется должны сработать, вроде там обратная совместимость. Я бы на твоем месте просто бы сделал бекап мака через Time Machine и установил новую xcode с paserver. Если что пойдет не так, откатись назад)).
И еще, дельфи стоит в виртуалке?
-
Vitaldj отреагировална BurcevD в При установки WordWrap у TListViewItem.Objects.Text неверно отображается текст в Android
Копался, копался так ничего и не получилось, в итоге сделал как предложил ruslan (пост 4) но со своими доработками, если кому интересно
на создание объекта и на событие OnUpdatingObjects (на TListView) сделал
aItem.Height := Round(CalculateTextHeight(aItem.Text, aItem.Objects.TextObject.Width, 36, 130, aItem.Objects.TextObject.Font))+4; aItem - TListViewItem - элемент списка из TListView сама функция вот function CalculateTextHeight(aText: String; aWidth: Single; aMinHeight: Single = 0; aMaxHeight: Integer = 0; aFont: TFont) : Single; begin FTextLayout.BeginUpdate; try FTextLayout.Text := aText; FTextLayout.MaxSize := TPointF.Create(aWidth, 1000); FTextLayout.WordWrap := True; FTextLayout.Font.Assign(aFont); FTextLayout.HorizontalAlign := FMX.Types.TTextAlign.Leading; FTextLayout.VerticalAlign := FMX.Types.TTextAlign.Leading; finally FTextLayout.EndUpdate; end; Result := FTextLayout.Height; if aMinHeight>0 then if Result < aMinHeight then Result := aMinHeight; if aMaxHeight>0 then if Result > aMaxHeight then Result := aMaxHeight; end; Параметры
aText - текст, который там отображен,
aWidth - ширина текстового объекта,
aMinHeight - минимально возможная высота (0 - если не нужно ограничение)
aMaxHeight - максимально возможная высота (0- если не нужно ограничение)
aFont - шрифт, используемый объектом
Сразу скажу, чтоб не говорили, что плагиатор, да основная часть и идея функции взята с этого форума.
P.S.Прибавил 4 пикселя, для того, чтобы рамка поместилась
-
Vitaldj отреагировална Rusland в Блокировка программы
Gingercat, здесь статья как создавать свои SSL сертификаты через OpenSSL
-
Vitaldj отреагировална haword в Как програмно изменить стиль в RAD Studio 10 Seatle.
давай еще крупнее и еще краснее шрифт, тогда больше людей ответят.
-
Vitaldj отреагировална Brovin Yaroslav в Описание TfgToast - Быстрые уведомления
Ааа, понял, что не так. Создавать TfgToast нужно при помощи специального метода Create с параметрами.
Toast := TfgToast.Create('Text', TfgToastDuration.Short); Дефолтный конструктор нельзя использовать.
-
Vitaldj отреагировална Brovin Yaroslav в Обновление Update1 Delphi XE8
Вы не совсем правы, Subscription или Support& Maintenance появился еще во времена Borland, но в тот момент его приобретение было не всегда оправдано. Сейчас ситуация несколько изменилась. Приобретение Subscription дает возможность не только получать обновления на текущую версию, но и владельцам получать бесплатно новые версии, которые как вы правильно заметили выходят два раза в год. Годовой контракт на Subscription для Delphi Professional стоит $324, а апгрейд на новую версию Delphi Professional стоит $592 (два релиза – это $592*2). Более подробно про Subscription можно прочитать тут http://www.embarcadero.com/ru/products/rad-studio/update-subscription Если у вас есть вопросы по ценам и лицензиям, вы всегда можете обратиться в московское представительство Embarcadero email Russia.Info@embarcadero.com тел. +7 (495) 708 4393. Наш форум все-таки больше имеет техническую направленность и я не совсем компетентен в вопросах ценообразования и лицензий -
Vitaldj получил реакцию от Ufomaster в Работа с БД Firebird
ruslan, простите, но почему нельзя общаться с БД напрямую? Простите, если мой вопрос совсем как чайника! Это касается только БД Firebird или всех? И в каком случае? Мобильные? Просто первый раз такое слышу, поэтому и спрашиваю. Работаю с десктопами.
-
Vitaldj отреагировална Евгений Корепов в Получить размер файла
Ура! Я победил проблему. Причем с помощью почти забытой мной процедуры FindFirst ;-) Код работает корректно под Windows и Android. Файл не передергивается, антивирус спокоен.
function TFileManager.GetFileSize(APath : String) : String; Var AFileSizeByte : Int64; AFileSizeFloat : Double; SearchRec : TSearchRec; FileAttrs: Integer; begin FileAttrs :=faArchive; FileAttrs := FileAttrs + faAnyFile; Result:='unknow'; AFileSizeByte:=0; try FindFirst(APath,FileAttrs,SearchRec); AFileSizeByte:=SearchRec.Size; FindClose(SearchRec); except Exit; end; if AFileSizeByte<1024 then begin Result:=Format('%d',[AFileSizeByte])+' Byte'; Exit; end; if AFileSizeByte<1048576 then begin AFileSizeFloat:=AFileSizeByte/1024; Result:=Format('%6.3f',[AFileSizeFloat])+' KByte'; Exit; end; if AFileSizeByte<1073741824 then begin AFileSizeFloat:=AFileSizeByte/1048576; Result:=Format('%6.3f',[AFileSizeFloat])+' MByte'; Exit; end; AFileSizeFloat:=AFileSizeByte/1073741824; Result:=Format('%6.3f',[AFileSizeFloat])+' GByte'; end; -
Vitaldj отреагировална rustam_d в IOS Push сообщения на русском как?
В топике старый протокол отправки пушей на ИОС. Не более 256 знаков, а с учетом юникода так вообще не более около 50 букв на русском!!!
Переписал на новый 2-й протокол, чуток попапрился с байтами-битами ), но все же сделал. Теперь на русском можно около 400 букв, а на инглише
как и разрешено около 2000. Это лучший ответ, но не хочу и первую версию снимать со счета...она ведь для ИОС ниже 8.
Вообщем Enjoy :
procedure TForm1.Button2Click(Sender: TObject); var i,j,p: integer; s,c,t,m: string; vStr: TStringStream; begin if not TCPClient.Connected then TCPClient.Connect; m := EscapeString(edMsg.Text); c := edToken.Text; t := ''; for i := 0 to (length(c) div 2) - 1 do t := t + AnsiChar(Byte(('$'+copy(c,i*2+1,2)).ToInteger)); s := '{"aps":{"alert":"'+ m +'","sound":"default","badge":0}}'; p := length(s); j := p + 38; s := #2#0#0 + AnsiChar(hi(j)) + AnsiChar(lo(j)) + #1#0#32 + t + #2 + AnsiChar(hi(p)) + AnsiChar(lo(p)) + s; vStr := TStringStream.Create(s); try SSLHandler.write(vStr); finally vStr.Free; end; end; p.s: нафиг 4 байта для общей длины...если дали разрешение на длину сообщения в 2 килобайта...
-
Vitaldj отреагировална rustam_d в IOS Push сообщения на русском как?
Я сделал это !!! И это бесплатно! )) Отправка ИОС пушей на русском из делфи больше не секрет!!! Полный исходник, максимально упрощенный. Можно указывать циферку на иконке(badge). Про войну с сертификатом SSL pem писал тут http://fire-monkey.ru/topic/1751-push-soobscheniia-ios-ne-mogu-soedinitsia-s-serverom-dlia-o/ procedure TForm1.Button2Click(Sender: TObject); var i: integer; s,c,t,m: string; vStr: TStringStream; begin m := EscapeString('Удачи друзья в FMX!'); //ready for unicode if not tcpclient.connected then tcpclient.connect; c := 'qwerqwerqwerqwerqwerqwerqwerqwerqwer'; //your token t := ''; for i := 0 to (length© div 2) - 1 do t := t + AnsiChar(Byte(('$'+copy(c,i*2+1,2)).ToInteger)); //token as hex s := '{"aps":{"alert":"'+ m +'","sound":"default","badge":0}}'; //payload s := #0#0#32 + t + #0 + AnsiChar(length(s)) + s; //push message vStr := TStringStream.Create(s); try SSLHandler.write(vStr); finally vStr.Free; end; end function TForm1.EscapeString(const AValue: string): string; const ESCAPE = '\'; REVERSE_SOLIDUS = '\'; SOLIDUS = '/'; BACKSPACE = #8; FORM_FEED = #12; NEW_LINE = #10; CARRIAGE_RETURN = #13; HORIZONTAL_TAB = #9; var AChar: Char; begin Result := ''; for AChar in AValue do begin case AChar of REVERSE_SOLIDUS: Result := Result + ESCAPE + REVERSE_SOLIDUS; SOLIDUS: Result := Result + ESCAPE + SOLIDUS; BACKSPACE: Result := Result + ESCAPE + 'b'; FORM_FEED: Result := Result + ESCAPE + 'f'; NEW_LINE: Result := Result + ESCAPE + 'n'; CARRIAGE_RETURN: Result := Result + ESCAPE + 'r'; HORIZONTAL_TAB: Result := Result + ESCAPE + 't'; else begin if (Integer(AChar) < 32) or (Integer(AChar) > 126) then Result := Result + ESCAPE + 'u' + IntToHex(Integer(AChar), 4) else Result := Result + AChar; end; end; end; end; object TCPClient: TIdTCPClient OnStatus = TCPClientStatus IOHandler = SSLHandler ConnectTimeout = 0 Host = 'gateway.sandbox.push.apple.com' IPVersion = Id_IPv4 Port = 2195 ReadTimeout = -1 Left = 328 Top = 48 end object SSLHandler: TIdSSLIOHandlerSocketOpenSSL OnStatus = SSLHandlerStatus Destination = 'gateway.sandbox.push.apple.com:2195' Host = 'gateway.sandbox.push.apple.com' MaxLineAction = maException Port = 2195 DefaultPort = 0 SSLOptions.CertFile = 'MyAPN.pem' SSLOptions.KeyFile = 'MyAPN.pem' SSLOptions.Method = sslvSSLv23 SSLOptions.SSLVersions = [sslvSSLv2, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2] SSLOptions.Mode = sslmClient SSLOptions.VerifyMode = [] SSLOptions.VerifyDepth = 0 Left = 328 Top = 108 end -
Vitaldj получил реакцию от Равиль Зарипов (ZuBy) в Thoma Bravo Announces Sale of Embarcadero to Idera, Inc.
Сообщение для клиентов и партнеров от IDERA
Здравствуйте,
Я Ренди Якобс, CEO компании IDERA, Inc. Вы, скорее всего, видели новости в прессе о приобретении Embarcadero компанией IDERA. Вот ссылка на эту новость, если вы еще ее не видели.
Мы приглашаем Вас присоединиться к сообществу IDERA и продолжить успешную историю лидера рынка продуктов для разработчиков и специалистов по базам данных. Я хочу представить компанию IDERA и объяснить, почему мы в восторге стать владельцами Embarcadero
IDERA работает более, чем с 10000 клиентами по всему миру, предоставляя им решения для мониторинга производительности баз данных, приложения и технологическую инфраструктуру. Мы уверены, что специалисты по базам данных имеют определяющее влияние на общую технологическую эффективность и оцениваем наш подход, как ориентированный на данные. Наши продукты позволяют быстро идентифицировать и исправить проблемы с производительностью по всему стеку используемых технологий, при этом обеспечивая уникальные возможности поддержки безопасности и согласованности.
Я был назначен CEO в 2013 году и с этого времени я всегда был сфокусирован на долгосрочных отношениях с заказчиками, основой которых были инновационность, качество и простота использования продуктов. Я верю в то, что успешные софтверные компании всегда ориентированы на успех клиента, обеспечивая:
Программное обеспечение высокого качества – полное тестирование кода, с использованием автоматической генерации тестов Простоту в использовании – интуитивно понятные интерфейсы, особенно процесс установки/обновления Скорость работы приложений – минимальные задержки, хорошую масштабируемость, аналитику в реальном времени Клиенты всегда будут довольны производителями ПО, соответствующего этим критериям. Выпуск продуктов, сфокусированных на приоритетных инновациях и возможностях, по надежному графику, улучшает взаимоотношения с клиентами, являясь основой их успеха. IDERA инвестирует в технологии по этому принципу, и этот принцип будет также распространяться на продукты Embarcadero.
Как известно, Embarcadero имеет две отдельные линейки продуктов: 1) продукты для кроссплатформенного моделирования, администрирования и оптимизации баз данных и 2) решения для разработки приложений для множества платформ. За эти годы количество клиентов Embarcadero достигло 10000, а количество пользователей исчисляется миллионами, включая практически полный список Global 2000. Embarcadero имеет представительства по всему миру и партнеров практически в каждой крупной стране.
Продукты Embarcadero для моделирования, администрирования и управления производительностью баз данных отлично дополняют продукты IDERA с минимальным пересечением в функциональности и назначении. После объединения обеих компаний, мы сможем предложить специалистам в области данных исчерпывающее решение для управления, использования и защиты данных для любой компании. Мы будем благодарны обратной связи от клиентов по интеграции этих продуктов, чтобы быть уверенными в соответствии нашим принципам простоты использования, качества и масштабируемости.
Что касается средств разработки Embarcadero, то это для нас новая возможность. На нескольких форумах разработчиков мне были заданы прямые вопросы относительно будущего этих продуктов. Я хочу подчеркнуть, что мы воспринимаем эти продукты как огромную ценностью. Так как приложения распространяются сквозь платформы и другие каналы, потребность в инструментах для создания следующих поколений приложений будет расти. Такие технологии, как Интернет вещей или использование в приложениях маячков, не существовали всего несколько лет назад. Сегодня уже каждый видит возможность создания приложений для устройств, которые упрощают и улучшают жизнь людям. Мы верим в то, что лидер рынка средств разработки должен ориентироваться на разработчиков и отличаться скоростью выпуска новых решений, простотой использования и темпами изменений.
В связи с этим, мы сформировали новую команду, которая будет сфокусирована только на средствах разработки Embarcadero. Их задача – обеспечить темпы роста за счет инноваций и возможностей M&A. Мой коллега, Атанас Попов, возглавил данное направление. Атанас будет уделять внимание росту бизнеса и инвестициям для привлечения еще большего количества клиентов. Мы считаем, что средства разработки имеют большой потенциал и мы с нетерпением ждем работы с вами, чтобы расставить приоритеты для наших инвестиций.
Embarcadero потратила годы на построение надежной партнерской сети. Многие компании мечтают о создании подобной сети партнеров, но потратив время и силы разочаровываются. Но если упорство компании позволило это сделать, результаты и потенциал будут значительны. Embarcadero работает с десятками глобальных партнеров. Для поддержания здоровой партнерской сети требуются больше отличных продуктов и стабильный интерес к приобретению со стороны потенциальных клиентов. Мы собираемся не только познакомить партнеров Embarcadero с продуктовым портфелем IDERA, но и вовлечь маркетинговую команду IDERA в диалог с клиентами. Мы полагаем, что умеренные изменения и инвестиции расширят пространство возможностей для наших партнеров, работающих с клиентами по всему миру.
C точки зрения взаимодействия с заказчиками, мы основываемся на публикации планов выпуска продуктов для активных заказчиков и поддержку диалога с теми, кто хочет внести свой вклад. Мы верим, что сообщества пользователей приносят пользу, и будем развиваться соответственно. Мы также полагаем, что это изменит возможности инноваций и увеличит ценность для наших пользователей. Мы остаемся верны этим принципам стремимся к работе с вами для каждодневного улучшения, и чтобы помочь вам получить ожидаемое.
Если у Вас есть вопросы, присылайте их, пожалуйста, на randy.jacops@idera.com.
При наличии 20 000 клиентов, практически невозможно поддерживать прямой диалог с каждым, но мы ответим на вопросы. Что более важно, мы будем присылать Вам «дорожные карты», информацию о вебинарах и другой контент, который сможет Вас заинтересовать. Я призываю Вас принимать участие во всех мероприятиях, чтобы отношения стали взаимно полезными.
Спасибо за вашу работу! Надеемся на дальнейшее сотрудничество!
С уважением,
Randy Jacops
CEO, IDERA, Inc.
-
Vitaldj отреагировална Brovin Yaroslav в Есть ли возможность посмотреть значение длинной строки?
Какая у вас версия среды?
По идеи ничего больше не нужно:
Да, это работает только для Windows, для остальных платформ посмотрите: Средства логирования в FireMonkey
-
Vitaldj отреагировална umkes в ListBox, Edit и клавиатура
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); //----------------------------------------------------------------------------- var Keyboard : IFMXVirtualKeyboardService; begin if Key = vkReturn then begin if TPlatformServices.Current.SupportsPlatformService( IFMXVirtualKeyboardService, IInterface( Keyboard ) ) then if TVirtualKeyboardState.Visible in Keyboard.GetVirtualKeyBoardState then begin Keyboard.HideVirtualKeyboard; Key := 0; Exit; end{if}; end{procedure TForm1.FormKeyUp}; -
Vitaldj отреагировална Евгений Корепов в PushEvents без Provider
Var HDevicePushParams : TDevicePushParams; APushService : TPushService; AServiceConnection : TPushServiceConnection; SQuery : String; begin APushService:=TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM); APushService.AppProps[TPushService.TAppPropNames.GCMAppID]:='ХХХХХХХХХХХХХХХХ'; AServiceConnection:=TPushServiceConnection.Create(APushService); AServiceConnection.Active:=True; AServiceConnection.OnChange:=ServiceConnectionOnChange; AServiceConnection.OnReceiveNotification:=ServiceConnectionOnReceiveNotification; HDevicePushParams.DeviceID:=APushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID]; HDevicePushParams.DeviceToken:=APushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken]; SQuery:=APIURL+'?DeviceID='+HDevicePushParams.DeviceID+'&DeviceToken='+HDevicePushParams.DeviceToken; HTTPThread:=THTTPThread.Create(SQuery,FQueue); // Здесь просто отправка на сервер в потоке. Сервер принимает стоку и складывает в базу пары "DeviceID - DeviceToken", можно еще что нибудь отправлять, чтоб точно идентифицировать клиента.
А на сервере все еще проще. Вот php: $title = 'Это заголовок'; $message = 'Это текст сообщения.' $devices = 'DeviceToken - один конкретный получатель'; $apiKey = "AIzaХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ"; $gcpm = new GCMPushMessage($apiKey); $gcpm->setDevices($devices); $response = $gcpm->send($message, array('title' => $title)); Лениво было писать велосипед, использовал готовую отсылалку https://github.com/mattg888/GCM-PHP-Server-Push-Message . Там все просто, она заворачивает все в json и отправляет на http
-
Vitaldj отреагировална Brovin Yaroslav в Обновление информации программы с сайта
Мне кажется, проще воспользоваться REST API и получать данные без UI. А дальше уж самому решать, что с ними делать.
https://wordpress.org/plugins/json-rest-api/
Я понимаю, что парсить страницу - это универсальное решение, но оно работает ровно до первого изменения шаблона дизайна страницы :-)
-
Vitaldj отреагировална Brovin Yaroslav в Презентационные материалы с запуска RX Seattle
RAD Studio 10 Seatlle: обзор продукта
Презентация: RAD Studio 10 Seatlle обзор продукта.pdf Разработка приложений для Windows 10 и новые возможности VCL
Презентация: Разработка приложений для Windows 10 и новые возможности VCL.pdf Новые возможности мобильной разработки приложений
Презентация: Новые возможности мобильной разработки приложений.pdf Пример сервиса: DownloadServiceDemo.zip Эффективное использование среды разработки и компилятора C++
Презентация: Эффективное использование среды разработки и компилятора C++.pdf Взаимодействие приложений и IoT
Презентация: Взаимодействие приложений и IoT.pdf Преодолевая границы: EMS и расширение FireDAC для работы с MongoDB и Средства разработки и управления для разработчиков БД
Презентация: Преодолевая границы EMS и расширение FireDAC для работы с MongoDB.pdf -
Vitaldj отреагировална haword в [TfgRichEdit]- компонент редактирования текста с поддержкой форматирования
ну и? есть новости? когда нам счастья ждать то?
-
Vitaldj получил реакцию от Равиль Зарипов (ZuBy) в MS SQL Server
Покупаю компененты от Devart для SQlite и Mysql, неплохие))
-
Vitaldj отреагировална AngryOwl в Скрытие приложения с панели задач.
Попробуйте
uses {$IFDEF MSWINDOWS}, Winapi.Windows, FMX.Platform.Win{$ENDIF}; {$IFDEF MSWINDOWS} ShowWindow(ApplicationHWND, SW_HIDE); {$ENDIF} -
Vitaldj отреагировална rustam_d в Загрузка иконок в TimageList из файла
Фил я кстати тоже так подумал ))))
Исправил в своем коде ТОЛЬКО ОДНУ строку и тогда транспарент заработал (чудеса FMX):
b.Bitmap.Assign(b.CreateBitmap('C:\Delphi\Images\GlyFX\glyFX\Icons\Aero\BMP\32x32\eject_blue_32_h.bmp')); и даже удалил b.Bitmap.SetSize(32,32); Сергей, в любом случае вы помогли спасибо! Но мой код по мне куда проще и короче... Вообщем вот готовый простейший код procedure TForm1.Button1Click(Sender: TObject); var Layer: TLayer; c: TCustomSourceItem; b: TCustomBitmapItem; d: TCustomDestinationItem; begin d := ImageList1.Destination.Add; Layer := ImageList1.Destination[d.Index].Layers.Add; Layer.SourceRect.Rect := TRectF.Create(TPoint.Zero, 32, 32); c := ImageList1.Source.Add; Layer.Name := c.Name; c.MultiResBitmap.TransparentColor := TAlphaColorRec.Fuchsia; b := c.MultiResBitmap.Add; b.Bitmap.Assign(b.CreateBitmap('C:\Delphi\Images\GlyFX\glyFX\Icons\Aero\BMP\32x32\arrow_left_32_h.bmp')); Button2.ImageIndex := 0; end; -
Vitaldj отреагировална rustam_d в Как связать колонку нового типа в FMX TGrid с полем средствами LiveBindings?
я свои типы не проталкиваю пока, но связка у меня норм работает...ниже мой код, может вам и сгодиться...
альясы запроса у меня с шириной сразу, это очень удобно - к примеру пишите select name as ФИО_150 from...вот и вам и имя и ширина сразу )
важно подчеркивание ставить просто в конце...
var vSp: МойДатасет; c: TLinkGridToDataSourceColumn; i,k: integer; begin LinkGrd.Columns.Clear; for i := 0 to vSp.FieldCount - 1 do begin c := LinkGrd.Columns.Add; c.MemberName := vSp.Fields[i].FullName; k := Pos('_',c.MemberName); if k > 0 then begin c.Width := copy(c.MemberName,k+1,length(c.MemberName)-k).ToInteger; c.Header := copy(c.MemberName,1,k-1); end else begin c.Width := 100; c.Header := c.MemberName; end; end; end; -
Vitaldj отреагировална zairkz в Кодировка под Android
with TStringStream.Create do try LoadFromFile('d:\11.txt', TEncoding.UTF8); Edit1.Text := DataString; finally Free; end; всё что нужно было
-
Vitaldj отреагировална serg557 в Работа с текстом
Вопрос решен!
Всем спасибо за советы.
Конечный кусок кода прилагаю-вдруг кому пригодится.
String Page; Form1->Page=IdHTTP1->Get("http://minfin.com.ua/currency/mb/"); Page.Delete0(0,Page.Pos0("<td class=\"active\">")+20); Memo1->Text=Page.SubString0(0,Page.Pos0("<")-1); -
Vitaldj отреагировална Равиль Зарипов (ZuBy) в [TfgRichEdit]- компонент редактирования текста с поддержкой форматирования
Опишите подробней, может и поможем всем форумом) -
Vitaldj получил реакцию от #WAMACO в [TfgRichEdit]- компонент редактирования текста с поддержкой форматирования
Ярослав, а все таки когда будет доступен компонент простым пользователям? Очень нужен! )