Autor Beitrag
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Di 04.09.07 13:46 
Ich hab ein Panel auf dem liegt alTop ein weiteres Panel sowie als alClient eine PageControl.

Das Toppanel hat die Taborder 0 die PageControl die Taborder 1. Das Funktioniert, zuerst klappert er alle Edits auf dem Toppanel ab und geht dann auf das erste Tabsheet der PageControl und arbeitet dort die Edits ab.

Nun das Problem, es gibt nämlich nicht nur ein Tabsheet, sondern viele. Trotzdem geht er nach der bearbeitung des letzten Edits auf Tabsheet1 wieder zum Toppanel anstatt auf das nächste Tabsheet :(

Gibts da ne Bordlösung beim Pagecontrol oder muss ich beim onExit des letzten Editfeldes manuell das Tabsheet wechseln? Das wäre nämlich umständlich da sich je nach Usergruppe die Tabreihenfolge grundlegend ändert.

_________________
mfg. Joel
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 04.09.07 15:11 
Hallo,

Hast du die Tab-Register ausgeblendet oder wie hast du die Reihenfolge der Tabs bezogen auf die Usergruppen realisiert?

Eine Boardlösung bietet das PageControl über Taborder nicht, aber teste doch mal die folgenden Zeilen im OnExit des PageControls, denn das wird ausgelöst wenn im letzten TabOrder-Element des aktiven Tabsheets per Tab weitergeschaltet wird.
Eventuell passt das so:
ausblenden Delphi-Quelltext
1:
2:
PageControl.SelectNextPage(True);
PageControl.SetFocus;

Wenn das letzte Tabsheet erreicht ist muss dann eine Sonderbehandlung erfolgen, dabei könnte FindNextPage helfen.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
JoelH Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Di 04.09.07 15:25 
ich setzte je nach Userrechte die Taborder, sowie die Tabstops manuell in einer Procedure.

Das mit dem PageExit funktioniert grundsätzlich. Jetzt muss ich nur noch schauen wie ich sauber aus der Pagecontrol wieder raus komme. Der soll ja nur weiterspringen wenn man mit der Tabtaste "raus" will.

_________________
mfg. Joel
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 04.09.07 15:39 
Hallo,

versuch mal:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.PageControlExit(Sender: TObject);
var i : Integer;
begin
  with Pagecontrol do
    begin
    i := FindNextPage(ActivePage,True,True).TabIndex;
    if i <> 0 then
      SetFocus;
    SelectNextPage(True);
    if i <> 0 then
      SendMessage(Self.Handle, WM_NEXTDLGCTL, 0, 0);
    end;
end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
JoelH Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Mi 05.09.07 08:29 
ich habs jetzt so gelöst, ist vielleicht nicht ganz sauber, weil es globale Variablen nutzt (tabflag und pt), funktioniert aber.
im Main fang ich die Messages ab und setze bzw. lösche ein flag, damit ich sehen kann ob man die PageControl via Maus, also legal, verlassen hat.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TmdiMain.FormCreate(Sender: TObject);
begin
  Application.OnMessage := MsgHandler;
end;

procedure TmdiMain.MsgHandler(var Msg: TMsg; var Handled: Boolean);
begin
 if (Msg.pt.x <> pt.X) OR (Msg.pt.y <> pt.y) then
 begin
   pt := Msg.pt;
   tabflag := false;
 end;
 if (Msg.message = WM_KEYDOWN)  AND (Msg.wParam = VK_TAB) then
   tabflag := true;
end;

und auf der Form klickt er sich sauber durch die TabSheets
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Tfrm_karte.pgc_karteExit(Sender: TObject);
begin
  if Main.tabflag then
  begin
    pgc_karte.SelectNextPage(True);
    pgc_karte.SetFocus;
  end;
end;


Danke dir für die Idee.

_________________
mfg. Joel