[Delphi] TTabsheet subcomponent benadering.

Pagina: 1
Acties:

  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 16-08 02:25
Ok, het zit zo: Ik ben een programma aan het maken wat modules moet gebruiken, en deze in tabbladen gaat weergeven.
Ik maak @ runtime tabsheets aan uit de module gegevens.
In elke tabsheet staat een ListView.
Ik wil de items in de listview benaderen vanuit een andere procedure.
Het probleem is dat als ik die listviews er tijdens runtime inzet, ik ze blijkbaar niet kan gebruiken in de code :? dit lijkt mij ontzettend stug, maar ik kom er gewoonweg niet meer uit. Ik heb hier het helse stukje code gepost:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//maak tabsheets aan in pagecontrol
With pcModuleList do
    for i := 0 to frmLoader.Modules.AvailableModules.TotalMods-1 do
     begin
       tab := TTabSheet.Create(pcModuleList);
        With tab do
            begin
               //tabs maken
               PageControl := pcModuleList;
               Caption     := frmLoader.Modules.AvailableModules.ModFile[i].Naam;
               Name        := 'tab'+inttostr(i);

               //listviews maken
               with TListView.Create(tab) do
                  begin
                    Parent := tab;
                    Align := alClient;
                    MultiSelect := False;
                    RowSelect := True;
                    Name := 'lv'+inttostr(i);
                    ViewStyle := vsReport;
                    modColumn := Columns.Add;
                    modColumn.Width := 175;
                    modColumn.Caption := 'Module';
                    modColumn := Columns.Add;
                    modColumn.Width := 120;
                    modColumn.Caption := 'Onderwerp';
                    modColumn := Columns.Add;
                    modColumn.Width := 304;
                    modColumn.Caption := 'Opdracht';
                   //voeg items toe aan lijst in huidige tab
                       For j:= 0 to frmLoader.Modules.AvailableModules.ModFile[i].TotalOpdrachten do
                         Begin;
                                modline              := Items.Add;
                                modline.Caption      := frmLoader.Modules.AvailableModules.ModFile[i].Naam;                                      //de naam van de module
                                modline.SubItems.Add(frmLoader.Modules.AvailableModules.ModFile[i].Opdrachten[j].Naam);                          //de deelopdracht
                                modline.SubItems.Add(frmLoader.Modules.AvailableModules.ModFile[i].Opdrachten[j].Opdracht);                      //de deelopdracht-omschrijving
                                modline.SubItems.Add(IntToStr(frmLoader.Modules.AvailableModules.ModFile[i].ModuleNummer));                      //module-id
                                modline.SubItems.Add(IntToStr(frmLoader.Modules.AvailableModules.ModFile[i].Opdrachten[j].OpdrachtNummer));      //opdracht-id
                         End;
                 end;
            end;
     end;


Als iemand me kan helpen, of een hint heeft, misschien een stukje voorbeeldcode, GRAAG, ik zit er helemaal doorheen :(

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Hoe benader je die listviews dan?

Je kan door de Controls collectie van die TabPage loopen, en dan testen of het huidige control jouw listview is.

https://fgheysels.github.io/


  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 16-08 02:25
whoami schreef op 09 October 2003 @ 18:13:
Hoe benader je die listviews dan?

Je kan door de Controls collectie van die TabPage loopen, en dan testen of het huidige control jouw listview is.
Ik had meer iets in gedachte van <tabcontrol>.<tab>.listview ..

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Nibble schreef op 09 October 2003 @ 18:16:
Ik had meer iets in gedachte van <tabcontrol>.<tab>.listview ..
Dat gaat niet lukken. Je kunt bijvoorbeeld wel van tevoren een TList maken, met 10 lege items.

Zodra je een listview aanmaakt, assign je zo'n pointer naar die listview.

Later kan je dan via TListView(Pointerlijstje[3]) dingen doen.

Wel goed doen, anders zijn de access-violen niet van de lucht!

Siditamentis astuentis pactum.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Nibble schreef op 09 October 2003 @ 18:16:
[...]


Ik had meer iets in gedachte van <tabcontrol>.<tab>.listview ..
Hoe bedoel je dat?

Bedoel je dat je "Tabcontrol1.tabsheet5.listview" wilt gebruiken op het moment dat je je tabsheets @ runtime aanmaakt? Dat gaat natuurlijk niet werken want de compiler heeft er geen idee van dat .tabsheet5 bestaat, aangezien deze @ compiletime nog niet bestaat, maar pas @ runtime wordt aangemaakt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Tja, zo kan je ze natuurlijk niet aanspreken.
listview is geen property van de TabControl of van de tabpage.

Je kan ze gewoon zo aanspreken ook:
code:
1
MyListView

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Varienaja schreef op 09 October 2003 @ 18:20:
[...]
Dat gaat niet lukken. Je kunt bijvoorbeeld wel van tevoren een TList maken, met 10 lege items.

Zodra je een listview aanmaakt, assign je zo'n pointer naar die listview.

Later kan je dan via TListView(Pointerlijstje[3]) dingen doen.

Wel goed doen, anders zijn de access-violen niet van de lucht!
Brr, pointers ;) Gebruik dan gewoon een array, of beter, een TObjectList.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 16-08 02:25
Creepy schreef op 09 October 2003 @ 18:20:
[...]

Hoe bedoel je dat?

Bedoel je dat je "Tabcontrol1.tabsheet5.listview" wilt gebruiken op het moment dat je je tabsheets @ runtime aanmaakt? Dat gaat natuurlijk niet werken want de compiler heeft er geen idee van dat .tabsheet5 bestaat, aangezien deze @ compiletime nog niet bestaat, maar pas @ runtime wordt aangemaakt.
Nee, dat was mijn probleem dus ook :P

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Nibble schreef op 09 oktober 2003 @ 18:21:
[...]
Nee, dat was mijn probleem dus ook :P
Zie whoami's tip dus.

En een tip van mij: pak eens een goed Delphi boek erbij ;)
En een andere tip: Dit is dus het verschi tussen compiletime en runtime. Waarschijnlijk ben je een ge-interpreteerde taal gewent?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 16-08 02:25
Creepy schreef op 09 oktober 2003 @ 18:31:
[...]

Zie whoami's tip dus.

En een tip van mij: pak eens een goed Delphi boek erbij ;)
En een andere tip: Dit is dus het verschi tussen compiletime en runtime. Waarschijnlijk ben je een ge-interpreteerde taal gewent?
Die ben ik niet gewend, laten we het erop houden dat ik me mijn ogen uit mijn hoofd moet schamen :X voor ongeveer de komende 5 jaar...

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Je kan anders ook nog eens naar de FindComponent method oid kijken.

https://fgheysels.github.io/


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Wordt het niet tijd om na te denken over de gebruikers-interface? We zitten hier allemaal mooie dingen te verzinnen... maar kan Nibble niet beter een MDI-applicatie in elkaar schroeven?

Ik kan er eigenlijk niet zo goed bij dat een applicatie runtime van uiterlijk verandert.

Siditamentis astuentis pactum.


  • mjax
  • Registratie: September 2000
  • Laatst online: 28-07 20:20
Kijk anders eens naar de AHM Triton Tools. Daar zit een component in, waarmee je een form in een ander form kunt tonen. Je zou dan dus voor al die modules aparte forms kunnen maken, elk met hun eigen code. In het hoofdscherm kun je dan dynamisch op de juiste plaats in de tabbladen de betreffende forms laden.

Ik heb dit zelf al eens gebruikt in een applicatie, maar mijn Delphi kennis is inmiddels wat vastgeroest, dus ik kan niet ff snel met een code voorbeeld komen.

Triton Tools zijn niet goedkoop. Overigens denk ik dat een soortgelijk componentje ook wel als freeware ergens verkrijgbaar moet zijn.

  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 16-08 02:25
Varienaja schreef op 09 oktober 2003 @ 19:05:
Wordt het niet tijd om na te denken over de gebruikers-interface? We zitten hier allemaal mooie dingen te verzinnen... maar kan Nibble niet beter een MDI-applicatie in elkaar schroeven?

Ik kan er eigenlijk niet zo goed bij dat een applicatie runtime van uiterlijk verandert.
Heb nog niet over een MDI app nagedacht, maar aangezien het modules zijn die allemaal geladen worden (en het er redelijk wat zijn) krijg je dan ineens wel een kwak vensters voor je neus. In je menu selecteerbaar maken zou dan ook een optie zijn misschien.
Maar ik zit er inmiddels al zo lang op dat het me eigenlijk onderhand de keel uitkomt (kortom, de app is bijna af :P)

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 16-08 02:25
whoami schreef op 09 October 2003 @ 19:02:
Je kan anders ook nog eens naar de FindComponent method oid kijken.
Misschien ook een idee, maar findcomponent is traag.

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.

Pagina: 1