AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Falsche Änderung in einem Frame rückgängig machen
Thema durchsuchen
Ansicht
Themen-Optionen

Falsche Änderung in einem Frame rückgängig machen

Ein Thema von idefix2 · begonnen am 17. Mai 2015 · letzter Beitrag vom 18. Mai 2015
Antwort Antwort
Seite 1 von 2  1 2      
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Falsche Änderung in einem Frame rückgängig machen

  Alt 17. Mai 2015, 20:49
ich habe in meinem Formular ein Frame platziert.
Das Frame hat eine Komponente "Checkboxanlage" mit Onclick Ereignis.
Nun habe ich im Formular via Objektinspektor irrtümlich ein Onclick Ereignis eingetragen und das dann wieder gelöscht. Daraufhin steht im Dfm-File:

Code:
         
inherited CheckBoxAnlage: TCheckBox
    OnClick = nil
Kann ich das über den Objektinspektor wieder wegbekommen (ich will ja das geerbte Onclickereignis beibehalten), oder geht das nur, indem ich das DFM File direkt editiere (das habe ich gemacht, aber ich würde gerne wissen, ob es auch anders geht)?
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: Falsche Änderung in einem Frame rückgängig machen

  Alt 17. Mai 2015, 21:10
Das kann ich hier nicht nachvollziehen. Wenn ich im Objektinspektor ein Ereignis für OnClick erzeuge, steht im DFM-File des Formulars oder Frames einfach nur das:
Delphi-Quellcode:
object CheckBox1: TCheckBox
        Left = 125
        Top = 305
        Width = 97
        Height = 17
        Caption = 'CheckBox1'
        TabOrder = 0
        OnClick = CheckBox1Click
end
Nachdem ich das Ereignis wieder gelöscht habe, fehlt im DFM-File der Eintrag OnClick ... In keiner meiner DFM-Dateien kommt auch nur einmal das Token NIL vor ... bist du dir sicher, daß das in deinem DFM-File steht? Sieht mir eher wie aus einem PAS-File aus ...

Geändert von Perlsau (17. Mai 2015 um 21:13 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Falsche Änderung in einem Frame rückgängig machen

  Alt 17. Mai 2015, 21:15
Doch, er hat Recht. Das steht so in der DFM des Formulars auf welchem der Frame platziert wurde. Ich kenne aber leider auch kein Gegenmittel.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#4

AW: Falsche Änderung in einem Frame rückgängig machen

  Alt 17. Mai 2015, 21:26
Wenn in einem Frame, im Vorfahren eines abgeleiteten Forms, im MultiView oder einer anderen Ableitungsvariante im Vorfahren ein Event zugewiesen war und man löscht das in einer Ableitung (inherited), dann wird natürlich das nil gespeichert, was man da ja eingetragen hat.

Man kann in der DFM (Strg+F12 und das Property löschen) oder im VCS das rückgängig machen.
Oder du weißt das Event wieder zu (wenn man es kennt) ... findest du es denn im DropDown nicht?

Teilweise kann man im Kontextmenü des Formdesigners einen "Wiederherstellen"-Menüpunkt finden. Theoretisch würde man das auch im OI benötigen, aber ich glaub da fehlt das im Menü.

@Perslau: Ableitung (inherited) und nicht Original (object)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Mai 2015 um 21:29 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Falsche Änderung in einem Frame rückgängig machen

  Alt 17. Mai 2015, 21:46
@idefix2:
Wie bekommt man eigentlich zur Desingzeit ein Frame auf ein Formular?

Doch, er hat Recht. Das steht so in der DFM des Formulars auf welchem der Frame platziert wurde. Ich kenne aber leider auch kein Gegenmittel.
Ja, ich gestehe, das Problem nicht mit einem Frame nachgestellt zu haben, sondern lediglich mit einem Formular.

Wenn in einem Frame, im Vorfahren eines abgeleiteten Forms, im MultiView oder einer anderen Ableitungsvariante im Vorfahren ein Event zugewiesen war und man löscht das in einer Ableitung (inherited), dann wird natürlich das nil gespeichert, was man da ja eingetragen hat.
Wie hat idefix2 das deiner Ansicht nach jetzt gemeint: Er hat auf einem abgeleiteten (?) Frame eine Checkbox mit zugewiesenem OnClick-Ereignis? Mit welchem Frame arbeitet er dann zur Designzeit? Oder anders gefragt: wie zeigt man im Designer ein abgeleitetes Frame an? Ich kann doch nur die Frames anzeigen, die ich zuvor erstellt habe. Wenn ich z.B. mehrere gleichartige, aber dennoch unterschiedliche Frames in meinem Programm benötige, erstelle ich ein Default-Frame, benenne das je nach Bedarf um und speichere es unter einem neuen Namen. Beim nächsten Frame, das ich aus dem Default-Frame erzeugen möchte, füge ich das Default-Frame dem Projekt, benenne es wieder um und speicher es unter einem weiteren neuen Namen. Alles andere kann ich zur Designzeit doch gar nicht machen, soweit mir bekannt, zumindest nicht mit D2009
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#6

AW: Falsche Änderung in einem Frame rückgängig machen

  Alt 17. Mai 2015, 22:09
Toolpalette "Frames" und dann geht ein Helper auf, der z.B. Frames im selben Projekt auflistet.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Falsche Änderung in einem Frame rückgängig machen

  Alt 17. Mai 2015, 23:26
Ahh! Jetzt! Das hatte ich bisher nie verwendet ... Der Ursprungsframe enthält eine Checkbox mit zugewiesenem OnClick-Ereignis. Ich wechsle ins Mainform und platziere darauf den Frame via Toolpalette -> Standard -> Frames. Okay. Danach klicke ich die auf dem jetzt eingebetteten Frame befindliche Checkbox an und sehe im OI -> Ereignisse, daß in dieser Kopie des Original-Frames der Checkbox keine Ereignisbehandlung zugewiesen wurde. Wenn ich jetzt im OI via Doppelklick der Checkbox im Frame auf dem Formular ein Ereignis zuweisen will, erstellt mir Delphi folgende Procedure in der Mainform:
Delphi-Quellcode:
procedure TFormMain.Frame_Test1CheckBox1Click(Sender: TObject);
begin
  Frame_Test1.CheckBox1Click(Sender);
end;
Das ruft dann die bereits implementierte Ereignisbehandlung für die Checkbox auf und funktioniert tatsächlich wie erwartet. Wenn ich jetzt im OI das Ereignis lösche, steht tatsächlich in der DFM der Mainform:
Delphi-Quellcode:
inherited CheckBox1: TCheckBox
          OnClick = nil
Nachdem ich das Ereignis im OI wieder zugewiesen habe, steht dort:
Delphi-Quellcode:
inherited CheckBox1: TCheckBox
          OnClick = Frame_Test1CheckBox1Click
Damit dürfte das Problem gelöst sein

Geändert von Perlsau (17. Mai 2015 um 23:30 Uhr)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#8

AW: Falsche Änderung in einem Frame rückgängig machen

  Alt 17. Mai 2015, 23:36
Oder du weißt das Event wieder zu (wenn man es kennt) ... findest du es denn im DropDown nicht?
Nein, im Dropdown kann man es nicht zuweisen, da scheinen nur die Ereignisbehandlungsroutinen der Form-Unit auf, aber die geerbte Routine ist ja in der Frame-Unit deklariert.
Wenn man sich im OI der Form die Ereignisse anschaut, die der Komponente eines Frame zugeordnet sind, ist das komplett leer, die geerbten Ereignisse sind da nicht sichtbar, die sieht man nur, wenn man das Original-Frame bearbeitet.

Ist auch nicht weiter schlimm, man kann es ja direkt in der DFM-Datei löschen - ich habe das nur gefragt, weil ich in dem File nicht besonders gerne herumfuhrwerke, weil man da sehr schnell irgendwas gröber ruiniert: beim Herauslöschen dieses inherited habe ich in der DFM Datei zuerst das zugehörige "end" nicht mitgelöscht, daraufhin waren beim ersten Versuch, die neue Version zu kompilieren, plötzlich die Hälfte der Formularkomponenten weg, da hab ich im ersten Moment recht dumm dreingeschaut

@Perlsau
Frame_Test1Checkbox1Click ist aber eine Ereignisbehandlungsroutine der Form, die ihrerseits die Routine der frame aufruft, was zumindest überflüssiger Overhead ist. Deshalb wollte ich das so nicht stehen lassen. Aber offenbar bringt man das nicht mehr via OI weg, sondern nur direkt in der DFM Datei.

Geändert von idefix2 (17. Mai 2015 um 23:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#9

AW: Falsche Änderung in einem Frame rückgängig machen

  Alt 17. Mai 2015, 23:50
Wenn man sich im OI der Form die Ereignisse anschaut, die der Komponente eines Frame zugeordnet sind, ist das komplett leer, die geerbten Ereignisse sind da nicht sichtbar,
Auch nicht, wenn du den Fokus in das Property-Edit setzt?
Ich kenn z.B. Komponenten von einem globalen DataModul, deren "Link" man nur sieht, wenn der Fokus sich im Edit befindet und sonst ist der auch unsichtbar,
außer die Datenmodul-Unit ist ebenfalls gerade im Editor geladen,

bzw. sie war es in dieser Session mal geladen, wenn das Datenmodul sich zudem in einem Designpackage innerhalb der IDE befindet.

sondern nur direkt in der DFM Datei.
Im Kontextmenü des Formdesigners gibt es keine Funktion?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#10

AW: Falsche Änderung in einem Frame rückgängig machen

  Alt 17. Mai 2015, 23:56
Auch nicht, wenn du den Fokus in das Property-Edit setzt?
Nein, auch dann nicht.

sondern nur direkt in der DFM Datei.
Im Kontextmenü des Formdesigners gibt es keine Funktion?
Ha! Gibt es doch!
"Geerbte Einstellungen wiederherstellen"
Danke für den Tipp.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz