Soltac Geschrieben 21. Mai 2003 Geschrieben 21. Mai 2003 Hi, also ich bin gerade am verzweifeln, ich bin fast fertig mit meinem Prog, jetzt wollt ich gerade noch was schönes einbauen und jetzt funzt es absolut nicht. Ich will das bei button click auf einem Formular das Formular größer wird, also gebe ich bei Ereignis OnClick des Buttons die "form.width := neue Breite" an. Aber er aktualisiert nur wenn ich das Formular schließe und erneut öffne refresh funzt auch nicht! Hoffe Ihr könnt mir helfen, wegen so einem sch*** so lange rum zu machen ist ja echt krank! mfg soltac Zitieren
Pointerman Geschrieben 21. Mai 2003 Geschrieben 21. Mai 2003 Moin! Ich kann das Problem nicht nachvollziehen. Eine Änderung der Width-Eigenschaft wirkt sich direkt auf das Formular aus. Kannste mal den Code des OnKlick-Events posten? Vielleicht is da ja irgendwas auf die schiefe Bahn geraten. Zitieren
Soltac Geschrieben 21. Mai 2003 Autor Geschrieben 21. Mai 2003 OK hier hast du aber in sin nur zwei Zeilen und ich glaub hier kann ich nicht so viel falsch machen, aber vielleicht ja doch;) procedure TFrm_PathSelect.btn_SearchPathClick(Sender: TObject); begin Frm_PathSelect.Width := 500; Frm_PathSelect.Refresh; <-- nur zum Testen end; Zitieren
geloescht_JesterDay Geschrieben 21. Mai 2003 Geschrieben 21. Mai 2003 Original geschrieben von Soltac Hoffe Ihr könnt mir helfen, wegen so einem sch*** so lange rum zu machen ist ja echt krank! Das wird mit Sicherheit nicht das letzte Mal sein das du dir sowas denkst Hast du mal ein Form.Repaint probiert? Repaint veranlasst das Formular sich neu zu zeichnen, sollte aber eigentlich nicht nötig sein. Ohne den Code zu ändern kannst du das auch mal probieren, iondem du mal ein anderes Fenster komplett vor dein Fenster schiebst und dann wieder weg, dann wird auch das Formular neu gezeichnet. Hört sich aber eher an, als ob du die Komponenten irgendwie anders dazu bringst ihre Position nicht zu ändern (ich denke mal darum geht es dir). Oder was genau soll diese Vergrösserung bringen? Zitieren
Soltac Geschrieben 21. Mai 2003 Autor Geschrieben 21. Mai 2003 Danke für deine Antwort Also ich mache das ganze eigentlich nur weil ich auf dem Formular zusätzlich noch eine DirectoryListBox und eine DriveComboBox habe die nicht sichtbar sein soll bis, der btn_SearchPath (durchsuchen) geklickt worden ist. Das ist das ganze Drama, wegen der Spielerei verbrat ich jetzt schon genauso viel Zeit wie für die ganze Schnittstelle:confused: Aber auch eine simple Schnittstelle muss ja was hermachen oder? Ps.: Ach ja das mit dem RePaint hab ich auch gerade versucht, aber keine Reaktion, Vielleicht liegt's ja auch an einer Eigenschat des Formulars dich ich falsch gesetzt hab, aber mir fällt da auch nix ein! Zitieren
geloescht_JesterDay Geschrieben 21. Mai 2003 Geschrieben 21. Mai 2003 Also ich fass das jetzt mal zusammen... Du hast ein Formular mit irgendwelchen Komponenten drauf. Rechts neben diesen Komponenten befindet sich eine DriveComboBox und eine DriveListBox. Das Formular hast du so verkleinert, das die Drive... Komponenten nicht sichtbar sind. Wenn du auf einen Button klickst machst du das Formular breiter und die Drive Komponenten sind zu sehen. Später dann wird wohl die Breite wieder auf den urspr. Wert verkleinert. Das hört sich im allgemeinen OK an, oder hast du es irgendwie anders gelöst? Zitieren
Soltac Geschrieben 21. Mai 2003 Autor Geschrieben 21. Mai 2003 Nein JesterDay, vollkommen richtig, genau so hab ich das. Aber jetzt pass mal auf: procedure Frm_PathSelect.btn_SearchPathClick(Sender: TObject); begin Frm_PathSelect.width := 505; Frm_PathSelect.Repaint; Frm_PathSelect.btn_Path.Visible := TRUE; end; procedure TPathSelect_Form.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); begin If PathSelect_Form.Width = 505 THEN NewWidth := 505 ; end; wenn ich das jetzt so löse dann funktioniert es! Aber das ist ja schon ein wenig verplant oder? Zitieren
geloescht_JesterDay Geschrieben 21. Mai 2003 Geschrieben 21. Mai 2003 Original geschrieben von Soltac wenn ich das jetzt so löse dann funktioniert es! Aber das ist ja schon ein wenig verplant oder? Wenn es funktioniert dann lass es so... ich seh zwar auch keinen Grund warum es so tut und anders nicht, aber man muss ja nicht alles verstehen ;)Wahrscheinlich hast du irgendwo anders eine Kleinigkeit die dafür verantwortlich ist, die man aber erstmal überhaupt nicht mir sowas in Verbindung bringt. Noch eine kleine Anmerkung zu deinem Code: du hast geschrieben: procedure TFormIrgendwas.btnIrgendwasClick(Sender: TObject); begin FormIrgendwas.xxx; FormIrgendwas.yyy; ... end; schöner wäre es das ganze aber so zu schreiben: procedure TFormIrgendwas.btnIrgendwasClick(Sender: TObject); begin self.xxx; self.yyy; // oder wenn yyy eindeutig ist auch nur // yyy; ohne self ... end; Was ist daran jetzt besser? Mit FormIrgendwas bezieht du dich auf eine Varialbe oder besser gesagt auf eine Instanz einer Klasse und zwar der Klasse TFormIrgendwas. Wenn du ein Formular in Delphi erzeugst wird das immer so vorgegeben (var Form1: TForm1) Du kannst aber wenn du willst irgendwo im code noch eine 2te Instanz aufrufen, z.B. so: procedure IrgendEineProzedur; var MeineInstanz: TFormIrgendwas; begin MeineInstanz:= TFormIrgendwas.create(nil); try ... finally MeineInstanz.free; end; end; Wenn du das so machst funktioniert es mit deiner Version nicht, da du darin ja fest die Instant FormIngendwas ansprichst (hier aber die Instanz MeineInstanz verwendest). Die Variable self ist immer in Klassen vorhanden und beziehen sich auf die aktuelle Instanz. Das macht jetzt nicht viel aus, aber wenn man es sich angewöhnt passieren wenn man es mal braucht keine Fehler So... genug Delphi-Lehrstunde für heute Zitieren
Soltac Geschrieben 21. Mai 2003 Autor Geschrieben 21. Mai 2003 Ja vielen dank, :hodata bin immer offen für Kritik und Hilfe! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.