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.

Empfohlene Antworten

Veröffentlicht

Servus,

ich möchte ein Editfeld zu laufzeit ändern.


        RECT rect;

	m_ceComment.GetRect(&rect);

	rect.bottom = rect.bottom + 28;

	m_ceComment.SetRect(&rect);

	UpdateWindow();

so gehts leider nicht. da wird nur das innere RECT geändert.

ähm.... mit welcher IDE arbeitest du denn?

Also beim Borland builder siehts etwa wie folgt aus:


edt_eingabefeld.height = edt_eingabefeld.height+10;

aber kommt halt auf die ide an, wie die das händelt

VC++ 6.0 "MFC" habe ich leider vergessen



	CWnd *wnd = GetDlgItem(IDC_ED_COMMENT);

	wnd->GetWindowRect(&rect);

	rect.bottom = rect.bottom + 28;

	SetWindowPos(wnd,rect.left,rect.top,rect.right,rect.bottom,NULL);

	UpdateWindow();

Ich weis nicht, da bewegt sich nichts?

ja.


	CWnd *wnd = GetDlgItem(IDC_ED_COMMENT);

	wnd->GetWindowRect(&rect);

	rect.bottom = rect.bottom + 28;

	wnd->SetWindowPos(wnd,rect.left,rect.top,rect.right,rect.bottom,NULL);

	UpdateWindow();

so bewegt sich auch nichts.


void CMyDlg::OnSetfocusEdComment() 

{

	CRect rect;

	CWnd *wnd = GetDlgItem(IDC_ED_COMMENT);

	wnd->GetWindowRect(&rect);

	rect.bottom = rect.bottom + 28;

	wnd->SetWindowPos(wnd,rect.left,rect.top,rect.right,rect.bottom,NULL);

	UpdateWindow();


}

Mal sehen, jetzt gehts erst mal nach hause, schönes wochenende


void CMyDlg::OnSetfocusEdComment() 

{

	CRect rect;

	CWnd *wnd = GetDlgItem(IDC_ED_COMMENT);

	wnd->GetWindowRect(&rect);

	rect.bottom = (rect.bottom + 28);

	wnd->MoveWindow(rect,TRUE);

	UpdateWindow();

}

Funktioniert bei mir.


void CMyDlg::OnSetfocusEdComment() 

{

	CRect rect;

	CWnd *wnd = GetDlgItem(IDC_ED_COMMENT);

	wnd->GetWindowRect(&rect);

	rect.bottom = (rect.bottom + 28);

	wnd->MoveWindow(rect,TRUE);

	UpdateWindow();

}

Funktioniert bei mir.

Wen ich den Code bei mir einfüge, dann verschiebt es mir das Editfeld

an eine ganz andere Stelle. Die Höhe wird geändert, aber das ganze Editfeld

verschiebt sich. Kann es eventuell daran liegen, dass das Editfeld in einem

Static Rahmen liegt? Denn es wird aus diesem verschoben und liegt dann

daneben.

TinTin

Mit GetWindowRect bekommst du Koordinaten relativ zur linken oberen Ecke des Bildschirms. MoveWindow geht aber davon aus, dass die Koordinaten relativ zur linken oberen Ecke des Clientbereichs des Elternfensters sind.

Es sollte ausreichen, wenn du statt GetWindowRect GetClientRect verwendest.

Ach ja, das hier:

rect.bottom += 28;

macht weniger den Eindruck eines BASIC-Umsteigers.

Es sollte ausreichen, wenn du statt GetWindowRect GetClientRect verwendest.

Das ist noch nicht ganz die Lösung.

CWnd *wnd = GetDlgItem(IDC_ED_COMMENT);

	wnd->GetClientRect(&rect);
ergibt: {top=0 bottom=16 left=0 right=121} (das sind nicht die Koordinaten im Client, die Maße des Feldes)

rect.bottom += 28;

wnd->MoveWindow(rect,TRUE);

setzt mir das Editfeld dann auch genau ins linke obere Eck des Fenster.

Was auch logisch ist.

Danke Klotzkopp,

dass ist die Lösung. ScreenToClient hab ich gesternauch gefunden, hatte aber

leider noch keine Zeit zu posten. Dank auch nochmal an alle für Eure Bemühung.

TinTin

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

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.