Avatar billede shjdsi Nybegynder
16. december 2003 - 16:39 Der er 6 kommentarer og
1 løsning

dynamisk add af komponenter på form

Hej!
mitspg er følgende:
jeg har et String array med et antal elementer, disse elementer repræsentere f.eks processer der skal overvåges eller database stuff (ikke vigtigt blot for historik)

Nu kunne jeg godt tænke mig at jeg kunne loope igennem et sådan array og for hvert element adde f.eks en cirkel på min form i et defineret område(kunne også være noget andet) Det er sådan rimeligt at komme til, men hvad jeg studser over er at jeg gerne ville have properties på disse objekter med f.eks fillcolor m.m samt en label.


Det skulle være tænkt som at hvis nu en ting der bliver overvåget går ned skal den være rød, ellers skal den være grøn og er den bare f.eks idle skal den være blå eller sort.

Jeg havde i tankerne at lave en komponent med de egenskaber jeg gerne ville have. Men jeg er ikke inde i teknikken omkring dynamisk placering af objekter på forms samt måske der findes en lettere måde at gøre det på en selv udvikle en activeX

Håber i forsåt hvad det er jeg vil. :-)
Avatar billede thesurfer Nybegynder
16. december 2003 - 16:51 #1
Hvis du mener "controls" når du skriver komponenter:
Create Controls Dynamically - http://www.vb2themax.com/HtmlDoc.asp?Table=Articles&ID=310
Avatar billede sion Nybegynder
16. december 2003 - 22:34 #2
Jeg ville nok vælge at gøre det på følgende måde:
1. Lave en ny variable type f.eks.
Private Type KomponentTing
  Backcolor as ole_color
  Left as long
  Top as long
  'osv...
End Type

2. Opret, inde i Visual Basic, én af hver af de objekter du vil kunne oprette dynamisk. Disse objekter du opretter skal have et index på 0.

3. I den variabel (KomponentTing) skal du have indlæst de værdier som du vil angive for de objekter der skal oprettes - det kan f.eks. være at de bliver læst fra en textfil eller som en database som du nævner.

4. Dernæst kan du dynamisk oprette objekter ved at læse den brugerdefinierede variabel som du har oprettet. F.eks. hvis du vil oprette en knap kaldet "cmdKnap" kan du bruge noget lig følgende:

Dim NytIndeks as Integer
NytIndeks = cmdKnap.Count

Load cmdKnap(NytIndeks)
cmdKnap(NytIndeks).Top = DinVariable.Top
cmdKnap(NytIndeks).Left = DinVariable.Left
cmdKnap(NytIndeks).Backcolor = DinVariable.Backcolor
cmdKnap(NytIndeks).Visible = True

Hvis du ikke er helt med, eller vil have mig til at lave et reelt eksempel eller lignende, så bare skriv tilbage :)
-Sion
Avatar billede shjdsi Nybegynder
17. december 2003 - 10:12 #3
hej Sion> jeg forsøger mig med følgende kode i en form.
med en shape som er sat til circle, men den brokker sig over manglende object

Private Type mincircle
  fillcolor As OLE_COLOR
  left As Long
  top As Long
  'osv...
End Type
Private Sub Command1_Click()
Dim NytIndeks As Integer
Dim top, left As Integer

Do While i < 5
top = top + 10
left = left + 10
mincircle.top = top
mincircle.left = left
NytIndeks = Shape1.Count

Load Shape1(NytIndeks)
Shape1(NytIndeks).top = mincircle.top
Shape1(NytIndeks).left = mincircle.left
Shape1(NytIndeks).Backcolor = mincircle.Backcolor
Shape1(NytIndeks).Visible = True




i = i + 1

Loop
End Sub
Avatar billede sion Nybegynder
17. december 2003 - 10:58 #4
Ok, shjdsi jeg har lige fixet et lille simpelt eksempel til dig...
Du skal bare tage nedenstående kode og kopier ind i Notepad. Dernæst skal du gemme teksten som "Form1.frm" og åbne den fil du lige har gemt. Så har du både formen, objekter og koden, og du kan nu køre eksemplet... Nåm, her er filen:

VERSION 5.00
Begin VB.Form Form1
  Caption        =  "Form1"
  ClientHeight    =  4095
  ClientLeft      =  60
  ClientTop      =  345
  ClientWidth    =  5790
  LinkTopic      =  "Form1"
  ScaleHeight    =  4095
  ScaleWidth      =  5790
  StartUpPosition =  3  'Windows Default
  Begin VB.CommandButton Command1
      Caption        =  "Opret Objekter"
      Height          =  615
      Left            =  120
      TabIndex        =  0
      Top            =  3360
      Width          =  2175
  End
  Begin VB.Shape shpFigur
      FillStyle      =  0  'Solid
      Height          =  615
      Index          =  0
      Left            =  120
      Shape          =  4  'Rounded Rectangle
      Top            =  120
      Width          =  855
  End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Sub Command1_Click()

  Dim NytIndeks As Integer
  Dim iTop As Long, iLeft As Long
  Dim FyldFarve As OLE_COLOR
 
  Dim ix As Integer
  For ix = 1 To 5
    NytIndeks = shpFigur.Count
    Load shpFigur(NytIndeks)
   
    iTop = shpFigur(NytIndeks - 1).top + shpFigur(NytIndeks - 1).Height
    shpFigur(NytIndeks).top = iTop
   
    iLeft = shpFigur(NytIndeks - 1).left + shpFigur(NytIndeks - 1).Width
    shpFigur(NytIndeks).left = iLeft
   
    FyldFarve = RGB(ix * 50, ix * 50, ix * 50)
    shpFigur(NytIndeks).fillcolor = FyldFarve
   
    shpFigur(NytIndeks).Visible = True
  Next ix

End Sub
Avatar billede shjdsi Nybegynder
17. december 2003 - 11:51 #5
tak for hjælpen det virker ligesom jeg vil have det. jeg kunne vel ikke for de 100 point få dig til at forklare hurtigt et  2-dimensionelt array.

den ene dimention skal holde en string, den anden en integer

således
mitarray()
redim preserve mitarray(ettal,ettal)
det skal initaliseres udfra et udtræk fra en db, således at string kommer til at holde navnet på det jeg vil chekke og status kommer til at holde et tal der angiver om den givne strings status.

på baggrund af dette array skal de dynamiske kontroller dannes

så hvis status f.eks er 3 og string er "minprocess" laver den fillcolor rød.

Mit problem er rent teknisk hvordan initalisere jeg et sådan array og hvordan læser jeg det.

der er lige mange elementer i dimensionx,y så det burde ikke være et problem
Avatar billede sion Nybegynder
17. december 2003 - 16:23 #6
Sorry, jeg havde ikke lige adgang til net, så jeg kunne ikke svare på dit spørgsmål. Jeg nåede at skrive følgende inden jeg opdagede at du havde oprettet et nyt spørgsmål omkring det 2-dimentionelle array og fået et acceptabelt svar på det. Anyways, jeg poster lige mit halv-færdige svar så det ikke er helt spildt.

Størrelsen på et array kan, uanset hvor mange dimensioner det har, kan kun defineres ud fra en heltalsværdi - altså en integer. Dog kan man lave en string array, som indeholder en streng - men dimensionerne er stadig integer's.
Det er altså opbygget som følger:
ArrayNavn(Antal,Antal,...) As Variabel (String, Integer osv.)

Hvad du i stedet kan lave så du kan hæfte flere variable til hver array er en brugerdefineret "type"... [det var så det jeg nåede]

Tak for point, godt du kunne bruge mit svar ;)
-Sion
Avatar billede shjdsi Nybegynder
17. december 2003 - 16:35 #7
jeg var allerede meget tilfreds med svaret, men bokser noget rundt i det med typer

se evt. http://www.eksperten.dk/spm/441029
Det køre ikke rigtigt for en gammel shell scripter her i vb :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester