Перейти к содержанию
Fire Monkey от А до Я

Ильдар

Пользователи
  • Постов

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

  • Посещение

  • Победитель дней

    2

Весь контент Ильдар

  1. Добрый день всем, Прошу помощи знающих: Использую TidTCPClient, отрабатываю потерю связи в процессе работы (втупую выдергиваю провод). procedure TClient.onTimer(Sender: TObject); begin try self.FunctionRead(0); except self.Timer.Enabled:= FALSE; inc(self.cntErr); end; end; Получаю каскад сообщений "Socket Error: 10054" т.к. блок except не вызывается. 1. Каким образом отключить окна сообщений об ошибке? (т.к. пользователю они в общем-то ни к чему) 2. Каким образом корректно отловить эти ошибки, чтобы перезапустить соединение? 3. Где вообще почитать информацию о Indy в FMX 10.3? Заранее спасибо!
  2. в компоненте создать таймер в котором проверять/обрабатывать изменение положения?
  3. self.Label1.StyledSettings:= self.Label1.StyledSettings - [TStyledSetting.FontColor]; self.Label1.FontColor:= TAlphaColorrec.Red; Можно просто отключить стилизацию.
  4. Ильдар

    PopUp и Canvas

    Это понятно. Тут больше хотелось разобраться в специфике работы/взаимодействия канвы и компонентов. Просто я был уверен, что это я где-то что-то некорректно делаю.
  5. Ильдар

    PopUp и Canvas

    Это не очень вариант, создавать костыли, чтобы разгребать костыли с подсветкой выбора айтемов. Но в любом случае большое спасибо за участие. Попробую дома пересобрать в другой версии среды.
  6. Ильдар

    PopUp и Canvas

    Не пойдет, 1) При присваивании nil'a по вызову меню затирается вся канва ректангла. 2) Если АOwner другой компонент - ситуация та же, пустой прямоугольник в левом верхнем углу. 3) Если AOwner другой невидимый компонент - проблемы с канвой ректангла нет, все работает отлично. Но возникает новая штука - при наведении на айтемы меню - они не подсвечиваются.
  7. Ильдар

    PopUp и Canvas

    График отрисовывается на канве ректангла по таймеру.. Создаем PopUp меню: PopUp:= TPopUpMenu.Create(AOwner); PopUp.Parent:= TFMXObject(AOwner); ItemFormSet:= TMenuItem.Create(PopUp); ItemFormSet.Parent:= PopUp; ItemFormSet.Tag:= 1; ItemFormSet.text:= 'Item 1'; ItemFormSet.OnClick:= self.MenuClicks; ..... ItemLegend:= TMenuItem.Create(PopUp); ItemLegend.Parent:= PopUp; ItemLegend.Tag:= 3; ItemLegend.text:= 'Item 3'; ItemLegend.OnClick:= self.MenuClicks; Rectangle.PopupMenu:= self.PopUp; При вызове PopUp правой клавишей - получаем вот такой "чистый" прямоугольник в левом верхнем углу. Соответственно он исчезает только при следующей перерисовке кадра. (даже если перерисовывать с высокой частотой, все равно при вызове меню видно мелькание в левом углу). Такое ощущение, что при вызове меню - оно создается и отображается там, затирая под собой канву а потом перемещается к координатам мыши. Если в меню PopUp'a содержится один item - прямоугольника нет. Начиная с добавления второго - он появляется и чем больше Item'ов тем он больше в высоту. Собственно вопрос в том, как от этого эффекта избавиться?
  8. Ильдар

    Bitmap DrawLine

    Черным, по дефолту) Если тут поменять bm на Panel - на канве панели исправно рисуется черная линия. procedure TChart.Draw2; var A,B:TPointF; begin A:=TPointF.Create(0,0); B:=TPointF.Create(200, 200); bm.Canvas.BeginScene(); bm.Canvas.DrawLine(A,B,1); bm.Canvas.EndScene; end; Прогуглил немного, раньше надо было обязательно добавлять bitmapchanged; но в 10.2 он вроде не доступен. Может, рисование на канве контрола и рисование на битмапе отличается чем то?
  9. Ильдар

    Bitmap DrawLine

    Добрый день, идеология такая: - создать битмап, рисовать на нем, не делая его видимым. - нашлепать на канву панели подготовленный битмап. На деле не получается нарисовать линию на битмапе. Т.е после процедуры Draw2 прожимаю процедуру Draw - получаю на панели красный прямоугольник битмапа без нарисованной линии... Посоветуйте чего-нибуть, спасибо! //BITMAP Bm:= TBitmap.Create; bm.Width:= round (Panel.Width/2); bm.Height:= round (Panel.Height/2); bm.Canvas.BeginScene(); bm.Canvas.Clear(TAlphacolorrec.Red); //($FF484848); bm.Canvas.EndScene; procedure TChart.Draw2; var A,B:TPointF; begin A:=TPointF.Create(0,0); B:=TPointF.Create(200, 200); bm.Canvas.BeginScene(); bm.Canvas.DrawLine(A,B,1); bm.Canvas.EndScene; end; procedure TChart.Draw; var A: TPointF; R: TRectF; begin A.X:= Panel.Position.X+3; A.Y:= Panel.Position.Y+3; R:= TRectF.Create(A, bm.Width , bm.Height); panel.Canvas.BeginScene(); Panel.Canvas.DrawBitmap(bm,r,r, 20); panel.Canvas.EndScene; end;
  10. При использовании стилей (TStyleBook) не всплывают вложенные итемы. Если стиль отключить - все работает. Кто-то сталкивался? Embarcadero® Delphi 10.2 Version 25.0.26309.314
  11. Ильдар

    Canvas,

    Потому, что эта часть быдлокода к проблеме не относится) Сейчас интересует как корректно очистить канву компонента FMX...
  12. Ильдар

    Canvas,

    нет ( с ними все норм
  13. Ильдар

    Canvas,

    Костыль - само собой) Но это уже верное направление. Это я пробовал еще до репэйнта. Тогда белым заливается вся форма. Стираются прочие элементы формы. объявление Чарта: TChart = class Panel: TPanel; public constructor Create (AOwner:TForm; W,H,X,Y:integer); procedure DrawGrid (cell: integer); procedure DrawLine (p1, p2: TPointF); procedure DrawSeries (Series: TSeries); procedure Clear; end; Процедура очищения: procedure TChart.Clear; begin panel.Canvas.BeginScene(); self.panel.Canvas.Clear(TAlphaColorRec.White); panel.Canvas.EndScene; end;
  14. Ильдар

    Canvas,

    Воу, шайтан! -) Спасибо спасибо огромное. procedure TChart.Clear; begin panel.Repaint; end; Я так понимаю Репэйнт заканчивался уже после отрисовки остального? -) Он выделяется в отдельный поток? оО
  15. Ильдар

    Canvas,

    Мне кажется вы не поняли суть вопроса. Если убрать очистку в начале - график конечно появится, но в следующем такте измененный график наложится на этот
  16. Ильдар

    Canvas,

    Panel : TRectangle; ничего не изменилось, все так же пусто( А можно чуть поподробнее куда копать?
  17. Ильдар

    Canvas,

    хм, еще раз постараюсь описать) три процедуры. Если я выполняю их каждую в OnClick трех разных кнопок последовательно нажимая на них - получаю все как надо. Если я запаковываю их в один OnClick в той же последовательности - получаю чистую канву... т.е. 3 процедуры порознь работают. а упакованные в одну процедуру нет...
  18. Ильдар

    Canvas,

    procedure TForm1.btn_DrawClick(Sender: TObject); var i:integer; begin chart.Clear; Chart.DrawGrid(15); SetLength(Series, 99); for i := 0 to 99 do begin Series[i]:=PointF(i*10,Random(100)); Series[i]:=PointF(i*10+5,Random(100)); end; Chart.DrawSeries(Series); end; Предполагаемая последовательность действий: 1. Очищаем панель 2. Рисуем сетку 3. Заполняем массив 4. Рисуем серию из линий. По факту получаю пустую канву панели. Если же я раскидаю все шаги по разным кнопкам и буду нажимать их последовательно - то все выполняется корректно. Если заворачиваю в одну процедуру - пустая канва. Ткните носом в быдлокод, где я ошибся? во вложении полный проект. Вложенные процедуры: procedure TChart.Clear; begin panel.Canvas.BeginScene(); panel.Repaint; panel.Canvas.EndScene; end; procedure TChart.DrawGrid(cell: integer); var i,n:integer; begin n:= Floor(Panel.Width/cell); panel.Canvas.BeginScene(); panel.Canvas.StrokeThickness := 0.3; for n := 0 to n do begin Panel.Canvas.DrawLine(PointF(Panel.Position.X + n*cell, Panel.Position.Y + 2), PointF(Panel.Position.X + n*cell, Panel.Position.Y + Panel.Height - 2), 1); end; n:= Floor(Panel.Height/cell); for n := 0 to n do begin Panel.Canvas.DrawLine(PointF(Panel.Position.X + 2, Panel.Position.Y + n*cell), PointF(Panel.Position.X + Panel.Width - 2, Panel.Position.Y + n*cell), 1); end; panel.Canvas.EndScene; end; procedure TChart.DrawSeries(Series: TSeries); var n: integer; begin n:=Length(Series); panel.Canvas.BeginScene(); for n := 0 to n-1 do begin DrawLine(TPointF(Series[n]), TPointF(Series[n+1])); end; panel.Canvas.EndScene; end; _Chart.rar
×
×
  • Создать...