Toon posts:

[Delphi] Interface element veranderd niet goed!

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben nog steeds bezig met me Delphi projectje, maar nu zit ik met een probleem...

Ik heb een 2tal labels in me form staan, maar als ik mijn text verander vervallen deze om de een of andere reden niet...

Deze code gebruik ik om de oude objecten op te sporen en te veranderen (de ouden gaan eerst op hide) om de een of andere reden blijven de elementen toch staan...

Wanneer ik het laatste element wil hiden blijft deze staan. Ook als ik in mijn label een string gebruik en kort deze daarna in dan blijven de oude letters er achterstaan.

Na een programma restart werkt t wel weer....

.DEstroy() van de objecten werkte om de een of andere reden niet...

Hoe los ik dit op??

Delphi:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
procedure TfrmMain.maakMeuk();
var i : integer;
begin
  setLength(pbars,aantalTaken);
  setLength(knopjes,aantalTaken);
  setLength(delknopjes,aantalTaken);
  setLength(dateLabels,aantaltaken);
  setLength(labels,aantalTaken);
  i := 0;

  //Destroy gaat niet goed! Krijg geheugen error! Daarom hide. Bij nieuwe items wordt er overheen geschreven dus NP
  {if oudAantal = 1 then
  begin
  //Bij laatste item trad bug op :S
  //DUS GEWOON LEGE ELEMENTEN SIMULEREN !!! Die geen parent hebben! Om de een of andere reden wordt er nl iets vastgehouden
    pbars[i] := TprogressBar.Create(boxTakenOverzicht);
    knopjes[i] := TButton.Create(boxTakenOverzicht);
    delknopjes[i] := TButton.Create(boxTakenOverzicht);
    dateLabels[i] := TLabel.Create(boxTakenOverzicht);
    labels[0] := TLabel.Create(boxTakenOverzicht);
    oudAantal := 0;
  end;}

  if oudAantal > 0 then
  begin
    while i < oudAantal do
    begin
      pbars[i].visible:=false;
      knopjes[i].visible:=false;
      delknopjes[i].visible:=false;
      dateLabels[i].visible:=false;
      labels[i].visible:=false;
      i:=i+1;
    end;
    oudAantal := 0;
  end;

  i:=0;

  while i < aantalTaken do
  begin
    //Aanmaken meuk!!
    //Labeltje met naam
    labels[i] := TLabel.Create(boxTakenOverzicht);
    labels[i].Parent := SELF.boxTakenOverzicht;
    labels[i].Enabled := true;
    labels[i].SetBounds(10,30 + (i * 40),150,20);
    labels[i].Font := fontVB.Font;
    labels[i].caption := taken[i].TaakNaam;
    labels[i].Visible := true;
    labels[i].Transparent := false;
    labels[i].Show;

    //Progressbar
    pbars[i] := TprogressBar.Create(boxTakenOverzicht);
    pbars[i].Parent := SELF.boxTakenOverzicht;
    pbars[i].Enabled := true;
    pbars[i].SetBounds(200,30 + (i * 40) + 2,150,20);
    pbars[i].Visible := true;
    pbars[i].Smooth := true;
    pbars[i].Position := taken[i].TaakPercentage;
    pbars[i].Show;

    //Labeltje met datum
    dateLabels[i] := TLabel.Create(boxTakenOverzicht);
    dateLabels[i].Parent := SELF.boxTakenOverzicht;
    dateLabels[i].Enabled := true;
    dateLabels[i].SetBounds(370,30 + (i * 40),200,20);
    dateLabels[i].Font := fontVB.Font;
    dateLabels[i].Visible := true;
    dateLabels[i].caption := DateTimeToStr(taken[i].taakDatum);
    dateLabels[i].Show;

    //Knopje EDIT!!
    knopjes[i] := TButton.Create(boxTakenOverzicht);
    knopjes[i].Parent := SELF.boxTakenOverzicht;
    knopjes[i].Enabled := true;
    knopjes[i].SetBounds(550,30 + (i * 40),100,20);
    knopjes[i].Visible := true;
    knopjes[i].caption := 'Details / Edit';
    knopjes[i].OnClick := frmMain.editTaakKlikje;
    knopjes[i].Show;

    //Knopje Delete!!
    delknopjes[i] := TButton.Create(boxTakenOverzicht);
    delknopjes[i].Parent := SELF.boxTakenOverzicht;
    delknopjes[i].Enabled := true;
    delknopjes[i].SetBounds(660,30 + (i * 40),100,20);
    delknopjes[i].Visible := true;
    delknopjes[i].caption := 'Delete';
    delknopjes[i].OnClick := frmMain.deleteTaakKlikje;
    delknopjes[i].Show;

    //Verhogen en dooor gaan
    i := i + 1;
  end;
end;

Verwijderd

ipv .Destroy;
-> .Free

Al geprobeerd ?

Verwijderd

Topicstarter
Verwijderd schreef op 23 June 2003 @ 13:16:
ipv .Destroy;
-> .Free

Al geprobeerd ?
Yup als ik de verschillende objecten in een lus .free blijft het zo staan!!

Ff een shotje van wat ik bedoel:

Afbeeldingslocatie: http://217.123.37.33:1338/downloads/screen.jpg

Dit treed op als ik de bovenste naam eerst -------------- noem en daana Aap.

Het lijkt of de rest gewoon erop gedrawed blijft staan. Bij debug is de caption text van dat label gewoon goed...


Dit gebeurt ook als ik een item verwijder dat een lange naam heeft. Dan wordt het andere item er oveheen getekend, maar zijn nog letters aanwezig van andere ding!!

Verwijderd

Topicstarter
Ik heb nu tijdelijk maar ff een lompe toenadering gedaan. DE labels hebben geen autosize meer! Dus hij gaat er overheen, maar ik vraag me af of de zooi nog in het geheugen staat? Want als het laatste item blijft staan terwijl deze verwijderd is is de knop nog wel te gebruiken, maar de actie is weg.

Moet de scrollbox (waar de elementen in staan) soms gecleared worden ofzo????

(als er geen oplossing uitkomt mik ik gewoon een mega label over het laatste item....)

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Onzin. Als je iets vrijgeeft dmv Free (niet Destroy gebruiken) worden ze vrijggegeven zonder foutmelding. Als je een foutmelding krijgt heb je een bug in je programma. Vaak probeer je dan iets vrij te geven dat niet (meer) bestaat of die andere nog gebruiken.

Dat die componenten gewoon blijven staan heeft waarschijnlijk als oorzaak dat je ze niet invisible maakt of verwijdered, maar gewoon laat staan. Misschien maak je er wel meer aan dan je zelf denk, of hide/free je er gewoon teweinig. Debuggen dus! :)

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


Verwijderd

Topicstarter
LordLarry schreef op 23 June 2003 @ 14:36:
Onzin. Als je iets vrijgeeft dmv Free (niet Destroy gebruiken) worden ze vrijggegeven zonder foutmelding. Als je een foutmelding krijgt heb je een bug in je programma. Vaak probeer je dan iets vrij te geven dat niet (meer) bestaat of die andere nog gebruiken.

Dat die componenten gewoon blijven staan heeft waarschijnlijk als oorzaak dat je ze niet invisible maakt of verwijdered, maar gewoon laat staan. Misschien maak je er wel meer aan dan je zelf denk, of hide/free je er gewoon teweinig. Debuggen dus! :)
Nee hoor, ze zitten in een array van elementen. Deze doorloop ik met het aantal dat is opgeslagen.

Dus stel er zijn er 3 opgeslagen loop ik door van 0 tot 3 (dus zonder 3).... dan zouden ze moeten verdwijnen, maar dat doen ze niet :S

In het begin was de bug dat ik de array al had verklein van te voren en daarna ff alles ging clearen. Dat vondtie niet lief...

Maar zelfs de scroll box repainten geeft geen goed suc6 :S

Kan ik de array niet in 1x doodmaken??

[ Voor 3% gewijzigd door Verwijderd op 23-06-2003 14:59 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

modbreak: waarom maak je hier in godesnaam een nieuw topic voor terwijl je vorige over exact hetzelfde onderwerp nog actief was -> [rml][ Delphi] Interface Elementen in RUNTIME genereren[/rml] :?

Tevens stellen we lappen code van 100 regels hier niet echt op prijs door de enorme 'debug eens voor mij'-uitstraling. Onthoud even voor de volgende keer

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op 23 juni 2003 @ 15:09:
<span style="color:blue">modbreak: waarom maak je hier in godesnaam een nieuw topic voor terwijl je vorige over exact hetzelfde onderwerp nog actief was -> [rml][ Delphi] Interface Elementen in RUNTIME genereren[/rml] :?

Tevens stellen we lappen code van 100 regels hier niet echt op prijs door de enorme 'debug eens voor mij'-uitstraling. Onthoud even voor de volgende keer</span>
ow oke, mijn excuses... Dacht dat de 2 onderwerpen niet compleet t zelfde waren.... Zal het volgende keer in de gaten houden!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 00:45

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 23 June 2003 @ 14:57:
[...]
Kan ik de array niet in 1x doodmaken??
Met een arraytje:=nil zal je array in 1 keer leeg zijn. Alleen als je er objecten in stopt zul je die toch echt eerst moeten free'en.

Waarom maak je eigenlijk gebruik van array's en niet bijv. van (een descentdant van) een TObjectList?

De TObjectList heeft als voordeel dat ie alle objecten vrijgeeft als je de TObjectList freeed, mits de ownsobjects property op true staat.

"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


Verwijderd

Topicstarter
Creepy schreef op 23 juni 2003 @ 15:41:
[...]

Met een arraytje:=nil zal je array in 1 keer leeg zijn. Alleen als je er objecten in stopt zul je die toch echt eerst moeten free'en.

Waarom maak je eigenlijk gebruik van array's en niet bijv. van (een descentdant van) een TObjectList?

De TObjectList heeft als voordeel dat ie alle objecten vrijgeeft als je de TObjectList freeed, mits de ownsobjects property op true staat.

Verwijderd

Topicstarter
MMMMM op de een of andere manier is een van me if lusjes niet goed!

Hij destroyde alleen de items wanneer deze verwijderd werden. Bij edit pleurde hij er een neiuwe instantie overheen....


Nu paktie hem wel. Nog 1 klein bugje wanner ik een nieuw object toevoeg. MAar dit heeft te maken met een integer die niet klopt! Moet ik nog ff een check voor maken!!!

IIG bedankt voor de hulp!
_/-\o_

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 23 June 2003 @ 14:57:
Nee hoor, ze zitten in een array van elementen. Deze doorloop ik met het aantal dat is opgeslagen.
Kan je dat ook proefondervindelijk bewijzen?
Verwijderd schreef op 23 June 2003 @ 16:07:
MMMMM op de een of andere manier is een van me if lusjes niet goed!

Hij destroyde alleen de items wanneer deze verwijderd werden. Bij edit pleurde hij er een neiuwe instantie overheen....
Dat zei ik toch! :) Gewoon even debuggen en niet alleen zeuren dat 'ie het zo toch moet doen, want dat staat in de code'

[ Voor 47% gewijzigd door LordLarry op 23-06-2003 16:12 ]

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

Pagina: 1