![]() |
AW: PageControl - Tabs um Schließen-Symbol erweitern
Was möchtest du wetten, dass das eine S nicht klein ist?
![]() 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
|
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 |
AW: PageControl - Tabs um Schließen-Symbol erweitern
Liste der Anhänge anzeigen (Anzahl: 2)
So jetzt aber mit Anhang, sorry.
|
AW: PageControl - Tabs um Schließen-Symbol erweitern
ups
Delphi-Quellcode:
nicht
=
Delphi-Quellcode:
:oops:
is
(für Instanz/Variable, nicht Klasse/Typ) Und nein, es steht nicht Tabsheet1 drin. :zwinker: |
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 |
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
=
![]() ![]() "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; |
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 |
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:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz