[BCB]Meerdere instanties (grafische) objecten

Pagina: 1
Acties:

  • WarMaster
  • Registratie: Juni 1999
  • Niet online

WarMaster

Nosce te ipsum

Topicstarter
Geachte mede-Gotters,

Allereerst; wat is het hier uitgestorven lijkt het wel.
Vroegâh had je nog een flinke bak met C (+varianten) topics lopen.

Anyway,

Iets waar ik al enige tijd mee zit in BCB is het creëeren van meerdere instanties van grafische objecten in running mode.

D.w.z. in de builder plak je gewoon zooi zo als je het wil hebben, en daarbij wordt alles in een soort 'object' taaltje bewaard (de .DFM file).

Simpel voorbeeld.
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
object Form1: TForm1
  Left = 192
  Top = 107
  Width = 519
  Height = 365
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Edit1: TEdit
    Left = 112
    Top = 104
    Width = 121
    Height = 21
    TabOrder = 0
    Text = 'Edit1'
  end
  object Button1: TButton
    Left = 168
    Top = 200
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 1
  end
end


Nu zijn er situaties te bedenken waarbij je, afhankelijk van de input van de user, een aantal instanties van (of diverse) grafische objecten tevoorschijn wil toveren.
Omdat dit om een variabel aantal kan gaan, is het geen oplossing om 255 van die objecten te tekenen, en ze vervolgens allemaal "Visable NO" te zetten.

Is er een manier om dynamisch met die objecten om te gaan?

We live in a primitive time don't we, neither savage nor wise. Half measures are the curse of it; any rational society would either kill me or put me to some use.


  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

WarMaster schreef op 02 augustus 2004 @ 06:33:
Is er een manier om dynamisch met die objecten om te gaan?
Vroegah werdt ook nog wel eens de search gebruikt ;) (maar die ligt nu plat ;) ).

Ja, het is mogelijk om buttons e.d. dynamisch aan te maken. Als je daarna maar het form waar de control op getoond moet worden als parent property zet van de control dan wordt de control ook getoond.

Delphi:
1
2
3
4
5
var button: TButton
begin
  button := TButton.create(nil);
  button.parent := Form1;
end;

Bovenstaande is Delphi code, maar makkelijk om te zetten naar BCB code lijkt me ;)

"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


  • WarMaster
  • Registratie: Juni 1999
  • Niet online

WarMaster

Nosce te ipsum

Topicstarter
Mja, dat heb ik inmiddels werkend...

Het grote probleem is hoe ik die objecten steeds moet aanspreken.

Ik kan zulke objecten op allerlei manieren er op mieteren heb ik gemerkt, maar ik raak de mogelijkheid kwijt om hem buiten de scope waar het object gemaakt wordt te benaderen.

Je kan zo'n ding wel een naam geven met een string in de zin van "TijdelijkePointer->Name = "NaaminString"; maar je kan absoluut niet "NaaminString"->Property = bla bla bla

Want "NaaminString kent hij als object niet.
Of moet ik dan met een pointer naar een pointer werken?

We live in a primitive time don't we, neither savage nor wise. Half measures are the curse of it; any rational society would either kill me or put me to some use.


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
BCB heeft een method FindControl of FindComponent oid. De juiste naam weet ik niet, maar die method neemt een string als parameter, en returned dan de control met die naam.

Je kan natuurlijk ook zelf door de ControlCollection gaan lopen.

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

WarMaster schreef op 03 augustus 2004 @ 21:39:
Mja, dat heb ik inmiddels werkend...

Het grote probleem is hoe ik die objecten steeds moet aanspreken.

Ik kan zulke objecten op allerlei manieren er op mieteren heb ik gemerkt, maar ik raak de mogelijkheid kwijt om hem buiten de scope waar het object gemaakt wordt te benaderen.

Je kan zo'n ding wel een naam geven met een string in de zin van "TijdelijkePointer->Name = "NaaminString"; maar je kan absoluut niet "NaaminString"->Property = bla bla bla

Want "NaaminString kent hij als object niet.
Of moet ik dan met een pointer naar een pointer werken?
Nofi, maar heb jij ooit een basiscursus C++ gevolgd? :?

Je kunt gewoon een TList maken en daarin TControl-pointers opslaan, of in membervariabelen van een willekeurige class, of voor mijn part in een std::vector<TControl*>

C++:
1
2
3
4
5
TList* MyList = new TList;
TButton* MyButton = new TButton(Form1);

MyButton->Parent = Form1;
MyList->Add(MyButton);

Om maar een inkoppertje te noemen...

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
Hmm, ik vraag me zelfs af of de VCL geen TControlList class bevat.
(Delphi is al een tijd geleden... )

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

whoami schreef op 03 augustus 2004 @ 22:46:
Hmm, ik vraag me zelfs af of de VCL geen TControlList class bevat.
(Delphi is al een tijd geleden... )
In mijn versie van BCB5 in ieder geval nog niet, en een recentere heb ik nooit vastgehad :)

(te lui om te porten, wat helaas met BCB wel nodig is)

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
Hmmm, in mijn versie van Delphi 5 ook niet.
De Controls - property is een array van TControl objecten; daarnet hield ik me voor dat dat een collection was van het type TControlList ofzo. Nouja, niet dus.

https://fgheysels.github.io/


  • WarMaster
  • Registratie: Juni 1999
  • Niet online

WarMaster

Nosce te ipsum

Topicstarter
curry684 schreef op 03 augustus 2004 @ 22:21:
[...]

Nofi, maar heb jij ooit een basiscursus C++ gevolgd? :?

Je kunt gewoon een TList maken en daarin TControl-pointers opslaan, of in membervariabelen van een willekeurige class, of voor mijn part in een std::vector<TControl*>

C++:
1
2
3
4
5
TList* MyList = new TList;
TButton* MyButton = new TButton(Form1);

MyButton->Parent = Form1;
MyList->Add(MyButton);

Om maar een inkoppertje te noemen...
Heel fijn voor de genuanceerde kritiek....
Maar nee, ik heb nooit een C++ basis cursus gevolgd.
Slechts een half jaar op de HTS wat brakke informatica m.b.v. je raadt het al... BCB.

In elk geval was ik bedankt voor het inkoppertje, want dat is altijd de beste manier..... een voorbeeld :)

Die FindControl en FindComponent functies zijn me nog helemaal duister wat betreft de werking daarvan...

Maar ik red me hier wel mee hoop ik.

We live in a primitive time don't we, neither savage nor wise. Half measures are the curse of it; any rational society would either kill me or put me to some use.


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Delphi heeft ook een TComponentList, zoals eerder genoemd, die je kan gebruiken. Deze kan ook de Owner zijn van de TComponentens zodat zodra de lijst vrijgegeven wordt, ook de objecten daarin vrijgegeven worden. Als je dat wilt tenminste. En als er een TComponent door iemand anders vrijgegeven wordt, wordt ie automatisch uit de lijst gehaald.

FindControl geeft het TWinControl bij de bijbehorende HWND (Window Handle). FindComponent vind een TComponent aan de hand van de Name van een TComponent, maar zoekt alleen in de lijst van componenten met dezelfde Owner.

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

WarMaster schreef op 05 augustus 2004 @ 13:11:
[...]

Heel fijn voor de genuanceerde kritiek....
Het was geen genuanceerde kritiek, en zelfs geen kritiek :) Het was een eerlijke retorische vraag omdat ik dat linea recta uit je code-voorbeelden af kon leiden. En dat is vervolgens geen kritiek dus, maar enkel bedoeld om je te stimuleren dat wel te doen. Programmeren is verschrikkelijk veel meer dan voorbeelden en 'inkoppertjes' van anderen overtypen, en ik ben bang dat je dus van dit topic wat dat betreft weinig geleerd hebt. Investeer gewoon eens in een boek over C++, en dan liefst Stroustrup, daar leer je zoveel meer van dan een topic op GoT over basale elementen.

Programming & Webscripting is bedoeld voor inhoudelijke discussies over programmeerproblemen, niet over het stap-voor-stap helpen bij het leren programmeren ;)

Professionele website nodig?

Pagina: 1