Autor Beitrag
bf109g.01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Do 14.04.11 09:29 
Hallo, ich arbeite mit 5 TButtons mit 5 Panels und wenn ich einen von den Buttons erwähle, so sollen sich bitte alle Panels entsprechend verändern. Damit ich nicht bei jedem einzelenen Button alles neu schreiben muss, will ich nur 2 Prozeduren benutzen:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
{Imagewahlfenster}
procedure TForm_Spiel.ImagesetConfig(Setnr: integer);
var i:integer;
begin
  // Bilder laden 
  for I := 1 to 5 do
    TImage(FindComponent('IImgSet'+IntToStr(i))).Picture.Bitmap.LoadFromResourceName(HInstance, 'IMG_S'+IntToStr(i)+'_1');
  // Fehlende Bilder auffüllen
  for I := 3 to 5 do
    TImage(FindComponent('IImgSet'+IntToStr(i))).Picture.Bitmap.LoadFromResourceName(HInstance, 'IMG_Nil');

  // Erst mal alle Panels auf Inaktiv & weiß
  for I := 1 to 5 do
    begin
      with TPanel(FindComponent('PImgSetStatus'+inttostr(i))) do
        begin   
          caption:='Inactive';
          Color:=clwhite; // dies geschieht übrigens nicht... kp warum. Allerdings wird hier kein Fehler ausgelöst...
        end;
    end;
  // Nach Nummer einstellen
  TPanel(FindComponent('PImgSetStatus'+inttostr(setnr))).Caption:='Active';
  TPanel(FindComponent('PImgSetStatus'+inttostr(setnr))).Color:=clsilver; { sobald ich diese Zeile drinlasse, 
erhalte ich eine direkt nach dem Ausführen (Form noch nicht einmal sichtbar, allerdings wird diese Prozedur 
logischerweise schon am Anfang aufgerufen) eine Fehlemeldung "Zugriffsverletzung bei Adresse... blablabla". 
Wenn ich die Zeile rausnehme kommt das nicht.}

end;

procedure TForm_Spiel.BImgSet1Click(Sender: TObject); // alle 5 Buttons aktivieren diese Proz.
begin
  Img.Games:=StrToInt((Sender as TButton).name[Length((Sender as TButton).name)]); // gibt die nr. des buttons zurück
  ImagesetConfig(Img.Games);
end;


Warum verträgt das Prog diese einzelne Zeile nicht? Wenn ich die Farbänderung (wie wenige Zeilen darüber) in ein with-do Konstrukt stecke, kommt der fehler auch. Oben gibt es aber keine Fehlermeldung, obwohl die beiden Aufrufe syntaktisch gleich sind...

EDIT: Beim ersten Aufruf, fehlten die begin und end nach dem with-do. jetzt kommt sogleich eine fehlermeldung... :(

Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am Do 14.04.2011 um 09:38
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 14.04.11 10:01 
Du hast da leider die Fehlerbehandlung vergessen...

Du solltest zuerst schauen was du da von FindComponent zurückbekommen hast. Denn das kann auch nil sein. Dadurch, dass du direkt castest, bekommst du einen Fehler gar nicht mit.
Und dann bekommst du Schutzverletzungen an kleinen Adresse wie 0x00000100 oder so, weil das worauf du in dem Objekt zugreifen willst von der Speicheradresse 0 aus gesucht wird statt von der eines Objekts.