Dwa wiersze Caption na TPanel?

Odpowiedz Nowy wątek
2019-06-11 07:54
0

Jak w temacie - da sie to jakoś uzyskać ?
+#13+#10+ nie działa
sLineBreak też nie działa

edytowany 1x, ostatnio: furious programming, 2019-06-11 19:02

Pozostało 580 znaków

2019-06-12 13:05
0
cerrato napisał(a):

[…] możesz zastanowić się nad alternatywnym (pytanie - czy lepszym?) rozwiązaniem - zamiast umieszczać na panelu elementy typu TLabel, może obsłuż sobie zdarzenie OnPaint […]

Oczywiście, to byłoby najlepsze rozwiązanie – tyle że TFlowPanel tego zdarzenia nie posiada. :D


Pozostało 580 znaków

2019-06-12 13:10
0

tyle że TFlowPanel tego zdarzenia nie posiada.

Zwróć uwagę, że OP na FlowPanel'a dodaje dynamicznie "zwykłe" obiekty TPanel (https://4programmers.net/Forum/1598317) i to w ich OnPaint proponowałem dodać pisanie tekstu.


That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say
edytowany 1x, ostatnio: cerrato, 2019-06-12 13:12

Pozostało 580 znaków

2019-06-12 13:35
0

Trochę to dziwnie wygląda – to przecież TFlowPanel służy do grupowania subkomponentów (np. klasy TPanel), a nie na odwrót. Przydałoby się wiedzieć jakie jest przeznaczenie tych wszystkich paneli, żeby móc coś sensownego doradzić.


edytowany 3x, ostatnio: furious programming, 2019-06-12 13:36

Pozostało 580 znaków

2019-06-12 13:47
0

Ale przecież tak jest w podanym przez OP kodzie:
najpierw na sztywno wrzuca na formatkę TFlowPanel

TForm1 = class(TForm)
    Button1: TButton;
    Fpanel: TFlowPanel;

a potem do niego dodaje obiekty TPanel

TNewPanel.Create(Form1.Fpanel);
[...]
          Parent:=  FPanel;
[...]

Wyjaśnij proszę, o co Ci chodzi, bo czegoś tu nie łapię i nie wiem, który z nas się zakręcił ;)


That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say
edytowany 1x, ostatnio: cerrato, 2019-06-12 13:47
Wygląda na to że zrobumiałem to na odwrót. :D - furious programming 2019-06-12 13:48
Chociaż raz to nie ja namieszałem i przekręciłem ;) - cerrato 2019-06-12 13:49

Pozostało 580 znaków

2019-06-13 12:01
0

To znów ja :) Dodatkowe zagadnienie związane z mą niewiedzą i ignoranctwem dot. klas i obiektów :

procedure TForm1.ClickOnPanel(Sender: TObject);
  var objekt: TObject;
begin
  if (Sender is TPanel) then objekt:= TPanel(Sender);
  if (Sender is TLabel) then objekt:= TLabel(Sender).Parent;
 TPanel(objekt).Color:=clRed;
end; 

Zmieniam kolor tła TPanel(objekt). A jak zmienić kolor fontu w TLabel mieszcącego się na tym TPanel mając tylko jako uchwyt objekt ?

Pozostało 580 znaków

2019-06-13 12:03
1

Nie wiem, czy dobrze rozumiem o co Ci chodzi, ale spróbuj zapisu w postaci

procedure ZmienKolor(Sender: TObject);
begin
  (Sender as TLabel).Font.Color:= clGreen;
end;   

Ważna uwaga - jeśli skorzystasz z takiego zapisu, to MUSISZ mieć pewność, że dany obiekt przesłany jako Sender jest typem zgodnym z TLabel. Jeśli wywołasz to na jakimś obiekcie, który nie posiada właściwości Font.Color to wyskoczy błąd. Oczywiście - jeśli sam to piszesz i tego pilnujesz, to nie będzie raczej problemu, ale możesz się i tak zabezpieczyć. W poprzednim poście dałem rozwiązanie sprawdzające, jakiego typu jest dany obiekt. Możesz połączyć tamten post z obecnym i zrobić coś w stylu:

procedure ZmienKolor(Sender: TObject);
begin
  if (Sender is TLabel) then
     (Sender as TLabel).Font.Color:= clGreen;
end;  

That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say
edytowany 3x, ostatnio: cerrato, 2019-06-13 12:12

Pozostało 580 znaków

2019-06-13 12:21
0

Chyba się nie zrozumieliśmy - albo ja nie rozumiem kodu który podałeś :P .
Dysponuje tylko uchwytem do TPanel i chce zmienić kolor czcionki na TLabel który jest dzieckiem TPanel .
Z definicji :

 TNewPanel = class(TPanel)
    NewCaption: TLabel;
    NewCaption2: TLabel;
  end;

Zaraz sam sie pogubie :D

Pozostało 580 znaków

2019-06-13 12:28
0

A którego labela chcesz zmienić kolor? Bo o ile pamiętam, to na każdym panelu miałeś dwie etykietki.


That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say

Pozostało 580 znaków

2019-06-13 12:36
0

Każdy z osobna

Pozostało 580 znaków

2019-06-13 12:39
1

No to (zakładając, że znasz nazwy tych elementów TLabel) zrób to w taki sposób:

procedure ZmienKolor(Sender: TObject);
begin
  (Sender as TPanel).FindChildControl('NewCaption').Font.Color:= clGreen;
  (Sender as TPanel).FindChildControl('NewCaption2').Font.Color:= clRed;
end;

A samą procedurę wywołujesz w następujący sposób:

ZmienKolor(Form1.Panel1); 

That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say
edytowany 2x, ostatnio: cerrato, 2019-06-13 12:43
Pasuje się zabepieczyć zwróceniem nil przez FindChildControl. I użyć with lub absolute, aby nie powielać takiego samego rzutowania. - furious programming 2019-06-13 17:34

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: CCBot