Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi pagecontrol (https://www.delphipraxis.net/119888-pagecontrol.html)

heytheredelilah 2. Sep 2008 21:19


pagecontrol
 
hallo alle

ich habe momentan ein problem damit herauszufinden welches Memo gerade im vordergrund ist.

es ist so:
ich habe ein pagecontrol mit seiten die auf button-click erzeugt werden.
es wird bei jedem klick eine page mit einem memo drin erzeugt.

wenn ich im obenliegendem ComboBox etwas eingebe soll es nach "enter-eingabe" genau so im memo landen.
aber das problem: ich kann bisher dann nur sowas machen:

Delphi-Quellcode:
 
if key = char(vk_return)then
  begin
    key := #0;
    if ComboBox1.Text <> '' then
    begin
      Memo1.Lines.Text := Edit1.Text; // hier ist es
      if ComboBox1.Items.IndexOf(ComboBox1.Text) = -1 then
       ComboBox1.Items.Add(ComboBox1.Text);
    end;
end;
wie kann ich das etwas dynamischer gestalten?
dass dort nicht "memo1" sondern jenes memo steht welches gerade mit dem tabsheet im vordergrund ist?

die memos haben keine "namen" sondernich identifiziere sie an einer inkremierenden integer-zahl.

cybergen 2. Sep 2008 22:00

Re: pagecontrol
 
Mhm warum machst du nicht sowas wie:

onPageChange ...
if ActivePage = Page1 then fActiveMemo := Memo1;
if ....

zu billig ? *G*

geht auch komplizierter ... (PseudoCode)

function SearchMemo(wc:TComponent) : TMemo;
var i : integer;
begin
result := nil;
for i:=0 to wc.componentcount - 1 do
begin
if wc.components[i] is TMemo then
begin
result := TMemo(wc.components[i]);
exit;
end else
if wc.components[i].componentcount > 0 then
begin
result := SearchMemo(wc.components[i]);
if result <> nil then exit;
end;
end;
end;


OnComboKeyPress ...
var mm : TMemo;
if key = #13 then
begin
mm := SearchMemo(PageControl1.ActivePage);
if assigned(mm) then
with mm do
begin
mm.lines.text := mm.lines.text + 'Lustisch zeugs';
end;
end;

es geht auch noch anders ...

var mm:array[1..3]of Tmemo;
OnFormCreate
mm[1] := Memo1;
mm[2] := memo2;
mm[3] := memo3;
PageControl1Page1.Tag := 1;
PageControl1Page1.Tag := 2;
PageControl1Page1.Tag := 3;
.... (könnte man auch über eine collection lösen ich weis)

und später dann einfach:

OnKey....
mm[PageControl1.ActivePage.Tag].Lines.add('Noch lustischers Zeugs');


gruss cyb.

heytheredelilah 2. Sep 2008 22:05

Re: pagecontrol
 
das mit dem "if" ist nicht gut, da ich ja im vorhinein nicht weis wieviele tabshets ich erzeugen werden.
wie wende ich denn
Delphi-Quellcode:
function SearchMemo(wc:TComponent) : TMemo;
var i : integer;
begin
result := nil;
for i:=0 to wc.componentcount - 1 do
begin
if wc.components[i] is TMemo then
begin
result := TMemo(wc.components[i]);
exit;
end else
if wc.components[i].componentcount > 0 then
begin
result := SearchMemo(wc.components[i]);
if result <> nil then exit;
end;
end;
end;
an?

heytheredelilah 3. Sep 2008 15:26

Re: pagecontrol
 
keine antworten mehr ?

sirius 3. Sep 2008 15:33

Re: pagecontrol
 
steht doch da:
Delphi-Quellcode:
mm := SearchMemo(PageControl1.ActivePage);
Dann steht in mm dein aktuelles Memo.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 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