Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Delphi: Formular aktualisieren

Empfohlene Antworten

Veröffentlicht

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

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.

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;

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?

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!

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?

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?

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

Ja vielen dank,

:hodata

bin immer offen für Kritik und Hilfe!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.