AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Gelöst] PageControl Focus

Ein Thema von -=IOI=- · begonnen am 4. Dez 2008 · letzter Beitrag vom 9. Dez 2008
Antwort Antwort
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#1

[Gelöst] PageControl Focus

  Alt 4. Dez 2008, 22:23
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: PageControl Focus

  Alt 4. Dez 2008, 22:43
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#3

Re: PageControl Focus

  Alt 4. Dez 2008, 23:00
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.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: PageControl Focus

  Alt 5. Dez 2008, 06:19
Hallo

Aktives Control ermitteln:

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

Screen.ActiveControl.Parent
Thomas
  Mit Zitat antworten Zitat
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#5

Re: PageControl Focus

  Alt 5. Dez 2008, 12:27
Super, danke für den Hinweis.
Habe es jetzt nur mit Form1.ActiveControl gelöst, hat aber genau den gewünschten Effekt.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: PageControl Focus

  Alt 5. Dez 2008, 14:00
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.
Andreas
  Mit Zitat antworten Zitat
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#7

Re: [Gelöst] PageControl Focus

  Alt 9. Dez 2008, 07:18
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:
memo := (ActiveControl.Child as TMemo);
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: [Gelöst] PageControl Focus

  Alt 9. Dez 2008, 11:23
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;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#9

Re: [Gelöst] PageControl Focus

  Alt 9. Dez 2008, 11:52
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.
Uli Gerhardt
  Mit Zitat antworten Zitat
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#10

Re: [Gelöst] PageControl Focus

  Alt 9. Dez 2008, 12:16
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 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