Zum Inhalt springen

Delphi: Formular aktualisieren


Soltac

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...