![]() |
Form lässt sich mit show nicht öffnen
Ich schreibe eine Anwendung bei der von der Haupt Form aus mehrere Forms mit show angezeigt werden.
Auf einmal funktioniert das mit mit einer Form nicht mehr. Es kommt keine Fehlermeldung, sondern es passiert garnichts. Ich kann mir nicht erklären warum, da mir nicht bewusst ist etwas in dem Bereich geändert zu haben. Ich habe die Eigenschaften verglichen, ich habe die Form aus dem Projekt entfernt, und neu eingefügt, ich habe die Uses Klausel geprüft. Alle ohne Befund. Woran kann es noch liegen? :gruebel: Gruß MrFish |
Re: Form lässt sich mit show nicht öffnen
Sthet die Visible-Eigenschaft der Form eventuell auf False?
|
Re: Form lässt sich mit show nicht öffnen
Zitat:
@MrFish: Wird das OnShow-Ereignis denn ausgeführt? Werden die Koordinaten des Form (Left und Top) auf Werte gesetzt, die außerhalb des sichtbaren Bereiches stehn? Greetz alcaeus |
Re: Form lässt sich mit show nicht öffnen
Zitat:
|
Re: Form lässt sich mit show nicht öffnen
Hi!
Passiert es immer mit der gleichen Form? Wird im OnShow dieser Form evtl. igendwelcher Code ausgeführt, der die Form wieder unsichtbar macht? |
Re: Form lässt sich mit show nicht öffnen
Kannst du etwas Code posten wie du die Form öffnest und was im OnShow steht?
Mfg MrScholz |
Re: Form lässt sich mit show nicht öffnen
Das ist der komplette Code der fraglichen Form:
Code:
und hier der Aufruf:
unit Unit8;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TVorlage = class(TForm) StringGrid1: TStringGrid; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; procedure FormCreate(Sender: TObject); procedure Button8Click(Sender: TObject); procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure Button9Click(Sender: TObject); procedure StringGrid1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Vorlage: TVorlage; implementation {$R *.dfm} procedure TVorlage.FormCreate(Sender: TObject); var Default: TStringList; i : Integer; j : Integer; pos : Integer; begin //---------------------------------------------------------------------------- //----------- Saltenköpf schreiben ------------------------------------------- //---------------------------------------------------------------------------- StringGrid1.Cells [0,0] := 'von'; StringGrid1.Cells [1,0] := 'bis'; StringGrid1.Cells [2,0] := 'von'; StringGrid1.Cells [3,0] := 'bis'; StringGrid1.Cells [4,0] := 'von'; StringGrid1.Cells [5,0] := 'bis'; StringGrid1.Cells [6,0] := 'von'; StringGrid1.Cells [7,0] := 'bis'; StringGrid1.Cells [8,0] := 'von'; StringGrid1.Cells [9,0] := 'bis'; StringGrid1.Cells [10,0] := 'von'; StringGrid1.Cells [11,0] := 'bis'; //---------------------------------------------------------------------------- //-------- Vorlagen laden --------------------------------------------------- //--------------------------------------------------------------------------- Default := TStringList.create; Default.LoadFromFile('c:/delphi/default.txt'); Pos := 0; For j := 1 to 20 do begin For i := 0 to 11 do begin StringGrid1.Cells[i,j] := default[pos]; Pos := Pos + 1; end; end; Default.Destroy; end; procedure TVorlage.Button8Click(Sender: TObject); var i : integer; j : integer; Default : TStringlist; begin Default := TStringlist.Create; //--------------------------------------------------------------------------- //-------- Vorlage abspeichern ---------------------------------------------- //--------------------------------------------------------------------------- For j := 1 to 20 do begin for i := 0 to 11 do default.Add(StringGrid1.Cells[i,j]); end; Default.SaveToFile('C:/delphi/default.txt'); Default.Destroy; Vorlage.Hide; end; procedure TVorlage.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin //-------------------------------------------------------------------------- //-------Tabelle nach Wochentagen unterteilen ------------------------------ //-------------------------------------------------------------------------- begin if Acol = 2 then begin StringGrid1.Canvas.Pen.Color:=clblack; StringGrid1.Canvas.Pen.Width:=1; StringGrid1.Canvas.moveto(Rect.Left,Rect.Top); StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom); end; if Acol = 4 then begin StringGrid1.Canvas.Pen.Color:=clblack; StringGrid1.Canvas.Pen.Width:=1; StringGrid1.Canvas.moveto(Rect.Left,Rect.Top); StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom); end; if Acol = 6 then begin StringGrid1.Canvas.Pen.Color:=clblack; StringGrid1.Canvas.Pen.Width:=1; StringGrid1.Canvas.moveto(Rect.Left,Rect.Top); StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom); end; if Acol = 8 then begin StringGrid1.Canvas.Pen.Color:=clblack; StringGrid1.Canvas.Pen.Width:=1; StringGrid1.Canvas.moveto(Rect.Left,Rect.Top); StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom); end; if Acol = 10 then begin StringGrid1.Canvas.Pen.Color:=clblack; StringGrid1.Canvas.Pen.Width:=1; StringGrid1.Canvas.moveto(Rect.Left,Rect.Top); StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom); end; if Acol = 12 then begin StringGrid1.Canvas.Pen.Color:=clblack; StringGrid1.Canvas.Pen.Width:=1; StringGrid1.Canvas.moveto(Rect.Left,Rect.Top); StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom); end; end; end; procedure TVorlage.Button9Click(Sender: TObject); begin Vorlage.Hide; end; procedure TVorlage.StringGrid1Click(Sender: TObject); begin end; end. procedure TWochenplan.VorlageClick(Sender: TObject); begin Vorlage.show; end; |
Re: Form lässt sich mit show nicht öffnen
Hallo MrFish,
ich würde zuerst mal das Default.Destroy gegen Default.Free ersetzen. Tritt das Problem bei Button9 wie auch bei Button8 auf? Manchmal kann es hilfreich sein wenn man Windows etwas Zeit gönnt Nachrichten zu verarbeiten. Bei dem Hide von Button8 würde ich versuchsweise vor dem Hide mal ein "Application.ProcessMessages" einfügen. Glaube zwar nicht daran das das der Fehler ist, aber es sieht so aus als würden Windows ein paar Messages nicht verarbeiten können. Hoffe es hilft Dummy |
Re: Form lässt sich mit show nicht öffnen
folgender Programmcode zeigt einen häufigen Anfängerfehler:
Delphi-Quellcode:
Wenn du ein Formularklasse (hier: TVorlage) hast, darfst du nicht innerhalb der Klasse auf ein bestimmtes
procedure TVorlage.Button9Click(Sender: TObject);
begin Vorlage.Hide; // FALSCH !!!!! //^^^^^^^ end; Objekt dieser Klasse zugreifen (hier: var Vorlage:TVorlage)!!! Stattdessen musst du den versteckten Parameter Self verwenden:
Delphi-Quellcode:
Grund:
procedure TVorlage.Button9Click(Sender: TObject);
begin self.Hide; // richtig // man kann self auch ganz weglassen Hide; end; Wenn jemand ein Formular der Klasse TVorlage erzeugt, muss er dieses Formular ja nicht zwingend in der Variablen Vorlage speichern. Dadurch können sehr seltsame Fehler und Zugriffsverletzungen auftreten. Diese Grundregel gilt für alle Klassen, nicht nur für Formulare. Die Regel gilt auch für alle objektorientierten Programmiersprachen (nicht nur für Delphi). |
Re: Form lässt sich mit show nicht öffnen
Hai MrFish,
mal ganz am Rande. Warum hast Du denn so viele IF-Abfragen in deinem OnDrawCell? Es wird doch immer das selbe gemacht. So müsste es doch auch gehen.
Code:
unit Unit8;
. . procedure TVorlage.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin //-------------------------------------------------------------------------- //-------Tabelle nach Wochentagen unterteilen ------------------------------ //-------------------------------------------------------------------------- if (Acol IN [2,4,6,8,10,12]) then begin StringGrid1.Canvas.Pen.Color:=clblack; StringGrid1.Canvas.Pen.Width:=1; StringGrid1.Canvas.moveto(Rect.Left,Rect.Top); StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom); end; end; . . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz