Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi FindComponent funktioniert nicht mehr (https://www.delphipraxis.net/56065-findcomponent-funktioniert-nicht-mehr.html)

Tyler 31. Okt 2005 15:32


FindComponent funktioniert nicht mehr
 
Seltsames Problem, hoffe ihr könnt mir auf die richtige Spur helfen:

In meiner Form gibts ein paar normale Editfelder. Z.B. ein Feld "ed_name1".
Dieses Feld spreche ich folgendermaßen an, um es zu füllen.
Delphi-Quellcode:
      (FindComponent('ed_name_' + IntToStr(i)) as TEdit).Text := Query.FieldByName('name_' + IntToStr(i) ).AsString;
Das klappt wunderbar. Dann gibts ein Feld namens "ed_prgr1". Auch diesem versuche ich auf oben genannte Weise Text zuzuweisen.
Delphi-Quellcode:
      (FindComponent('ed_prgr' + IntToStr(j)) as TEdit).Text := Query.FieldByName( 'prgr' + IntToStr(j) ).AsString;
Nur komisch: Das klappt nicht. Also erstell ich zum Testen ein neues Editfeld: "Edit1" und versuche diesem einmal direkt Text zuzuweisen:
(FindComponent('Edit1') as TEdit).Text := 'XgfhjhgjkX';
[delphi]

Klappt nicht. Und ich bin total verwirrt. Gibt es irgendeine Eigenschaft, die ich bei den Edit-Feldern aus Versehen geändert habe? Warum springen die erst genannten auf mein FindComponent an, die unteren aber nicht? Hilfe.

Danke im Voraus :)

Tyler

sECuRE 31. Okt 2005 15:44

Re: FindComponent funktioniert nicht mehr
 
Hi,

ich würde mit
Delphi-Quellcode:
if (FindComponent('Edit1') <> nil) then
  ShowMessage('Edit existiert')
else ShowMessage('Edit existiert nicht');
testen, ob das Control überhaupt existiert. Falls das der Fall ist, sollte eine einfache Zuweisung auf jeden Fall funktionieren.

cu

marabu 31. Okt 2005 15:59

Re: FindComponent funktioniert nicht mehr
 
Hallo Tyler,

vielleicht hilft dir der Code aus diesem thread ein wenig weiter: klick

Grüße vom marabu

SirThornberry 31. Okt 2005 16:45

Re: FindComponent funktioniert nicht mehr
 
Du schreibst "es klappt nicht", wie du dir sicher denken kannst wissen wir damit auch nicht mehr. Es wäre also sinnvoll wenn du noch sagen kannst woran du erkennst das etwas nicht klappt. Kommt eine Fehlermeldung? Wenn FindComponent die Komponente nicht findet müsste eine AV kommen. Wenn dem nicht so ist funktioniert FindComponent und der Fehler liegt auf jeden fall wo anders.

Tyler 1. Nov 2005 13:49

Re: FindComponent funktioniert nicht mehr
 
Danke für eure Antworten:

@secure:
Hab mal eine IF-Abfrage eingebaut. Delphi scheint die Komponente ganz offensichtlich nicht zu finden.

@marabu:
Vielen Dank. Bin da mal rüber geflogen - hilft aber erstmal nicht viel weiter

@SirThonberry:
Sorry, ich hab mich tatsächlich etwas missverständlich ausgedrückt. Das Problem ist: Die gesuchte Komponente (das Editfeld) nimmt den Text nicht an. Nochmal zur Verdeutlichung:


Delphi-Quellcode:
   
    // HIER MAL EIN PAAR ZEILEN ÜBERHALB MEINER PROBLEM-ZEILEN GANZ UNTEN
    // HIER IST DIE WELT NOCH IN ORDNUNG, DIE EDIT-FELDER WERDEN
    // ORDNUNGSGEMÄß GEFÜLLT
    for i := 2 to 6 do
    begin
      (FindComponent('ed_name_ktk' + IntToStr(i)) as TEdit).Text := qFirmendt.FieldByName('name_ktk' + IntToStr(i) ).AsString;
      (FindComponent('ed_vorname_k' + IntToStr(i)) as TEdit).Text := qFirmendt.FieldByName('vorname_k' + IntToStr(i) ).AsString;
      (FindComponent('ed_telefon' + IntToStr(i)) as TEdit).Text  := qFirmendt.FieldByName('telefon' + IntToStr(i) ).AsString;
      (FindComponent('ed_fax' + IntToStr(i)) as TEdit).Text      := qFirmendt.FieldByName('fax' + IntToStr(i) ).AsString;
      (FindComponent('ed_bereich' + IntToStr(i)) as TEdit).Text  := qFirmendt.FieldByName('bereich' + IntToStr(i) ).AsString;
      (FindComponent('ed_geburtdat' + IntToStr(i)) as TEdit).Text := qFirmendt.FieldByName('geburtdat' + IntToStr(i) ).AsString;
      (FindComponent('ed_funk' + IntToStr(i)) as TEdit).Text     := qFirmendt.FieldByName('funk' + IntToStr(i) ).AsString;
      (FindComponent('ed_email' + IntToStr(i)) as TEdit).Text    := qFirmendt.FieldByName('email' + IntToStr(i) ).AsString;
    end; // FOR TO


    // ZUM TESTEN MAL NE IF-ABFRAGE - KEIN ERFOLG, KEINE MESSAGE.
    // ES GIBT ABER EIN FELD "EDIT2" - 
    // ICH MACH GERNE N SCREENER VON DER FORM; WERS NICHT GLAUBT :D
    if (FindComponent('Edit2')) <> nil then ShowMessage('DA IS SIE');
    // NOCH N TEST MIT DER BESAGTEN KOMPONENTE, AUCH HIER BLEIBT
    // DAS EDIT-FELD LEER
    (FindComponent('Edit2') as TEdit).Text := ' TEST TEST ';
    // HIER DIE EIGENTLICH SCHLEIFE, SIE SOLL 30-EDITFELDER FÜLLEN
    // WAS SIE ABER WIE GESAGT NICHT TUT. FEHLERMELDUNGEN GIBTS AUCH NICHT
    for j := 1 to 30 do
    begin
      (FindComponent('ed_prgr' + IntToStr(j)) as TEdit).Text := 'XX'; //qFirmendt.FieldByName( 'prgr' + IntToStr(j) ).AsString;
    end; // FOR TO
Ihr versteht? Exakt die gleichen Bedingungen, genau die gleiche Schleifen, der gleiche Algo - aber es funktioniert einfahc nicht: Die Edit-Felder, die in der letzten, unteren FOR-TO-Schleife angesprochen werden bleiben hartnäckig leer. Und ich raufe mir hier die Haare und zweifel schon an meiner Zurechnungsfähigkeit.

tyler

//EDIT

Ich glaub ich habs, bin aber noch ungläubig.
Die o.g. FOR-TO-Schleifen laufen selber in einm übergeordneten WITH FORM2 DO BEGIN ... END, da die Query "qFirmendt" auf der FORM2 liegt. Ich hab nun einfach den WITH-DO-Bereich vorher beendet, und das FORM2 direkt vor QFIRMENDT geschrieben. Das klappt. KOmisch bleibt trotzdem und weiterhin, dass die Felder davor, die ja auch in dem Bereich lagen, angesprochen wurden! Naja. Um eine Erfahrung reicher.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 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