全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1307
推到 Plurk!
推到 Facebook!

表格視窗在放到最大時其包含的可視元件可依比例放大嗎?

答題得分者是:懷舊的人
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-05 15:56:56 IP:211.73.xxx.xxx 未訂閱
請教大家: 我在設計一表格時該表格視窗不是放到最大,其內包含的可視元件有dbnavigator,dbgrid,dbedit,tlabel(表示欄位名稱),dbcombobox,tbotton,請問有辦法讓使用者在按表格視窗右上角的放到最大鈕時,在表格視窗在放到最大時其包含的可視元件也可依比例放大嗎?若可以的話要怎麼做呢?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-05 16:56:41 IP:202.62.xxx.xxx 未訂閱
您好﹗    將這些可視元件的Anchors屬性中的子屬性值皆設為True試試﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-05 22:52:58 IP:211.73.xxx.xxx 未訂閱
引言: 您好﹗ 將這些可視元件的Anchors屬性中的子屬性值皆設為True試試﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
我試了,但似乎不行,在本站有一範例程式(25826_ResizerForm.zip)可在表格視窗在放到最大時其包含的可視元件可依比例放大,惟其包含的可視元件TLabel似乎不能,不曉得為什麼其他元件可隨表格視窗縮放僅TLabel元件不能.
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-06 07:01:42 IP:220.132.xxx.xxx 未訂閱
參考 http://delphi.ktop.com.tw/link.asp?TOPIC_ID=71461 努力會更接近成功
------
努力會更接近成功
lcjan
初階會員


發表:11
回覆:60
積分:29
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-06 08:16:51 IP:61.59.xxx.xxx 未訂閱
試試看: Form1.ScaleBy(2,1); 他會將form上的東西全放大.不曉得何不合您用
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-06 08:44:30 IP:202.39.xxx.xxx 未訂閱
引言: 我試了,但似乎不行,在本站有一範例程式(25826_ResizerForm.zip)可在表格視窗在放到最大時其包含的可視元件可依比例放大,惟其包含的可視元件TLabel似乎不能,不曉得為什麼其他元件可隨表格視窗縮放僅TLabel元件不能.
也許是 TLabel.AutoSize 屬性設成 True 緣故 -- hagar.
懷舊的人
高階會員


發表:28
回覆:152
積分:141
註冊:2003-01-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-06 11:27:08 IP:211.78.xxx.xxx 未訂閱
參考看看
unit FirstForm;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,TypInfo,dxflchrt, ExtCtrls, ComCtrls;    type
  TFormFirstForm = class(TForm)
    Timer0: TTimer;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
    OW,OH,OP: Longint;
    PropInfo: PPropInfo;
    OldCName,OldCSize: TStringList;
  public
    { Public declarations }
  end;    var
  FormFirstForm: TFormFirstForm;    implementation    {$R *.dfm}    procedure TFormFirstForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  // 禁止按 Alt F4 結束程式
  if (ssAlt in Shift) and (Key = VK_F4) then Abort;
end;    procedure TFormFirstForm.FormCreate(Sender: TObject);
var
  S: String;
  I,J: Integer;
begin
  // 儲存 原 Form width , height , PixelsPerInch
  OW := TForm(Sender).Width;
  OH := TForm(Sender).Height;
  OP := TForm(Sender).PixelsPerInch;
  OldCName := TStringList.Create;
  OldCSize := TStringList.Create;
  for I := 0 to ComponentCount-1 do begin
      // Have Font
      PropInfo := GetPropInfo(Components[I], 'ImeName');
      if PropInfo <> nil then TEdit(Components[I]).ImeName := '';
      if not (Components[I] is TControl) then Continue;
      // Top,Left,Width,Height
      OldCName.Add(Components[I].Name); OldCSize.Add(Components[I].Name);
      OldCName.Add(Components[I].Name '.Top'); OldCSize.Add(IntToStr(TControl(Components[I]).Top));
      OldCName.Add(Components[I].Name '.Left'); OldCSize.Add(IntToStr(TControl(Components[I]).Left));
      OldCName.Add(Components[I].Name '.Width'); OldCSize.Add(IntToStr(TControl(Components[I]).Width));
      OldCName.Add(Components[I].Name '.Height'); OldCSize.Add(IntToStr(TControl(Components[I]).Height));
      // Have Font
      PropInfo := GetPropInfo(Components[I], 'Font');
      if PropInfo <> nil then begin
         OldCName.Add(Components[I].Name 'Font.FontSize'); OldCSize.Add(IntToStr(TEdit(Components[I]).Font.Size));
         OldCName.Add(Components[I].Name 'Font.FontHeight'); OldCSize.Add(IntToStr(TEdit(Components[I]).Font.Height));
      end;
      // TStatusBar
      if Components[I] is TStatusBar then
         with TStatusBar(Components[I]) do
              for J := 0 to Panels.Count-1 do begin
                  S := Name;
                  S := S 'Panels.' FormatFloat('00',J) '.Width';
                  OldCName.Add(Name 'Panels.' FormatFloat('00',J) '.Width'); OldCSize.Add(IntToStr(Panels[J].Width));
                  OldCName.Add(Name 'Panels.' FormatFloat('00',J) '.Width'); OldCSize.Add(IntToStr(Panels[J].Width));
              end;
  end;
end;    procedure TFormFirstForm.FormResize(Sender: TObject);
var
  I,J: Integer;
  NW,NH,NP: Longint;
  T,L,W,H,FS,FH: Longint;
begin
  if OldCName = Nil then Exit;
  NW := TForm(Sender).Width;
  NH := TForm(Sender).Height;
  NP := TForm(Sender).PixelsPerInch;
  for I := 0 to ComponentCount-1 do begin
      if not (Components[I] is TControl) then Continue;
      if OldCName.IndexOf(Components[I].Name) = -1 then Continue;
      T := OldCName.IndexOf(Components[I].Name '.Top'); T := StrToInt(OldCSize.Strings[T]);
      L := OldCName.IndexOf(Components[I].Name '.Left'); L := StrToInt(OldCSize.Strings[L]);
      W := OldCName.IndexOf(Components[I].Name '.Width'); W := StrToInt(OldCSize.Strings[W]);
      H := OldCName.IndexOf(Components[I].Name '.Height'); H := StrToInt(OldCSize.Strings[H]);
      TControl(Components[I]).Top    := Longint((T * NH div OH) * NP div OP);
      TControl(Components[I]).Left   := Longint((L * NW div OW) * NP div OP);
      TControl(Components[I]).Width  := Longint((W * NW div OW) * NP div OP);
      TControl(Components[I]).Height := Longint((H * NH div OH) * NP div OP);
      // 檢查是否有 font property
      PropInfo := GetPropInfo(Components[I], 'Font');
      if PropInfo <> nil then begin
         FS := OldCName.IndexOf(Components[I].Name 'Font.FontSize');
         FH := OldCName.IndexOf(Components[I].Name '.FontHeight');
         if FS <> -1 then begin
            FS := StrToInt(OldCSize.Strings[FS]);
            TEdit(Components[I]).Font.Size := Longint((FS * NP div OP) * NH div OH);
         end;
      end;
      if Components[I] is TStatusBar then
      with TStatusBar(Components[I]) do begin
           for J := 0 to Panels.Count-1 do begin
               W := OldCName.IndexOf(Name 'Panels.' FormatFloat('00',J) '.Width'); W := StrToInt(OldCSize.Strings[W]);
               Panels[J].Width  := Longint((W * NW div OW) * NP div OP);
           end;
      end;
  end;
end;    end.
 
系統時間:2024-07-03 20:16:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!