Delphi-PRAXiS

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 [Gelöst] PageControl Focus (https://www.delphipraxis.net/125366-%5Bgeloest%5D-pagecontrol-focus.html)

-=IOI=- 4. Dez 2008 21:23


[Gelöst] PageControl Focus
 
Hallo,
ich weiß nicht, ob mein Problem schon irgendwo behandelt wurde, da ich nicht genau weiß, wonach ich suchen muss.
Zum Problem:
Ich habe 2 PageControls, in denen jeweils eine Variable Anzahl an Tabs mit jeweils einem Memo vorhanden ist.
Nun möchte ich feststellen innerhalb welches PageControls ich mich befinde. Soll heißen, dass wenn ich in einem Memo in Tab 3 irgendwas schreibe, woher ich dann weiß, in welchem der beiden PageControls ich mich befinde.
Ziel des ganzen soll sein, über einen Button außerhalb der PageControls den jeweils aktiven Tab zu schließen.

Danke schonmal für eure Antworten

alzaimar 4. Dez 2008 21:43

Re: PageControl Focus
 
Das Problem ist, das Du das nicht mehr weisst, sobald du den Button klickst, weil dann der Fokus ja auf den Button übergegangen ist. Daher musst Du Dir vorher merken, in welchem Memo Du zuletzt etwas eingegeben bzw. draufgeklickt hast. Dazu dient das 'OnEnter'-Ereignis des jeweiligen Memos.

So, da Du nun weisst, welches Memo zuletzt 'aktiv' war, kannst du ja sein 'Parent' herausfinden. Das dürfte ein TTabSheet sein. Und dieses Tabsheet gehört ja zu einer der beiden PageControls.

-=IOI=- 4. Dez 2008 22:00

Re: PageControl Focus
 
Ich kann aber, wenn ich bevor ich den Button drücke auf einen Tab klicke, ein neuen Tab in dem jeweiligen PageControl erzeugen.
Also innerhalb der Button procedure kann ich mit if und PageControl1.Focused beide schon unterscheiden.
Es müsste also auch so gehen.
Eigentlich müsste ich noch "nur" herausfinden, ob das PageControl selbst (funktioniert ja schon) oder ein Child den Fokus hat. Das mit dem Child bekomm ich aber nicht hin.

toms 5. Dez 2008 05:19

Re: PageControl Focus
 
Hallo

Aktives Control ermitteln:

Delphi-Quellcode:
Screen.ActiveControl
Falls sich bei diesem nicht um ein TPageControl handelt (und <> nil ist) mit
.Parent das Parent Control ermitteln:

Delphi-Quellcode:
Screen.ActiveControl.Parent

-=IOI=- 5. Dez 2008 11:27

Re: PageControl Focus
 
Super, danke für den Hinweis.
Habe es jetzt nur mit Form1.ActiveControl gelöst, hat aber genau den gewünschten Effekt.

shmia 5. Dez 2008 13:00

Re: PageControl Focus
 
Zitat:

Zitat von -=IOI=-
Habe es jetzt nur mit Form1.ActiveControl gelöst, hat aber genau den gewünschten Effekt.

Dann aber die Variable "Form1." weglassen da sonst unangenehme Effekte auftreten können.

-=IOI=- 9. Dez 2008 06:18

Re: [Gelöst] PageControl Focus
 
Ok, habe es weg gelassen.

Jetzt habe ich aber noch ein weiteres verwandtes Problem.
Wie kann ich nun ein Memo auf so einem Tabsheet kontrollieren, wenn z.b. nur der Tab oben angeklickt ist.

Also sowas in der Art wie:
Delphi-Quellcode:
memo := (ActiveControl.Child as TMemo);

shmia 9. Dez 2008 10:23

Re: [Gelöst] PageControl Focus
 
Zitat:

Zitat von -=IOI=-
Ich habe 2 PageControls, in denen jeweils eine Variable Anzahl an Tabs mit jeweils einem Memo vorhanden ist.

Ich denke mal, dass für diesen Zweck ein PageControl nicht das Richtige ist.
Wenn auf jedem TabSheet immer nur das Gleiche drauf ist (ein TMemo), dann kann man doch auch nur ein Memo in Verbindung mit einer ListBox einsetzen.
(Listbox links; Memo rechts daneben)
Der Benutzer klickt auf einen Eintrag in der Listbox und das Programm ändert daraufhin den Inhalt des Memo.
Natürlich müssen dann alle Texte irgendwo getrennt gespeichert werden. (z.B. in TListbox.Objects[])


Zu deiner Frage: du musst das Memo im Controls[]-Array suchen
Delphi-Quellcode:
function FindMemo(parent:Tcontrol):TMemo;
var i : integer;
begin
  for i := 0 to parent.ControlCount-1 do
  begin
    if parent.Controls[i] is TMemo then
    begin
      result := TMemo(parent.Controls[i]);
      Exit;
    end;
  end;
  result := nil; // nix gefunden
end;

uligerhardt 9. Dez 2008 10:52

Re: [Gelöst] PageControl Focus
 
Zitat:

Zitat von shmia
Ich denke mal, dass für diesen Zweck ein PageControl nicht das Richtige ist.
Wenn auf jedem TabSheet immer nur das Gleiche drauf ist (ein TMemo), dann kann man doch auch nur ein Memo in Verbindung mit einer ListBox einsetzen.
(Listbox links; Memo rechts daneben)
Der Benutzer klickt auf einen Eintrag in der Listbox und das Programm ändert daraufhin den Inhalt des Memo.
Natürlich müssen dann alle Texte irgendwo getrennt gespeichert werden. (z.B. in TListbox.Objects[]

Oder ein TTabControl statt der Listbox. Dann hat man die gleiche Optik wie mit dem Page Control, aber auch nur ein Memo.

-=IOI=- 9. Dez 2008 11:16

Re: [Gelöst] PageControl Focus
 
was ich schreiben möchte, ist ein 2 geteilter editor, bei dem man in jedem teil nochmal beliebig viele tabs öffnen kann.
deswegen hab ich mich für ein pagecontrol entschieden, da ich es nicht so gut fänd, wenn ich alles zwischenspeichern müsste.
also werde ich es mal mit dem obigen codestück versuchen.

danke für eure antworten


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 Uhr.

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