AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Inputbox mit autmatischer Längenanpassung wie Messagebox
Thema durchsuchen
Ansicht
Themen-Optionen

Inputbox mit autmatischer Längenanpassung wie Messagebox

Ein Thema von v2afrank · begonnen am 13. Okt 2011 · letzter Beitrag vom 13. Okt 2011
Antwort Antwort
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#1

AW: Inputbox mit autmatischer Längenanpassung wie Messagebox

  Alt 13. Okt 2011, 09:52
ups , ok. Wenn Du Deinen Text vorher mit #13#10 versiehst?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
575 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Inputbox mit autmatischer Längenanpassung wie Messagebox

  Alt 13. Okt 2011, 10:15
Geht es schief. An der Stelle wird zwar ein Zeilenumbruch gemacht, aber es wird zusätzlich noch ein Zeilenumbruch am Ende des Fensters gemacht. Probier es aus (mein Chef will unbedingt diesen Text haben):
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
const Frage='Select the device variant.'+#13#10+
            '==============='+#13#10#13#10+
            '1 - UPS with compact powerblock'+#13#10+
            ' TempSensors R1.1 / R2.1 / R3.1 on REC - R4.1 / R5.1 / R6.1 on INV'+#13#10#13#10+
            '2 - UPS with high powerblocks'#13#10+
            ' TempSensors R1,1 / R1.2 / R2.1 / R2.2 / R3.1 / R3.2 on REC - R4.2 / R5.2 / R6.2 on INV'+#13#10#13#10+
            '3 - UPS with high powerblocks'+#13#10+
            ' TempSensors R1.1 / R1.2 / R2.1 / R2.2 / R3.1 / R3.2 on REC - R4.1 / R4.3 / R5.1 / R5.3 / R6.1 / R6.3 on INV'+#13#10#13#10;

begin
  MessageBox(0, Frage, 'Test', MB_ICONWARNING or MB_OK);
 InputBox(Application.Title,Frage,'');
end;
Messagebox zeigt es zumindest unter XP vernünftig formatiert an (Unter Windows 7 ist es ein bischen verschoben).
Inputbox bricht aber schon vorher den Text um.

Dabei habe ich noch ein interessantes Phänomen entdeckt. Compiliere ich das unter XE2 kann man die Inputbox gar nicht mehr erkennen. Da scheint Embarcadero einiges verändert zu haben. Könnte das einer mal mit XE testen ? (Bis Delphi 2010 funktioniert es richtig)

Mich interessiert jetzt einfach die Lösung des Problems, ich denke aber für meine eigentlich eigentliche Anwendung werde ich eher auf einen Nachbau des Win 7 Standarddialoges (mit Optionsauswahl) zurückgreifen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#3

AW: Inputbox mit autmatischer Längenanpassung wie Messagebox

  Alt 13. Okt 2011, 10:33
Mit XE auf Vista Business 32-Bit:
Angehängte Grafiken
Dateityp: png Inputbox.png (22,9 KB, 42x aufgerufen)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
575 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Inputbox mit autmatischer Längenanpassung wie Messagebox

  Alt 13. Okt 2011, 10:38
Dazu der Gegenvergleich mit XE2 unter Vista:
Angehängte Grafiken
Dateityp: jpg Zwischenablage01.jpg (6,7 KB, 30x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Inputbox mit autmatischer Längenanpassung wie Messagebox

  Alt 13. Okt 2011, 10:41
Ich würde mir eine passendes Formular basteln ....
Eingriffsmöglichkeiten gäbe es schon, allerdings müsste man da auch erst alles benötigte zusammensuchen .... z.B. in der Art wie unten, tut aber nicht das was Du brauchst...

Delphi-Quellcode:
var
  t:TMyThread;
begin
    t:=TMyThread.Create;

  MessageBox(0, Frage, 'Test', MB_ICONWARNING or MB_OK);
 InputBox(Application.Title+' ',Frage,'');
 t.Free;
end;

{ TMyThread }

procedure TMyThread.Execute;
var
  h:Thandle;
begin
  inherited;
  while not Terminated do
    begin
      h := FindWindow(nil,Pchar(Application.Title+' '));
      if h>0 then MoveWindow(h,0,0,400,400,true);
      sleep(50);

    end;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
575 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Inputbox mit autmatischer Längenanpassung wie Messagebox

  Alt 13. Okt 2011, 10:42
Ich denke auch, das basteln eines eigenen Formulars ist leichter. Danke
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#7

AW: Inputbox mit autmatischer Längenanpassung wie Messagebox

  Alt 13. Okt 2011, 10:50
Ich habe mal ein wenig herumprobiert, evtl. mag das als erster Ansatz hilfreich sein:
Delphi-Quellcode:
procedure TForm7.Button1Click(Sender: TObject);
const
  Frage = 'Select the device variant.' + #13#10 + '===============' +
    #13#10#13#10 + '1 - UPS with compact powerblock' + #13#10 +
    ' TempSensors R1.1 / R2.1 / R3.1 on REC - R4.1 / R5.1 / R6.1 on INV' +
    #13#10#13#10 + '2 - UPS with high powerblocks'#13#10 +
    ' TempSensors R1,1 / R1.2 / R2.1 / R2.2 / R3.1 / R3.2 on REC - R4.2 / R5.2 / R6.2 on INV'
    + #13#10#13#10 + '3 - UPS with high powerblocks' + #13#10 +
    ' TempSensors R1.1 / R1.2 / R2.1 / R2.2 / R3.1 / R3.2 on REC - R4.1 / R4.3 / R5.1 / R5.3 / R6.1 / R6.3 on INV'
    + #13#10#13#10;
  XOffset = 10;
  YOffset = 10;
var
  R: TRect;
begin
  R := Rect(XOffset, YOffset, XOffset, YOffset);
  DrawText(Canvas.Handle, Frage, -1, R, DT_LEFT or DT_TOP or DT_CALCRECT);
  ClientWidth := R.Right - R.Left + XOffset * 2; //Offset * 2 für Rand links und rechts, vertikal natürlich genauso, s.u.
  ClientHeight := R.Bottom - R.Top + YOffset * 2 + 50; //50 für den Button, ist natürlich anzupassen
  DrawText(Canvas.Handle, Frage, -1, R, DT_LEFT or DT_TOP);
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Inputbox mit autmatischer Längenanpassung wie Messagebox

  Alt 13. Okt 2011, 11:02
Delphi-Quellcode:
Function MyInputQuery(const ACaption, APrompt: string; var Value: string): Boolean;
var
  f:TForm;
  l:TLabel;
  Edit:Tedit;
  bok,bnok:TBitBtn;
begin
  F := TForm.Create(nil);
  l := TLabel.Create(f);
  l.Parent := f;
  l.Align := alTop;
  l.AlignWithMargins := true;
  l.Caption := APrompt;
  l.WordWrap := true;
  f.ClientWidth := l.Width + 20;


  Edit := Tedit.Create(f);
  Edit.Parent := f;
  Edit.Top := l.Top + l.Height + 10;
  Edit.Left := 10;
  Edit.Width := f.ClientWidth - 20;
  Edit.Text := Value;
  f.Caption := Acaption;
  bok := TBitBtn.Create(f);
  bok.Parent := F;
  bok.Caption := 'OK';
  bok.ModalResult := mrok;
  bok.Default := true;
  bnok:= TbitBtn.Create(f);
  bnok.Parent := F;
  bnok.Cancel := true;
  bnok.ModalResult := mrCancel;
  bnok.Caption := 'Abbrechen';
  bok.Top := Edit.Top + Edit.Height + 10;
  bnok.Top := Edit.Top + Edit.Height + 10;
  bok.Left := 10;
  bnok.Left := f.ClientWidth div 2 + 10;
  bok.Width := f.ClientWidth div 2 - 20;
  bnok.Width := f.ClientWidth div 2 - 20;
  f.ClientHeight := bok.Top + bok.Height + 10;
  f.Position := poScreenCenter;
  f.ShowModal;
  Result := F.ModalResult= mrok;
  Value := Edit.Text;
  f.Free;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (13. Okt 2011 um 11:05 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 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