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

Aktuelle Zeit: So Jul 13, 2025 20:27

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 06, 2003 10:44 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Tach,

habe nen kleines problem... (ach nee wer hätte das gedacht...)...

Ich hab ne Datenbank mit Delphi programmiert, wo ich Masken mit TNotebooks gelöst habe.
Das ganze läuft mit ner MySQL Datenbank ganz gut... ohne BDE ;)))) aber das ist nicht wichtig...

Ich hab also nen TNotebook namen nbMasks, da hab ich 9 pages drin:
Mit Zwei kämpf ich momentan: "AddConsultProfile" und "Helper".

in AddConsultProfile ist ein panel drin, wo mehrere TEdits drin sind: "panelAddProfile".

in Helper ist ein panel drin "panelAddLanguage".

Das Parent von "panelAddLanguage" wird beim Aufruf von Maske "AddConsultProfile" auf Maske "Helper" gesetzt, und unsichtbar gemacht.

Jetzt will ich das Parent von "panelAddLanguage" während der Laufzeit ändern... (zur info: Das Panel "panelAddLanguage" brauch ich um fremdsprachen in die Stammdaten in ne TListbox hinzuzufügen.)

Ich hab das momentan so gelöst:

Parent von "panelAddHardware" in Maske "AddConsultProfile" fetzen:

Code:
  1.  
  2. procedure TfrmMain.btnAddProfile_AddHardwareClick(Sender: TObject);
  3. var
  4.   I, Idx : Integer;
  5. begin
  6.   // Add Hardware Panel Parent von AddProfile nehmen
  7.   Idx := nbMasks.Pages.IndexOf('AddConsultProfile');
  8.   panelAddHardware.Parent := nbMasks.Controls[Idx].Parent;
  9.   panelAddHardware.Visible := True;
  10.  
  11.   // Add Profile Maske deaktivieren
  12.   panelAddProfile.Enabled := False;
  13.  


und falls dann fertig ist, dann grad wieder das Parent zurücksetzen:

Code:
  1.  
  2. procedure TfrmMain.btnAddHardware_CancelClick(Sender: TObject);
  3. var
  4.   Idx : integer;
  5. begin
  6.   // Parent von Add hardware zurücksetzen
  7.   Idx := nbMasks.Pages.IndexOf('Helper');
  8.   panelAddHardware.Parent := nbMasks.Controls[Idx].Parent;
  9.   panelAddHardware.Visible := False;
  10.  
  11.   // Maske Add Profile Aktivieren
  12.   panelAddProfile.Enabled := True;
  13. end;
  14.  



So, wenn ich in der Maske "AddConsultProfile" bin, dann funzt das wunderbar, wenn ich aber in ne andere maske gehe... z.b. in "ShowLog", und dann geh ich wieder zurück in "AddConsultProfile" und Klick dann auf den Button btnAddProfile_AddHardware, dann wird zwar so gemacht wie ichs will... bloss ich seh mein panel "panelAddHardware" nicht. Kann aber fröhlich drin rumklicken... und z.b. in der Liste zumwursteln:

Bild
So muss es sein:

Bild
So nicht :( Irgendwie fehlt das Panel :(


Hoffe mal ihr versteht was mein problem ist,

danke schonmal für antworten,

matane,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 06, 2003 11:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Mal 'ne Blöde Frage. Warum versteckst Du das Panel nicht einfach und fertig? Wozu brauchst du das Setzen des Parents?

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 06, 2003 11:25 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Weil ich das Panel später auch für andere Masken verwenden will... das wäre viel arbeit immer wieder das Panel zu kopieren... und Unsichtbar wirds ja nur in der Maske wo es grad ist... deswegen Parent.

matane,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 06, 2003 12:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also für mich sieht es so aus, als würde sich dein Panel in den Hntergrund verdrücken bzw. dein anderes Panel in den Vordergrund schieben.

Warum verwendest du für dieses Panel (mit der ComboBox) nicht einfach ein neues Fenster? Eventuell komplett auf ein neues Fenster oder nur die Elemente darauf übernehmen. Dann fallen solche Dinge weg und es ist sehr einfach wiederverwendbar.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 06, 2003 12:11 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Weil das ganze in dem einem Formular drin sein muss und ich mich nicht mit MDI auskenne...

Zitat:
Also für mich sieht es so aus, als würde sich dein Panel in den Hntergrund verdrücken bzw. dein anderes Panel in den Vordergrund schieben.


aber wenn sich das Panel verdrücken würde, dann könnt ich ja nicht fröhlich in der liste rumklicken... die buttons kann ich darauf übrigens auch anklicken. ist halt unsichtbar :(

das ganze jetzt auf MDI umzuwursteln, so weit wie ich jetzt schon bin, wäre viel arbeit :(

matane,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 06, 2003 12:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Du kannst ja auch bei einem Dialog das ShowModal aufrufen. Da brauchst du auch kein MDI. MDI ist so wie so nur für Word ähnliche Anwendungen. Also wo du mehrere gleiche Dokumente bearbeiten musst.
Du kannst allerdings auch bei einem Fenster ein Parent setzen. Dann reagiert das genau so wie dein panel auch. Nur mit der Tatsache, dass es ein echtes Fenster ist uns sich auch erschieben und so lässt.

Aber moment mal. Mir fällt da gerade noch etwas ein. Machst du dieses Panel nur unsichtbar? Und wann genau tritt dieser Fehler auf? Etwa dann, wenn du nach oben oder unten (Pfeiltasten) drückst?
Wenn dem so ist, dann hast du ganz einfach deinen Focus noch auf der ComboBox. Obwohl sie unsichtbar ist wird sie noch so behandelt als wäre sie da. Setze mal nach dem unsichtbar machen bei einem anderen Element (irgendein Eingabefeld) den Focus. Dann sollte es hoffentlich nicht mehr auftreten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 06, 2003 13:09 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Das mit den Focus geht auch net... ich kann weiterhin die liste anklicken.. und die buttons drücken... ist ja eigentlich auch richtig... bloss will ich aber auch das Panel sehen... ich nehme eher mal an... das ist irgendwie nen Z Index Problem... das nen anderes Panel sich davor schiebt... aber komischerweise tritt das halt auf nur wenn ich ne andere maske aufruf und dann wieder das Add Profile.

hmm... ich peil das irgendwie nicht...

irgendie merk ich grad, das des mit dem Parent gar nicht richtig funzt... das wird gemacht wenn die maske "Add Profile" aufgerufen wird:

Code:
  1.  
  2.       // Enablen/Disablen
  3.       Idx := nbMasks.Pages.IndexOf('Helper');
  4.       panelAddHardware.Parent := nbMasks.Controls[Idx].Parent;
  5.       panelAddHardware.Visible := False;
  6.  
  7.       panelAddProfile.Enabled := True;
  8.  


Add Hardware Panel sollte eigentlich in Maske "Helper" flutschen... das tut es aber nicht...
Sobald ich anstatt panelAddHardware.Visible := False ... panelAddHardware.Visible := True mache... dann seh ich das Panel in "Add Profile" obwohl ich es in helper eigenlich verbannt habe.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 06, 2003 13:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Okay irgendwie hast du mich jetzt total verwirrt. evtl hilft es, wenn du eine Version mal bereit stellst, bzw. nur den wichtigen Teil. So, dass man sich das mal live ansehen kann, bzw. mal ein bissel debugen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 06, 2003 14:22 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Das ganze programm wäre zu komplex das jetzt zu posten, grad weil man ne MySQL Datenbank braucht... und benutzer rechte integriert haben muss.

Hab deswegen schnell nen testapp gemacht... das genau so aufgebaut ist... und wo der bug ebenfalls vorkommt :/((
Da drin könnt ihr rumfuschen so viel ihr wollt,... damit man den bug auch erkennen kann... hab ich panels hingesetzt... wo man weiss wo man draufklicken muss... wenn der shit unsichtbar ist :(

<a href='http://www.delta-sys.de/shared/test.zip' target='_blank'>test.zip</a>

matane,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 06, 2003 15:15 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Ich hab' eine Lösung für das Problem: Du benötigst einen Platzhalter.

Erstell ein einfaches, leeres Panel mit der Größe des Hardware-Panels auf den Seiten, auf welchen es ausgegeben werden soll. Dieses Platz-Halter Panel ist nur dann sichtbar, wenn das Hardware-Panel auch sichtbar ist. Also beim entsprechenden Sichtbar-machen, das Platzhalter-Panel ebenfalls anzeigen. Nach dem Klick auf OK (im Hardware-Panel) das Platzhalter-Panel wieder verstecken.

Jetzt musst Du nur noch das jeweilige Platzhalter-Panel dem Hardware-Panel als Parent zuweisen und vóila: es funktioniert. Ok, etwas Umständlich, aber es funzt.

Andere Variante: Du machst auf jede Seite im Notebook ein Panel ohne Rahmen. Dieses ist genausogroß wie das Notebook selber. Alle anderen Panels werden in das große Panel auf den jeweiligen Seiten eingetragen. Jetzt machst du das Hardwarepanel in eine Form (mit FormStyle ToolBox) und weißt dieser Form als Parent das große Panel zu. Damit kann man die Form nicht aus dem Panel herrausbewegen ;)

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 07, 2003 08:52 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Alles klar,

das mit den Platzhaltern works ;) Ist zwar bisserl kompliziert, aba das geht schon... is mir lieber, das ich stänig den code kopieren muss.

Ich bedanke mich mal bei allen wo replyd haben,

Wenn das prog fertig ist, dann richt ich aufen encorex server, ne Mysql database dafür ein und poste das prog hier im forum. So zum betatesten...

Arigatou goizeimasu *Höfflich_auf_Japanisch_mit_verbeugung_dank*

matane,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 07, 2003 14:28 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Warum machst Du's nicht mit Frames? Frames sind Ideal dafür geeignet, wenn man ein und die Selben Controls an mehreren Stellen benötigt!

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 07, 2003 14:56 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Tja... da merkt man... das ist das erste mal.... das ich nenDatenbank tool programmiere und nich soviel erfahrung darin habe :unsure: Ich werd das momentan so jetzt lösen wie ichs jetzt habe, für Firma reicht das...

aber für mich prog ich das nochmal vollkommen Dynamisch... so das ich Dynamisch beliebig viele Masken erstellen kann. Dürfte eigentlich nicht so schwer sein, muss ja nicht wie in Xenorate alle Controls selber programmieren ;) Ausser ich mach das ganze auf OpenGL basis, was ich mir überlegt habe... wäre aber irgendwie unsinn oda ?

matane,
Final


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]