Dwa wiersze Caption na TPanel?

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

Rejestracja: 4 lata temu

Ostatnio: 1 dzień temu

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
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 41 sekund temu

Lokalizacja: Tuchów

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
Moderator Kariera

Rejestracja: 2 lata temu

Ostatnio: 2 godziny temu

Lokalizacja: Poznań

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.


Naczelny forumowy hejter Apple

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
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 41 sekund temu

Lokalizacja: Tuchów

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
Moderator Kariera

Rejestracja: 2 lata temu

Ostatnio: 2 godziny temu

Lokalizacja: Poznań

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ł ;)


Naczelny forumowy hejter Apple

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 zrozumiał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

Rejestracja: 4 lata temu

Ostatnio: 1 dzień temu

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
Moderator Kariera

Rejestracja: 2 lata temu

Ostatnio: 2 godziny temu

Lokalizacja: Poznań

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;  

Naczelny forumowy hejter Apple

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

Rejestracja: 4 lata temu

Ostatnio: 1 dzień temu

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
Moderator Kariera

Rejestracja: 2 lata temu

Ostatnio: 2 godziny temu

Lokalizacja: Poznań

0

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


Naczelny forumowy hejter Apple

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

Rejestracja: 4 lata temu

Ostatnio: 1 dzień temu

0

Każdy z osobna

Pozostało 580 znaków

2019-06-13 12:39
Moderator Kariera

Rejestracja: 2 lata temu

Ostatnio: 2 godziny temu

Lokalizacja: Poznań

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); 

Naczelny forumowy hejter Apple

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

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