AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Das geheimnissvolle Controll

Ein Thema von Delbor · begonnen am 13. Nov 2018 · letzter Beitrag vom 14. Nov 2018
Antwort Antwort
Seite 1 von 2  1 2      
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Das geheimnissvolle Controll

  Alt 13. Nov 2018, 16:52
Delphi-Version: 10.2 Tokyo
Hi zusammen

In einer Scrollbox möchte ich mehrere Instanzen eines TCustumControl-Nachfahhren platzieren. Dieses versuchen ich in einer Testanwendung so:

Delphi-Quellcode:
procedure TRSPdfFrame.PdfViewCreate;
  var i: integer;
begin
  for i := 0 to 4 do
  begin
    FPDFView := TPdfView.Create(Self);
    FPdfView.Parent := Scrollbox1;
    FPdfView.Name := 'PdfView'+intToStr(i);
    FPdfView.Color := clyellow;
    FPdfView.Height := 120;
    FPdfView.Top := i * (FPdfView.Height + 8);
    FPdfView.Width := Scrollbox1.ClientWidth - 40;
    FPdfView.Left := (ScrollBox1.ClientWidth - FPdfView.Width) div 2;
    ScrollBox1.VertScrollBar.Range := ScrollBox1.VertScrollBar.Range + FPdfView.Height;
  end;
end;
Der Aufruf:
Delphi-Quellcode:
procedure TRSPdfFrame.ScrollBox1Resize(Sender: TObject);
begin
  PdfViewCreate;
  FReportlist.Add('ScrollBox1Resiz')
end;
Der Inhalt von FReportlist wird bei Programmende in eine Datei geschrieben. Deren Inhalt:
Delphi-Quellcode:
13.11.2018 17:32:28
----------------
ScrollBox1Resiz
Meine Fehlermeldung:

Zitat:
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt HomeOfficerMainProject.exe ist eine Exception der Klasse EComponentError mit der Meldung 'Komponente mit der Bezeichnung PdfView0 existiert bereits' aufgetreten.
---------------------------
Die DCUs und die EXE habe ich schon mehrmals gelöscht.
Was ist da falsch?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: Das geheimnissvolle Controll

  Alt 13. Nov 2018, 16:56
Führe doch bitte mal diese Änderungen aus
Delphi-Quellcode:
procedure TRSPdfFrame.ScrollBox1Resize(Sender: TObject);
begin
  FReportlist.Add('ScrollBox1Resiz ENTER');
  PdfViewCreate;
  FReportlist.Add('ScrollBox1Resiz EXIT');
end;
und zeige uns dann den Inhalt der Datei
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#3

AW: Das geheimnissvolle Controll

  Alt 13. Nov 2018, 16:58
Naja, du läßt bei jedem Resize TRSPdfFrame.PdfViewCreate durchlaufen. Und erzeugst nur. Demnach ist beim zweiten Resize ein Control mit dem Namen auch bereits vorhanden.

Wenn's anders nicht geht, sollte du die bereits erzeugten Controls vorher entfernen.
Besser wäre es natürlich im Resize auch die Controls in ihrer Größe zu ändern, als sie zu löschen und neu zu erzeugen.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Das geheimnissvolle Controll

  Alt 13. Nov 2018, 17:05
Man muss übrigens beim dynamischen Erzeugen von Controls keinen Namen zuweisen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: Das geheimnissvolle Controll

  Alt 13. Nov 2018, 17:09
Naja, du läßt bei jedem Resize TRSPdfFrame.PdfViewCreate durchlaufen. Und erzeugst nur. Demnach ist beim zweiten Resize ein Control mit dem Namen auch bereits vorhanden.
Ich wette das weiß er, aber diese "Log-Datei" hat ihn in die Irre geführt, weil er denkt, dass die Methode TRSPdfFrame.ScrollBox1Resize nur einmal ausgeführt wird.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Das geheimnissvolle Controll

  Alt 13. Nov 2018, 17:21
Hi Schokohase

Danke für deine schnelle Antwort!
Tja, das ist doch schon sehr speziell - wenigstens für mich im Moment:
Zitat:
13.11.2018 18:02:00
----------------
ScrollBox1Resiz ENTER
ScrollBox1Resiz ENTER
ScrollBox1Resiz EXIT
So der Dateiinhalt, und so der aktuelle Code:
Delphi-Quellcode:
procedure TRSPdfFrame.ScrollBox1Resize(Sender: TObject);
begin
// FReportlist.Add('ScrollBox1Resiz')
  FReportlist.Add('ScrollBox1Resiz ENTER');
  PdfViewCreate;
  FReportlist.Add('ScrollBox1Resiz EXIT');
end;
Dass der Frame vor der Mainform erzeugt wird, ist mir schon klar, aber dass sich ein Ereignis widerholt, noch bevor es zu Ende ist...

Oder was verstehe ich jetzt falsch?

Okay, ich hab vor dem Anzeige der Vorschau die weiteren Beiträge gesehen und kann da nur mal bestätigen: Ja, ich weiss, der Anwender will die Form eventuell mehrmals resizen - ich muss das also kontrollieren.
Zur Zeit läüft der Test, wie ich die Dinger korrekt untereinander bringe. Das Stimmt insofern noch nicht, als dass die Form zu klein ist, um den gesammten Clientbereich der Scrollbox anzuzeigen. Mit dem Feler im Fokus hat mich die Sache mit dem Resize doch auf dem falschen Fuss erwischt.


Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#7

AW: Das geheimnissvolle Controll

  Alt 13. Nov 2018, 17:31
Das Erstellen der Controls gehört nicht ins Resize. Resize ist für Größenänderungen (wie der Name schon sagt).

Die Controls werden einmalig erstellt (z. B. im FormCreate oder einer daraus aufgerufenen Methode).
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#8

AW: Das geheimnissvolle Controll

  Alt 13. Nov 2018, 17:33
Ich wette das weiß er
Da war ich jetzt auch mal von ausgegangen. Aber manchmal......nach einem langen Arbeitstag...…
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Das geheimnissvolle Controll

  Alt 13. Nov 2018, 17:47
Hi zusammen

Man muss übrigens beim dynamischen Erzeugen von Controls keinen Namen zuweisen.
Ich werde später darauf zugreifen müssen - Okay, da täte es auch das Tag-Property.

Naja, du läßt bei jedem Resize TRSPdfFrame.PdfViewCreate durchlaufen. Und erzeugst nur. Demnach ist beim zweiten Resize ein Control mit dem Namen auch bereits vorhanden.
Ich wette das weiß er, aber diese "Log-Datei" hat ihn in die Irre geführt, weil er denkt, dass die Methode TRSPdfFrame.ScrollBox1Resize nur einmal ausgeführt wird.
Das heisst, dass es die Kontrolle auch dann braucht, wenn die Form nur in einer einzigen Gösse angezeigt wird.
Wie ist das denn mit dem Resize? Da ist mal der Basisframe - aber braucht der ein Resize? Der wird ja nie angezeigt.
Auf der Form habe ich gerade mal eine Frameinstanz - wäre nach meinem bisherigen Stand des Irrtums gerade mal ein Resize-Ereignis.

Anders sähe es wohl aus, wenn das Resize des Frames nach jedem Resize auf der Containerform aufgerufen würde - grundsätzlich könnte nach jedem Resize eines andern Elementes eine Anpssung nötig sein. Meine Frage hier wäre also: lösen Resize-Events anderer Elemente ein erneutes Resize aus?

Da war ich jetzt auch mal von ausgegangen. Aber manchmal......nach einem langen Arbeitstag...…
Ich bin in Rente. Das heisst, zumindest jetzt nicht übermüdet.


Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Das geheimnissvolle Controll

  Alt 13. Nov 2018, 18:39
Hi Delphi.Narium

Das Erstellen der Controls gehört nicht ins Resize. Resize ist für Größenänderungen (wie der Name schon sagt).

Die Controls werden einmalig erstellt (z. B. im FormCreate oder einer daraus aufgerufenen Methode).
Anfänglich rief ich die PdfCreate-Proedur aus dem Constructor des Frames auf - mit dem Resultat, das sämtlche Elemente übereinander erstellt wurden. Ist ja auch kein Wunder - zu dem Zeitpunkt gibts noch keine Form und eine Höhe eines Elements dieser Form schon gar nicht.
Ein Create oder sonst was(Activate, Show) kennt der Frame auch nicht. Wann also sollen diese Controls erzeugt werden?
Für den Produktiveinsatz stellt sich dieses Problem allerdings wohl nicht - hier ist dies Aufgabe zum Beispiel eines Eventhandlers, der auf das Öffnen einer Datei reagiert...

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  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 09:12 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