Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mai 16, 2024 12:20

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Jul 08, 2012 19:39 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
Hi,

mir ist keine bessere Kurzbeschreibung eingefallen für mein Problem :D

also ich hab eine Klasse die Fenster in einer GUI darstellen soll. Nun hat dieses Fenster ein Array mit den Buttons. Diese werden über eine eigene Funktion erstellt und eine Übergeornete Klasse bekommt immer einen Pointer auf den Neu erstellten Button zurück. ungefähr so (gekürzt)

Code:
  1.  
  2.   TGUI_Window = class(TGUI_Base)
  3. [...]
  4.    public
  5.     Buttons : array of TGUI_Button;
  6. [...]
  7.     function  AddButton(Top_, Left_, Width_, Height_ : Integer) : PGUI_Button; overload;
  8.     function  AddButton(ID : Integer) : PGUI_Button; overload;
  9.   end;
  10.  
  11. function TGUI_Window.AddButton(ID : Integer) : PGUI_Button;
  12. begin
  13.  SetLength(Buttons, Length(Buttons)+1);
  14.  Buttons[High(Buttons)] := TGUI_Button.Create(@Rec.top, @Rec.left);
  15.  Buttons[High(Buttons)].SetAll(0,0,0,0, Ebene);
  16.  Buttons[High(Buttons)].SetAllp(FFM, TRM, Api);
  17.  Buttons[High(Buttons)].GetInfoFromFile(ID);
  18.  result := @Buttons[High(Buttons)];
  19. end;
  20.  


In der Übergeordneten Klasse sieht das nun so aus wie ein Formular:

Code:
  1.  
  2.     TGUI_HauptMenue=class
  3.       Fenster : TGUI_Window;
  4.       B_Exit : PGUI_Button;
  5.       B_Neu : PGUI_Button;
  6.       B_Laden : PGUI_Button;
  7.       B_Optionen : PGUI_Button;
  8. [...]
  9.      end;
  10. constructor TGUI_HauptMenue.Create;
  11. begin
  12.  Fenster := TGUI_Window.Create(0,0,PApp.ClientWidth, Papp.ClientHeight,-1);
  13.   B_Exit := Fenster.AddButton(1);
  14.   B_Neu := Fenster.AddButton(2);
  15.  // B_Laden := Fenster.AddButton(3);
  16.  // B_Optionen := Fenster.AddButton(4);
  17.  
  18.   B_Exit.OnMouseClick := OnB_ExitClick;
  19.  


und hier kommt das Problem, Habe ich dem Fenster nun genau 1 Button zugewiesen funktioniert die Letzt Zeile, bei mehreren aber nicht mehr obwohl sich doch der Pointer nicht verändert. Hat jemand ne Ahnung woran das liegen kann?

lg

€: ganz vergessen wenn ich also so wie es jetzt oben steht versuche die funktion zuzuweisen bekomme ich eine Access Violation bei Adresse 00478A41 [...] Schreiben von Adresse 0077659A.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 09, 2012 09:36 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Entferne mal bitte die Pointer auf Klassen. Klassen sind für sich schon Pointer, sodass der zusätzliche Pointer nicht nötig ist.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 09, 2012 10:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
i0n0s hat geschrieben:
Entferne mal bitte die Pointer auf Klassen.

Du meinst sicher die Pointer auf Objekte?

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 09, 2012 11:30 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
der sinn daran war ja aber folgender nur kurz mal schematisch

Zitat:
PKlasse1=^Klasse1;
Klasse1=class
end;

Klasse2=class
blubb : array of Klasse1;
end;

Klasse3=class
Dummy : PKlasse1; //soll nun auf das erste objekt im array zeigen


ich hoffe das ist vorstellbar der sin dahinter ist das ich mich nicht immer erst durch das array wurschteln muss sondern den button direkt anspreche als ob er zu klasse3 gehört, der ordnung halber möchte ich ihn aber in klasse2 verwalten

lg


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 09, 2012 14:40 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Der Rückgabewert von AddButton zeigt auf eine Adresse des Arrays nicht auf eine Instanz von TGUI_Button. Das Problem dabei ist aber, wenn du das Arrays verlängerst, wird ein neuer (größerer) Speicherbereich reserviert und der bisherige Inhalt reinkopiert. Dadurch liegt das Array an einer anderern Stelle im Speicher, aber dein Pointer zeigt in einen Bereich der möglicherweise schon wieder überschrieben wurde.
Wie i0n0s und Lord Horazont schon sagten, sind die Instanzen von Klassen schon Pointer. Man kann also auch auf den PGUI_Button verzichten und direkt TGUI_Button verwenden, ohne das Speicher verschwendet wird. Außerdem könnte das die Lösung für dein Problem sein, da sich der Speicherbereich in dem die Instanz liegt nicht verschiebt, wenn du das Array veränderst.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 09, 2012 15:04 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Es ginge schon mit den ekeligen Pointern an der Stelle, wenn Dropeye auch "New()" bemühen würde... was natürlich totaler Quark ist, wie weiter oben schon angemerkt wurde.

Deutschen und Englischen Quellcode würde ich auch nicht mischen.

Hier im Forum gab es doch schonmal 'ne GUI implementation, oder? Warum benutzt Du (dropeye) nicht jene?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 10, 2012 13:13 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
gut ich habe die pointer rausgenommen das mit dem speicherbereich klingt recht logisch, und wegen der gui implementation, ich könnte nachtürlich auch durch das forum scheun mir überall ein bisschen was zusammenklauben und noch 3 zeilen dazwischenschreiben und hätte die basis für ein projekt :D aber das ist ja nicht sinn der sache, ich nutze ja schon textsuite und fremde texturloader sowie einen modelloader als fremdunits das reicht denke ich ;)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 10, 2012 18:20 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Echt ätzend das imageshack hier in Südafrika gesperrt ist. Und Nein, ich mag keinen Proxy einrichten. Imgur.com ist viel besser :P just saying.

Hmm jo, aber dann würdest Du sehen wies "richtiger" gemacht werden könnte :) Nimm wenigstens die _ in deinen Bezeichnern raus und schreib den Code auf Englisch :)

habe ich TObjectList schon erwähnt? statt das rumgeeiere mit arrays...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 11, 2012 12:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
phlegmatiker hat geschrieben:
Hmm jo, aber dann würdest Du sehen wies "richtiger" gemacht werden könnte :) Nimm wenigstens die _ in deinen Bezeichnern raus und schreib den Code auf Englisch :)

Du machst deinem Avatar alle ehre.

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 11, 2012 22:23 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
bitte versteh mich nicht falsch ich nehm gern tipps aber die "_" bleiben bei mir im code und auch die deutschen bezeichner dienen mir ungemein der übersicht in einem code den ja größtenteils nur ich selbst lesen und vorallem überblicken muss ;)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jul 12, 2012 16:57 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Na dann :)

Gilt für euch zwei.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.026s | 17 Queries | GZIP : On ]