Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi PageControl - Tabs um Schließen-Symbol erweitern (https://www.delphipraxis.net/79030-pagecontrol-tabs-um-schliessen-symbol-erweitern.html)

himitsu 17. Feb 2023 13:11

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Was möchtest du wetten, dass das eine S nicht klein ist?
Delphi-Referenz durchsuchenSameText


Oder steht da wirklich nur der eine Komponentenname im Path?

Oder warum nicht mal ohne Strings?
Delphi-Quellcode:
if TComponent(msg.LParam).Owner is TabSheet1 then

HCB 17. Feb 2023 15:42

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Danke Himitsu für deine Hilfe.

> Oder steht da wirklich nur der eine Komponentenname im Path?

Es steht nur Tabsheet1 in der Variable ClickedTab, siehe screeshot.

>if TComponent(msg.LParam).Owner is TabSheet1 then

lässt sich nicht kompileren wegen Fehler, siehe Screenshot.

Irgendwie merkwürdig. Hat jemand vielleicht noch eine Idee?

LG Harry

HCB 17. Feb 2023 15:44

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Liste der Anhänge anzeigen (Anzahl: 2)
So jetzt aber mit Anhang, sorry.

himitsu 17. Feb 2023 16:03

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
ups
Delphi-Quellcode:
=
nicht
Delphi-Quellcode:
is
:oops:
(für Instanz/Variable, nicht Klasse/Typ)

Und nein, es steht nicht Tabsheet1 drin. :zwinker:

HCB 17. Feb 2023 16:42

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Danke Himitsu für die schnelle Hilfe:
Ich seh den Wald vor lauter Bäume nicht, hab gar nicht so genau auf die Groß- und Kleinschreibung beim String geachtet (Tabsheet1 / TabSheet1):oops: Wieder was zu gelernt.
Jetzt hab ich nur noch ein Problem, dass sich der Index verschiebt. Ich wollte den angeklickten Tab auf Visible:= false setzen, funktioniert bis zum letzten Tab, der dann Tabsheet1 wird, obwohl der Name Tabsheet3 ist.

procedure TfrmMain.UmDestroyControl(var msg: TMessage);
var ClickedTab: String;
begin
clickedTab:=TComponent(msg.LParam).Owner.GetNamePa th;
if clickedTab = 'TabSheet1' then TabSheet1.TabVisible:=false;
if clickedTab = 'TabSheet2' then TabSheet2.TabVisible:=false;
if clickedTab = 'TabSheet3' then TabSheet3.TabVisible:=false;
ReCalculateButtonPositions;
end;

Ich dachte es wäre etwas einfacher, den angeklickten Tab auf Visible:=false setzen und bei Bedarf wieder aktivieren. Aber es müsste Caption des Tabs ermittelt werden und nach der Caption und nicht nach Index den Tab schließen bzw. deaktivieren.

Vielleicht stehts du mir mit etwas Unterstützung zur Seite.

LG Harry

himitsu 17. Feb 2023 17:54

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Erstmal: benennt man natürlich seine Komponenten so, dass sie einem sagen, was sie machen. :stupid:

.Name ist direkt ein Komponentenname.
Bei .GetNamePath muß man aufpassen, denn es können mehrere Namen sein.


Nochmal: Warum Strings, wenn du schon ein Objekt hast?

Bei Namen mußt du nunmal auf Groß-/Kleinschreibung achten,
ODER man vergleicht case-insensitiv.
->
Delphi-Quellcode:
=
aka Delphi-Referenz durchsuchenSameStr versus Delphi-Referenz durchsuchenSameText

"TabSheet1" gibt es bestimmt als Variable/Feld in der Form-Klasse.
Im QuellCode (z.B. bei Variablen) ist Groß-/Kleinschreibung egal.
Außerdem werden Objektinstanzen optimaler, schneller und vorallem fehlerunanfälliger verglichen, als irgendwelche komische Strings.
Dann knallt auch der Compiler wunderschön, wenn es diese Variable garnicht mehr gibt, z.B. weil jemand diese Komponente entlich mal ordentlich benannt hat.
Und zusätzlich kann man mit einem Objektzeiger soooooooooo schön viele coole Dinge anfangen, was mit einem dummen String nicht so geht.

Delphi-Quellcode:
//var clickedTab: TComponent;
clickedTab := TComponent(msg.LParam).Owner;
if clickedTab = TabSheet1 then TabSheet1.TabVisible := False;
if clickedTab = TabSheet2 then TabSheet2.TabVisible := False;
if clickedTab = TabSheet3 then TabSheet3.TabVisible := False;

//if clickedTab = TabSheet1 then  VERSUS  if clickedTab.Name = 'TabSheet1' then
Delphi-Quellcode:
clickedTab := TComponent(msg.LParam).Owner;
if (clickedTab = TabSheet1) or (clickedTab = TabSheet2) or (clickedTab = TabSheet3) then
  TTabSheet(clickedTab).TabVisible := False;
Delphi-Quellcode:
clickedTab := TComponent(msg.LParam).Owner;
if clickedTab is TTabSheet then
  TTabSheet(clickedTab).TabVisible := False;

HCB 18. Feb 2023 07:34

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Hallo Himitsu,
vielen Dank nochmal für Deine Unterstützung. Ich bekomme das einfach nicht hin.
Sowohl
clickedTab := TComponent(msg.LParam).Owner;
if (clickedTab = TabSheet1) or (clickedTab = TabSheet2) or (clickedTab = TabSheet3) then
TTabSheet(clickedTab).TabVisible := False;
als auch
clickedTab := TComponent(msg.LParam).Owner;
if clickedTab is TTabSheet then
TTabSheet(clickedTab).TabVisible := False;

funktionieren nicht.
Ich muss mir wohl einen anderen Lösungsweg einfallen lassen, vielleicht probier ich es mal über MDI.

LG Harry

himitsu 18. Feb 2023 08:31

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Tja, rate mal, wofür ein Debugger da ist und was man jetzt damit macht. :zwinker:

Ich kann ja nur davon ausgehn, dass in msg.LParam wirklich ein TComponent ist und dessen Owner ein TTabSheet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz